[E-Lang] Capabilities and XML-RPC

Mark S. Miller markm@caplet.com
Mon, 13 Aug 2001 08:59:00 -0700


At 12:42 PM Sunday 8/12/01, Brandon Wiley wrote:

>Blogger has a new XML-RPC API for posting which is capability-based.
>
>http://plant.blogger.com/api/
>
>This is where my personal interest in capabilities lies, exposing
>capability-based APIs via RPC.

When you say "RPC", I assume you mean remote object invocation?

If you want a capability-secure remote object invocation protocol, well, 
that's sort of the point of all distributed capability systems -- 
implementing the Granovetter operator when Alice, Bob, and Carol may be in 
three different locations  
http://www.erights.org/elib/capability/ode/ode-protocol.html .  The systems 
listed below are only the ones I know to be currently available, in use, or in 
development.  See the citations at the above URL for others.

* E uses such a protocol in the currently shipping 0.8.9.1b release.  An 
improved version of this protocol (with full message pipelining  ), 
described at http://www.erights.org/elib/distrib/index.html , will be in the 
upcoming 0.8.10 release.

* Waterken's system http://www.waterken.com uses a capability protocol 
that follows approximately the same security rationale, a similar but 
different concurrency rationale, and is thoroughly standard based.  The 
capabilities are based on "https:" URLs, the underlying secure data pipes are 
therefore provided by https/SSL, and the encoding format is based on XML-SOAP.

* Mozart http://www.mozart-oz.org apparently plans to go in a similar 
direction as E, though you wouldn't know it from their current web site.

* Toontalk http://www.toontalk.com is a capability-based pervasively 
concurrent language for kids, semantically much closer to E's ancestor Joule 
http://www.agorics.com/joule.html .  (For kids who haven't been corrupted by 
sequential programming, it seems to be easier to teach pervasively 
concurrency than sequentiality, and probably much easier than mixed 
sequentiality/concurrency.)  It's now distributed, with a protocol that 
could easily be made capability secure as well.  However, I don't think the 
protocol is currently publicly documented.

* E-Speak2.2 http://www.e-speak.hp.com/developers/beta22_readme.asp (Alan, 
is this a good URL for 2.2?), is based on distributed "split capabilities" 
http://www.hpl.hp.com/personal/Alan_Karp/publications/keyslocks.pdf .  As 
someone once said of Algol-60, "It's an improvement over most of its 
successors."


Distributed capability protocols that, AFAIK, are not invocation protocols:

* MojoNation http://www.mojonation.net .  (Jim, Zooko, what's a good URL for 
the MojoNation protocol specifically?)

* SPKI http://www.ietf.org/rfc/rfc2693.txt is an almost capability system, and 
is the basis for the production version of E-Speak http://www.e-speak.net/ . 
http://www.erights.org/elib/capability/ode/ode-pki.html explains the sense 
in which SPKI is like a capability system.  http://www.capcert.org explains 
the sense in which it isn't, and takes steps towards proposing how to repair 
the problems.


>This particular implementation is quite crude, but I think that some great
>things can be done in this vein. Using RPC between virtual machines allows
>for good security as objects in different process spaces can't modify
>things in each other's space without going through RPC. If capabilities
>are built directly into the RPC mechanism then you can get security almost
>for free. You just need to codify the methods by which you gain
>capabilities.

I'm glad to see further appreciation for this idea.  Before reinventing the 
wheel, I suggest you see if your goals can be met within one of the above 
frameworks.  If you instead build your own capability-based remote 
invocation system, and if you get serious about security, then please let us 
know, and apply for inclusion in the Capability Security WebRing 
http://nav.webring.yahoo.com/hub?ring=capabilitysecuri .


>Additionally, by using something like XML-RPC you get secure access to
>remote objects in 13 different languages with no additional effort.

Would you not need per-language effort to speak the capability secure 
protocol securely, even if it is based on XML-RPC?


        Cheers,
        --MarkM