How to Share Memory in a Distributed System