Split Capabilities: Making Capabilities Scale

Mark S. Miller markm@caplet.com
Sun, 09 Jul 2000 11:40:05 -0700


At 11:11 AM 7/6/00 , Karp, Alan wrote:
> > First, let's be clear that "I" is a program, not a user. It 
> > is very easy for
> > programs to track what capability goes to what. When was the 
> > last time a
> > production version of a program you ran got its file 
> > descriptors confused?
>
>It's still a piece of code I have to write, debug, and maintain.  Also, how
>does my program determine which object a capability is referring to?  If I
>get my capabilities from an authentication server instead of the object's
>owner, there's no obvious way to make the connection.

In a conventional capability system, the capability *is* the designation of 
the object it refers to.  Think of an object reference in Smalltalk or Java. 
How do we know what object it refers to?  Well, there's no more meaningful 
answer than "the object that this very object reference refers to."  Sorry, 
I know that isn't very satisfying, but I don't see that there's any other 
answer available or needed in Smalltalk or Java.  Turn object reference into 
capability, and we have the same situation in E.

Or, one can answer by computational history: "This is the object reference I 
received as the third argument of the 'foo' message I'm currently 
processing."  Or "This is the object reference my creator endowed me with as 
my 'zippy' instance variable."  This notion of "which object" corresponds to 
the lambda calculus use of naming, or the capability operating system use of 
clist indexes.  It names not a particular object, but that object that has a 
particular relationship to the current object.  Again, it seems to me that 
E-speak's naming system has a very similar perspective, so I'm puzzled about 
why you're puzzled.


         Cheers,
         --MarkM