Taxonomy of Facets & Composites

Mark S. Miller markm@caplet.com
Thu, 27 Jul 2000 09:37:31 -0700


At 03:25 AM 7/27/00 , Tyler Close wrote:
>Markm wrote:
> > ...  An object only
> > has one object
> > reference.  (Or, all object references to the same object
> > are equivalent.)
>
>An elaboration of 'equivalent' should be included.

Not only are you correct, you are so correct that I see my attempt at 
reference-equivalence was nonsense.  In fact, elsewhere 
http://www.erights.org/elib/concurrency/refmech.html I present E's taxonomy 
of kinds of reference.  I was trying, unsuccessfully, to find a way out of 
the following descriptive dilemma:

I wish to identify a capability with an object reference rather than an 
object, because capability-programmers normally speak of capabilities the 
way object-programmers speak of object references: "Object A's state holds a 
capability/reference to ...".  We don't speak of an object's state as simply 
holding another object.  However, KeyKOS and EROS place the facet identifier 
(the data-byte), a crucial part of the object's behavior as I've explained, 
into what they call the capability.  Likewise, SPKI, and therefore 
E-speak3.0, place the authority thinning information (or rather, the authority
thickening information or its lack) into their equivalent of the 
"capability" (their authorizing certificate).

In the systems above in which facet-distinguishing information is in what 
they call the capability, all capabilities to the same object are in fact 
equivalent, which fooled me into thinking I could get away with this 
terminological shortcut.  However, after your message, I realize this is 
fortuitous coincidence, and that our taxonomy must account for systems in 
which behavior and/or state designation is in the reference, and in which 
references pairing the same state and behavior may still differ in other ways.


>All references to an object are 'equivalent' in that they refer to
>exactly the same thing and that that thing will respond in the same
>way to exactly the same set of messages for all references.

So, continuing to define an object as a pairing of state and behavior, a 
reference designates one object.  Two references to the same object are 
designation-equivalent and authority-equivalent, but in a given system (like 
E) references may be non-equivalent in all the ways you state and in the 
ways shown in E's reference-kind taxonomy linked to above.


>Maybe a better way to say this: "In a system with object-level
>capability security, the word 'capability' is a synonym for
>'reference'. The new word is introduced to emphasize that a capability
>obeys more constraints than a reference in a non-capability system."

So, to have a cross-system taxonomy, I'm left with terminology awkward for 
KeyKOS and EROS users.  Like an object, a capability is a combination of 
behavior (a function from a message and old state to new state and outgoing 
messages) and state, or, equivalently, as in the Confused Deputy 
formulation, a combination of designation (designating unique state) and 
authority (the right to feed messages into the behavior function).  In 
systems with object-level capability security, it works better to say 
capability == object.  Different references to the same capability/object 
may then differ in other ways, but not in their designation or authority.  

An object's state then holds *references to* other capabilities/objects.  In 
systems like KeyKOS & EROS where all references to the same capability are 
equivalent, one may without loss of detail, speak of state holding a 
capability rather than a reference to a capability.  But when speak across 
systems we should remember that this way of speaking is a shortcut.


>An object may have many references that may or may not respond to an
>EQ message (ie: two references to the same object are equivalent, but
>the holder may have no way of knowing that they are equivalent). 

Careful now.  An EQ operation adequate for grant matching cannot be a 
message sent on one of these references with the other as argument.  It must 
either be a primitive, or be a message to a third object (like the 
KeyKOS/EROS DISCRIM) that has magic ability to inspect these references 
without invoking them.



         Cheers,
         --MarkM