Seeking designs for a capabilities-based multi-user system

Mark S. Miller markm@caplet.com
Thu, 20 Jul 2000 13:33:09 -0700


At 03:22 PM 7/19/00 , Steven J. Owens wrote:
>      I just joined the e-lang list, so I thought I'd say hello.
>Mostly I suspect I'll be fairly quiet - crypto is more of a spectator
>sport to me, I can't keep up with the math.

With posts like this, I hope you will be less quiet than you expect. ;) 
Please don't view the erights site as exclusively about crypto or 
programming language design.  The erights site is the home of E, and 
E-relevant topics -- including yours -- are welcome on the list.  Welcome!  
Glad to have you aboard.

>      I find e-lang and capabilities interesting, particularly in the
>potential for creating tools to enable people to evolve their own
>social systems (I found the power-point slides on "Contracting-out
>Contract Law" particularly interesting; I especially liked the
>subtitle, "Importing Trust Into Low-Trust Societies Electronically").

Thanks.  I actually think that this proposal would stand a good chance at 
lifting hundreds of millions of people up out of misery.  Unlike other 
save-the-world technologies, this would address much more than just their 
material misery.  If you like this proposal, you'd love "Trust" by Francis 
Fukuyama and "The Other Path" by Hernando DeSoto.  Both books have my 
highest recommendation, and both are great background for making progress on 
this proposal.  And neither book is about crypto or programming language 
design. ;)


>      I think, after reading some of the language tutorials and short
>articles at www.erights.org, that I understand the basic concept of
>capabilities.  If I can loosely summarize for the pop-science
>audience, a capability is sort of like a combination of:
>
>      a promise of some programmatic service or information 
>      a digital signature that identifies and verifies it
>      a URL (effectively) pointing to the object that can provide the service

Could you expand on this?  It's a sufficiently different take that I'm not 
sure how to respond until I understand it better.


>      I can see all sorts of nifty potentials for capabilities-based
>systems.  Having them available as part of the operating system or
>programing environment changes the ground rules in thinking about
>these things.  But one thing I'm still shallow on is how you'd use
>them in practice, how you'd design the implementation of a system
>using capabilities.

Good question.  It's hard to know where to start answering it.  Are you 
familiar with the "Design Patterns" literature in object-oriented 
programming (inspired, btw, by a "Patterns" literature in architecture")?  
We probably need a similar treatment exposition of patterns of capability 
programming.  My fantasy name for such a book: "Patterns of Cooperation 
without Vulnerability".  In any case, studying real capability programs, 
like the annotated echat http://www.skyhunter.com/marcs/echatIndex.html .


>      One reason I subscribed was a paragraph from the "E Language
>Design Goals" page (http://www.erights.org/e/e-goals.html):
>
>      ".... MOO experiences
>show this to be a compelling source of richness of the world."
>
>      It's this last sentence in particular that I'm interested in.
>I'm fascinated by potentials of user-programmable multi-user systems
>like MOO, particularly when the limits are really pushed.  

These goals are where E started.  However, I hope you won't be too 
disappointed to learn that this goals page is more historical than current, 
as is maintained out of affection for our origins.  E was developed at 
Communities.com (then called Electric Communities) as the infrastructure on 
which we built a rather amazing graphically-based fully decentralized 
capability-secure social virtual system, "EC Habitats".

E then went through a major redesign (the transition from "Original-E" to 
today's "E") in order to also support in-world casual but secure scripting.  
For both of these motivating goals, we took to heart the adage "For all 
purposes X, a good language for X must first of all be a good language."  In 
out case, "... a good secure language for ... a good secure language."  As a 
result, the language survived its original motivations.

Many of us associated with E, myself included, would dearly love to see it 
once again applied to such purposes.  But no one's currently working in that 
direction.


>... blurring of the line between the client and the server.

I don't know if the blurring you have in mind is the following, but E is 
technologically a pure symmetric peer-to-peer architecture.  Often 
distributed systems will wish to use this technology in an asymmetric 
pattern.  We called the pattern used by EC Habitats "hub & spoke", as in 
airports, not wheels.  Airports are also technologically symmetrical -- any 
plane can fly between any pair of airports.  But some airports are used more 
centrally by other airports.  In EC Habitats, every participating machine 
was a reality server.  The spokes -- normal clients -- generally hosted only 
their home turf, and they could invite people over to visit.  The hub 
machines hosted large gathering places.


>(like going to an event-based architecture 

Once again, I don't know if we mean the same thing.  But E does have a 
purely event-based architecture.


>      I've been thinking about alternatives.  There's a lot of nifty
>projects out there that overlap the problem space to some degree in
>one respect or another.  Momoko and SLIRC are two interesting ones,
>not to mention really cutting edge stuff like Freenet or the Freedom
>Net.  

I'm familiar with the last two, but not the first two.

>But the big thing that most of them seem to leave unaddressed is
>the multi-user programmable community aspect.  Designing and
>implementing a system that tries to allow many people to not only
>coexist on and use the server, but also to dynamically upload new code
>and run it, seems to be a hard task, even in java-based systems where
>there are some built-in mechanisms for security management.

I think you've put your finger on it.  OS types think about secure execution 
of untrusted code, but not much about cryptographic protocols.  Crypto types 
think about the latter, but not much about the former.  Those systems, like 
Java, that have mechanisms in support of both treat them as two unrelated 
problems.  In order to do flexible secure distributed computation -- 
sufficient to solve the decentralized extensible MOO problem and many 
others, you have to solve both problems together in an integrated fashion.  
Joule & E are the only systems I know designed to do this.


>      Has anybody coded, designed or done any brainstorming on how
>you'd do something like this?  I'd really be interested in reading it.

Chip, I think this one's for you.


         Cheers,
         --MarkM