The purpose of the Guide project is to explore the use of shared objec
ts for communication in a distributed system, especially for applicati
ons that require cooperative work. Since 1986, two prototypes have bee
n implemented respectively on top of Unix (Guide-1) and Mach 3.0 (Guid
e-2). They have been used for the development of distributed cooperati
ve applications, allowing us to validate or reject many design choices
in the system. This paper gathers the lessons learned from our experi
ence and compares the basic design choices with those in other distrib
uted object-oriented systems. The lessons may be summarized as follows
. This system layer must provide a generic interface for the support o
f several object-oriented languages. It must manage fine grained objec
ts and enforce protection between objects and processes. These require
ments can be achieved with an acceptable trade-off between protection
and efficiency.