[cap-talk] In Defense of Identities - not

Marc Stiegler marcs at skyhunter.com
Thu Dec 7 11:51:47 CST 2006


Nice questions. Having built 5 different membranes for a class I taught 
on object-caps using E, I can answer these questions at least when using 
language, not os, for enforcement:

-- "A revokes cap 'c'. Does C still have it?" The answer with all 5 of 
the membranes I wrote is, C still has 'c' (this assumes that Bob has a 
true 'c' to begin with, if B only had a copy of 'c' from A controlled by 
the same membrane, both C and B have all copies revoked).

--"Should the wrapping be implicit in the transport?" Answer in all 5 of 
my membranes: yes, the wrapping is implicit in the transport. Otherwise 
it is error prone, and so difficult to use no one would use it.

--"What are the implications for EQ and EQUAL?" This question is made 
complicated by the fact that EQ and EQUAL vary in meaning from language 
to language :-) However, in the 5 E membranes, the answer varies from 
membrane to membrane. The simplest does not preserve EQ or EQUAL for 
anything. Three of them preserve EQUAL for pure data. The most 
complicated membrane preserves EQ across separately manufactured copies 
of the reference to 'c' created by the same membrane, but does not 
preserve EQ across membranes, or between the membraned 'c' and the 
original 'c'. I don't immediately know of a way of implementing a 
membrane that would directly support the built-in EQ for cross-membrane 
comparison, though it is easy enough to imagine a separate pattern that 
one could support, similar to a notary/inspector pattern, that would 
perform EQ across multiple membranes and 'c' itself, if one were the 
owner of both 'c' and the membranes.

So the real answer is, pick a membrane that meets your needs. Which, 
alas, is no answer at all if one is trying to pick the one true membrane 
to be used by the OS :-) Is there something wrong with the membranes in 
KeyKos? Or did I miss that part of the discussion?

--marcs

Jonathan S. Shapiro wrote:
> On Wed, 2006-12-06 at 15:44 -0500, Jonathan S. Shapiro wrote:
> 
>> 1. Introducing a wrapper is incredibly expensive (thousands of cycles).
> 
> And when you think about it, this is quite a nasty statement. If
> membranes are a frequently manipulated pattern this will almost
> certainly perturb the OS, because it means that for efficiency reasons
> the OS must have explicit cognizance of membrane domain boundaries.
> 
> This in turn means that we are introducing an entirely new capability
> model, because one of the operations (we may want others) takes the
> form:
> 
>   domain->revoke(cap)
> 
> and we don't want to search the domain to hunt them down. This is quite
> a serious mess.
> 
> But there is a bigger problem. I haven't heard anybody articulate a
> sensible algebra for membrane construction. Consider processes in three
> different revocation domains A, B, C.
> 
>   A sends cap 'c' to C.
>   B sends cap 'c' to C.
> 
> A revokes cap 'c'. Does C still have it? Which copies? Must the sender
> be explicitly aware of membrane domain boundaries, or should the
> "wrapping" be implicit in the transport? What are the implications for
> EQ and EQUAL?
> 



More information about the cap-talk mailing list