Re: [friam] Re: What is a capability?
"Mark S. Miller" <[email protected]> Thu, 8 Jan 2015 23:42:35 -0800
| Newsgroups | gmane.comp.capabilities.general |
|---|---|
| Message-ID | <CABHxS9jK7UkFVLP8p3Xtcz062UY-H9=WfNYdVar7o+3uko=sOQ@mail.gmail.com> |
On Thu, Jan 8, 2015 at 11:08 PM, Jed Donnelley <capability-iCFHVraI1K1Wk0Htik3J/[email protected]> wrote: > On 1/8/2015 4:53 PM, Kevin Reid wrote: > > This is what I think of as the difference, and I hope MarkM would agree: > > > > > > A capability system is one which has the laws of locality, > designation-and-authority-are-not-separated, etc. > > > > An object-capability system is a capability system in which the primary > operation on a capability is "send a message", the message has a > "selector"/"method name"/"verb" field, and all capabilities are on an equal > footing in this way. And, more subjectively, the capabilities correspond to > objects in an object-oriented programming language. > > Hmmm. Perhaps I've been focusing on the wrong thing or over simplifying. > > For me the relevant distinction is the membrane pattern. If a > capability system supports the membrane pattern (and thus can implement > services like network capabilities, the Horton responsibility tracking > mechanism, and other services that depend in this functionally invisible > "insertion" property) then its "object-capability". If not, not. > > This is why I've encouraged those implementing capability systems to > test them with a membrane implementation. > > I'm not sure how this ability to support the membrane pattern maps into > the above description. > > Can somebody describe the relevant difference and perhaps why the choice > (definition?) has been made as it is? > This is indeed an interesting criteria, but I think it is a different criteria than ocaps themselves. In Joule, E, and SES, transparent membranes are possible, not just because of the ocap properties, but because all first class values are either * data -- immutable and transparent (though not necessarily identity-free) * objects -- whose only observable properties are their identity and their response to messages. By contrast: In W7 (an ocap subset of scheme) transparent membranes are not possible, because cons cells are mutable and one cannot transparently intermediate (or virtualize) a cons cell. For APIs consisting only of data and functions, membranes are possible. (Racket, a successor to Scheme, makes transparent membranes possible. But there is not yet an ocap subset of Racket, so it is outside this taxonomy.) In Joe-E (an ocap subset of Java), transparent membranes are not possible, because one cannot transparently intermediate final classes or classes with final members. For APIs consisting only of data and interface types, membranes are possible. In Emily (an ocap subset of OCaml), transparent membranes are not possible, because all types are static without the ability to operate on them generically. OTOH, I posed this as a challenge at < http://lambda-the-ultimate.org/node/1625#comment-19906>. The thread starting there ultimately claims to have arrived at a solution, but it was one I could not comprehend. KeyKOS is where I got the idea of membranes (from their KeySAFE design, although your DCCS preceded it my many years). Thus, it would be strange to claim that membranes are not possible in the KeyKOS family. But Kevin's point about pages leaves me wondering if transparent membranes are possible. I know you can use a Keeper to trap on attempt to access an unmapped page, and that the keeper can act in such a way as to emulate a page having been there all along. I.e., Keepers allow you to play fault-handling tricks like virtual memory with user code. But not by intercepting the memory access as a message invoked on a start key. In what way can a Keeper provide virtualized access to another memory page without providing direct access to that page? So, I think there are three levels of increasing specificity: a) ocap b) ocap where limited non-transparent membranes are possible c) ocap where transparent membranes are possible. Joule, E, and SES are in #c. IIUC, so are Actors. Jed, is it correct to say that DCCS is in #c as well? How did you handle mapping and virtualization of addressable memory resources? -- Cheers, --MarkM _______________________________________________ cap-talk mailing list [email protected] http://www.eros-os.org/mailman/listinfo/cap-talk