Everything is a distributed object

Michael van der Gulik squeakml at gulik.co.nz
Wed Oct 11 19:55:34 UTC 2006


Martin Drautzburg wrote:
> Hello all,
> 
> I've seen various attempts to add distributed computing capabilities on top of 
> an existing language. For a true distributed system I would expect it to be 
> possible to instantiate objects of a remote class or to subclass a remote 
> class and other stuff like this. My impression is that those things are 
> difficult when built on top of an existing language.
> 
> Since the paradigm "everything is an object" pays so well, I thought it might 
> be less painful to implement a distributed system from ground up, starting 
> with the paradigm: "everything is a distributed object". Maybe languages like 
> Erlang and E get close to this paradigm. Other than those I am not aware of 
> any attempts to implement distributed computhing in this way (from ground 
> up).
> 
> Are you aware of any ?

I'm working on one; http://www.squeaksource.com/DPON.html. Note that the 
version there is really, really old and doesn't run. My current version 
does remote invocation and a few other nice things, but is still very 
unstable. I can't release it until I've sorted out IP issues with my 
current employer (or get fired :-) ).

For the record: Distributed computing is *hard*. I think in terms of 
asynchronous, reliable message passing. You have to remember that the 
message might be slow, or that it might be very slow so that random 
messages turn up when you considered them lost, or remote hosts might 
die, or the worst: remote hosts might just get plain confused. Add 
security to the mix and the mind boggles.

The original, old, architecture doc is here: 
http://www.gulik.co.nz/dpon_design.pdf. This is also out of date.

The architecture I've thought up allows any old Smalltalk object to be a 
distributed object, including SmallIntegers, Classes (including 
MethodDictionaries), and hopefully BlockClosures when I get that far. 
Each object can be replicated using any algorithm - so far I've done 
CopyRepAlg (which is pass-by-copy), remote object invocation and a 
couple of master/slave broadcasting algorithms. The distribution is 
seamless (in that you use a distributed object just like a plain object) 
except that if something goes wrong, it'll hang :-).

I've also had a good think about using capabilities for security and 
"Domains" for making sure that untrusted code can run locally without 
consuming too many resources or getting unauthorised access to stuff. 
The code for the Domains stuff is in 
http://www.squeaksource.com/Domains, and a description is here: 
http://people.squeakfoundation.org/article/62.html.

Cheers,
Michael.




More information about the Squeak-dev mailing list