Multiprocessors and multicomputers differ in important ways in terms of hardware and software. One kind of machine is hard to build but easy to program, and the other is easy to build but hard to program. We believe that by using shared objects as a programming paradigm, it is possible to combine the best properties of these two models. In this paper, we describe how it can be done. Our solution is based on having the programmer declare objects that can be potentially shared among processes on all machines in the system. These objects are passive-they are invoked by threads, but do not themselves contain internal threads. The shared objects act as though they are in a common shared memory (even though they are not), and can be accessed by all authorized processes by simply invoking their methods. Each method operates only on a single object.