MarkM answer: RATS, DCCS, and membranes for network capabilities (was: Re: [friam] Re: What is a capability?)
Jed Donnelley <capability-iCFHVraI1K1Wk0Htik3J/[email protected]> Sun, 11 Jan 2015 21:01:30 -0800
| Newsgroups | gmane.comp.capabilities.general |
|---|---|
| Message-ID | <[email protected]> |
On 1/8/2015 11:42 PM, 'Mark S. Miller' via friam wrote: > 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: >>> (Kevin Reid): This is what I think of as the difference <cap vs. object-cap>, 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. >> (Jed): 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? > > ... > > (MarkM): KeyKOS is where I got the idea of membranes (from their KeySAFE design, > although your DCCS preceded it by 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 <in KeyKOS>... > > 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. Nice formulation. > (MarkM): 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? Excellent questions. The short answers are: 1. Yes, I believe (not enough implementation was done to be sure, but that was the design), and 2. The idealized "Capability Computing System" ('CCS') was designed specifically to avoid any issues with memory mapping and to simplify the membrane implementation for the DCCS. I believe a somewhat longer answer may be worthwhile in this case for some people (skip past underlines '__________' to skip the history to today's relevant issues): ________________________________________ I find it interesting that you (MarkM) say: > ...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. ... There is a similar relationship between the RATS OS: Charles Landau, "An Introduction to RATS (RISOS/ARPA Terminal System): An Operating System for the DEC PDP-11/45), March 1, 1974, LLNL UCRL-51582: http://www.webstart.com/jed/papers/RATS/RATS.pdf and the membrane mechanism in the DCCS (perhaps Charlie can make any needed corrections to the history). The above noted RATS is a direct descendant of the Dennis and VanHorn designed PDP-1 OS at MIT. Charlie Landau worked on the PDP-1 system at MIT. Charlie was hired into the Research Into the Security of Operating Systems (RISOS) ARPA funded research project at LLNL (then LLL) I guess some time late 1971 or early 1972 (Charlie?). Part of the work of that project was to develop a computer system that would use communication means like the nascent ARPAnet and telephone access to connect to other systems and to break into them (tiger team white hat). Charlie was hired at least partly (mostly?) to develop the software to run on that ARPA network host computer system which was, as noted above, a DEC PDP-11/45. That the system Charlie implemented resembled the DVH system was not surprising or unanticipated. I consider his work to implement RATS on that PDP-11/45, driving the ARPAnet IMP, and implementing the ARPAnet protocols (along with considerable other programming work), in as short a time as he did the work (~2+ years?), a programming tour de force. In 1972 I was a recent graduate from UC Davis where I'd been steeped in the Burroughs architectures in the hacker tradition. I joined RISOS early in 1973 mostly to participate in cracking exercises (in my case mostly for the PDP-10 "Tenex" systems that were then dominant on the ARPA network, mostly due to Bolt Beranek and Newman's heavy involvement in both the TENEX and the ARPA network implementations) and to develop techniques to systematize such work, though I also did a little bit of programming work for RATS. Early in the RISOS work one of the roles I took on was as the "Technical Liaison" for the LLNL ARPA network site. As part of this work I participated in design and implementation discussions for early ARPA network protocols like those for "terminal" sharing (telnet), file sharing (FTP), email, etc. The combination of my having the object oriented OS background from RATS and the Burroughs equipment and being involved in the early ARPA network protocol development put me into a position where the concepts of the DCCS were a pretty natural development. ___________________ The basic idea of the DCCS was: instead of developing independent network protocols with distinct semantics for different sorts of resources like terminals, files, RJETs, email (all ARPAnet resources circa 1974), etc., why not develop a network protocol to share generic "objects" and let the semantics of the different resources be hidden within the objects, thus keeping those semantics out of the network protocols? One network sharing protocol would then suffice for sharing objects of any type and wouldn't require new protocols to be designed and implemented as new types of objects were shared across the network. Since RATS was an object-capability system derived from the DVH system and had an "entry" mechanism (master and slave "entries" as you can see in the above RATS paper if you want to understand the details) as it's extension mechanism, it was natural for me to ask whether I could use the RATS entry mechanism to represent objects from other OSs on a network like the ARPAnet. As I considered such a mechanism, especially when considering two such RATS systems on a network, I was naturally led to the membrane mechanism for representing ("emulating"?) those remote objects. I well remember the "blinding flash" inspiration one night when it became clear to me that such a mechanism was possible. That was a very exciting night with no sleep possible. Unfortunately (related to your note about KeyKOS MarkM), the next day when I started to work out the details for implementing the DCCS on the RATS OS I discovered that there was one important base object supported by the RATS kernel, namely the "File" object that provided for data storage/memory mapping, that couldn't be emulated by the RATS entry mechanism. The way the RATS File object worked was that one could 'invoke' a File object and ask that it be mapped into memory - implicitly into "your" memory - i.e. into the memory space of the invoking process. In some sense the change in the memory space of the invoking process was a side effect of the invocation of the File object that couldn't be emulated by an "Entry" object. At this point Charlie and I discussed this issue/problem. I would say that in terms of your #a, #b, and #c characterization above that the RATS OS was somewhere between #a and #b, but unfortunately not all the way to #c. In our discussions Charlie and I discovered (came to believe - again perhaps Charlie can chime in) that a rather simple change to the implementation of the File object in RATS - specifically to change the "Map" call to be an invocation on a Process object passing in a File object for the mapping - would suffice to transform RATS to #c and allow the DCCS to be implemented over the RATS OS. Without being able to support the base File object on RATS something like the DCCS would have limited value. Sadly by the time we realized this (late 1975) several things were going on that made it impossible for us to make such a change to RATS and to implement the DCCS over RATS. The RISOS research was winding down, so we were both starting to look toward other work and had less time to work on RATS. We realized that a change to the basic "Attach" (map) system call on RATS would alter its API enough that almost none of the software written for RATS would still work. Of course other approaches such as supporting both the existing "Attach" and a new "Attach" that was an invocation on a Process capability would be possible. By that time, however, it was becoming clear that we wouldn't have time to implement such a change, let alone to implement the DCCS on top of it (though I worked for some years trying to get funding close enough to this area to do that work). I felt that the idea of using an object sharing network protocol that could be implemented on such a 'membrane' (not a name I used) emulation mechanism for capability objects from an underlying OS that was #c (as MarkM notes above) was important enough that I should publish a description of this mechanism/approach. Consequently I invented an idealized "CCS" (Capability Computing System) based on RATS but simplified (e.g. I conflated the file and process objects into a single type and didn't use mapped memory) so as to be #c and easier to describe in a paper. I then described the remote network emulation implementation using the "membrane" facility that could be used to extend the objects of such a CCS across a network via the described "DCCS" protocol. I distributed RFC #712 in February of 1976: https://tools.ietf.org/html/rfc712 based on a draft of the DCCS paper that I was in the process of having reviewed for eventual reviewed publication in the Proceedings of the Third International Conference on Computer Communication, Toronto, Canada, August 1976: http://www.webstart.com/jed/papers/DCCS/ The most important aspect of this paper is the mechanism not just to use the "insertion" property of the entry capabilities to make remote objects available, but to allow capability tokens to be communicated across the network as normal call parameters in a transparent way (the essential aspect of the membrane pattern IMO). I don't remember when Charlie left LLNL for Tymshare, but it was at about that same time. Not long after this Charlie started working with Norm Hardy and Bill Frantz on GNOSIS that I guess became KeyKOS. Also not much later I started working on a capabilities as data OS (for reasons that would get into another topic) that eventually became LINOS (referred to within DOE and LLNL as "NLTSS": https://en.wikipedia.org/wiki/NLTSS ) and ran in production at LLNL until 1995. By the time those systems (KeyKOS and NLTSS and others) were developed the technological "tide" had turned against the sort of principle-of-least-authority object (capability) operating system designs represented by such work. In my view a significant reason these sorts of systems fell out of favor was, somewhat ironically, push back from the national security community. In particular as discussed often on this cap-talk list there was the document from the Institute for Defense Analysis P-1935 published in February of 1987: http://www.webstart.com/jed/papers/P-1935/ "TRADITIONAL CAPABILITY-BASED SYSTEMS: AN ANALYSIS OF THEIR ABILITY TO MEET THE TRUSTED COMPUTER SECURITY EVALUATION CRITERIA" This document was an influential instance among other writing and people in the community that took the position that sharing access by tokens communicated in messages was inadequate to meet security criteria being defined in that time. In particular these criteria required (among other things) the ability to track responsibility for system actions (operations on objects) and to log actions for auditing purposes. While the above noted document is titled "their ability to meet", what it really describes is their (capability-based systems) *inability* to meet the developing "Trusted Computer Security Evaluation Criteria". Specifically the inability of "traditional" capability-based systems to support responsibility tracking and logging for auditing. Work on systems with object sharing by tokens (capabilities) continued for a while. I had somewhat lost track of the work Charlie, Norm, and Bill Frantz were doing on on GNOSIS/KeyKOS while focusing on my own LINOS/NLTSS work. I believe I spoke to them at one time about why I valued the membrane pattern (for something like DCCS), but none of us had time to follow up. I'd be interested to hear if/how they considered this criteria #c in their GNOSIS/KeyKOS work. I didn't hear about the KeySAFE design until many years later and I still don't understand it very well. The next time I saw something that resembled the DCCS/membrane mechanism was in this design paper published by the Mach group: Dan Julin, *Network Server Design, Mach Networking Group*. September 1989. which can now be found through: https://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/publications.html at:**http://cs.cmu.edu/afs/cs.cmu.edu/project/mach/public/doc/unpublished/netmsgserver.doc I don't believe that design was ever implemented either, but it had the same basic architecture as the DCCS, though was apparently derived independently and required some rather twisted (IMO) mechanisms to conform to the Mach "port" mechanism. I got involved in other areas (network research) and no longer tracked this area enough to follow the winding down of the KeyKOS work and I didn't hear about MarkM's work until I discovered the cap-talk list, EROS, etc. in what appears to be the early 2000s. ___________________________ My involvement with the cap-talk list has been quite an interesting experience, but for me it had it's greatest relevance when MarkM, I, and AlanK did the work to flesh out the Horton protocol for tracking responsibility for actions on objects in object-capability (actually I guess I now have to say #c) systems: http://www.erights.org/elib/capability/horton/ The Horton mechanism depends vitally on the same "membrane" pattern used in the DCCS. Specifically on the ability to communicate object tokens "through" the emulation 'membrane'. The Horton protocol demonstrates that the claims of P-1935 that capability systems can't log and track responsibility for actions are not true - at least not for #c capability systems. It was because I believed so strongly in the network capability extension mechanism (essentially the ability to "serialize" capabilities transparently on a network) that I thought it important that capability systems support the membrane pattern. In particular my experience with RATS, where a seemingly minor aspect of it's object invocation interface for one object (having the system call to map memory be an invocation on a File rather than on a Process) made the membrane pattern impossible to implement, caused me to believe that the ability to implement the membrane pattern was an important criteria that should be applied to test potential object-capability system implementations. My thought was that only by actually doing an early membrane implementation could such potentially "minor" flaws in the capability invocation mechanism be avoided that could make it impossible to support important services like network capabilities, Horton-like responsibility tracking, (KeySAFE?), etc. I believe the membrane pattern is still important today for these same reasons. IMO there should be particularly critical reasons for any capability system to be implemented without the ability to support the membrane pattern (i.e. #a or #b) - because without that ability facilities like the DCCS sort of network extension and the Horton responsibility tracking aren't possible. Any such #a or #b implementations should acknowledge up front (and in any case must eventually acknowledge) that they are giving up any facilities that might depend on the membrane pattern. Designer/implementer beware. --Jed http://www.webstart.com/jed/ _______________________________________________ cap-talk mailing list [email protected] http://www.eros-os.org/mailman/listinfo/cap-talk