[E-Lang] Authority -- what is its dual?

Mark S. Miller markm@caplet.com
Sat, 20 Oct 2001 12:01:52 -0700


At 09:52 AM 10/19/2001 Friday, Marc Stiegler wrote:
>-- Immutable objects do not carry authority. However, access to immutables
>may be authorities. For example, access to the immutable picture of the spy
>we have in bin Laden's inner circle is a powerful authority, not one to be
>handed out lightly :-)

Given that we here mean "transitively immutable", I think this is correct.  
However, it's hard to make precise.  A transitive immutable, once 
made, is timeless.  It has whatever information it has, and if it's willing 
to give it to you at anytime, then it's willing to give it to you at all 
times.  So a spy picture conveys no authority, and neither does a ConstList 
holding that spy picture, even though it gives "access to the ... spy ...
picture".  So this can't be what we mean.

Rather, something that will give you access to a picture at a later time but 
not at an earlier time, would convey authority.  But this would mean it 
changed behavior, and so is not transitively immutable.  So we can simply 
stick with "transitively immutable" as our definition without needing to 
address "giving access to ...".

Note that an unresolved promise is not (yet) immutable, so an object holding 
such a promise is not (yet) transitively immutable.  A far reference is not 
immutable, since it can break.  Only near and broken references may be 
considered immutable.


>--  The Vector class does not convey authority. There can be, however,
>classes for which access to the class is an authority even though the class
>itself is pure computation, akin to the immutable photo above. My example is
>the Perfect Stock Predictor program, which, when fed the state of the stock
>market for the last month, perfectly predicts the state of the stock market
>a month from now. The people who create the Perfect Stock Predictor program
>would consider it a tragic loss if authority to access it were conveyed to
>outsiders, since the Perfect Stock Predictor can only predict stock in the
>absence of a second Perfect Stock Predictor user :-)

Both of these examples are really about secrets.  By my (possibly peculiar) 
definitions, secret bits are transitively immutable, and so don't convey 
authority.  Again, perhaps "authority" is the wrong word.  Saying they don't 
convey authority *doesn't* mean that we don't need to protect them.  I'm
just trying to make clear what protections are meaningful and possible.

The motivating example: When an emaker is imported, it is evaluated in the 
universal scope.  This scope should only provide objects that convey no 
authority. The emaker may also name any instance of any literal datatype as 
if these were all names in the universal scope, like "3", in order to obtain 
access to a 3.  None of these are 'deniable'.  Explaining the rationale of 
what is or is not deniable is my purpose in using the term "authority".

Are the bits which constitute the spy picture deniable to an emaker?  
Clearly not.  The emaker may already contain a literal integer that encodes 
the spy picture, or it may guess it.  If it doesn't know it and can't guess 
it, but if another emaker is on the CLASSPATH accessible to it through the 
import__uriGetter, then it may import that other emaker and (if the other 
emaker is willing), obtain the picture from it.

This raises a thorny issue: Does the import__uriGetter itself convey 
authority, or is it transitively immutable?  It is currently exactly as 
immutable as the CLASSPATH, which is often a really bad answer.  When one is 
running a packaged E application, the entirety of the CLASSPATH may be 
contained in one immutable *.jar file, in which case it truly is immutable 
and we're not yet in hot water.

OTOH, in a development environment, a developer replaces, renames, deletes, 
and inserts entries on the CLASSPATH willy nilly.  The import__uriGetter 
conveys the authority to sense such activity, and is given out in a 
non-deniable fashion to all emakers.  Although I can't figure out why this 
is a problem in practice, it's obviously a fatal problem in theory, so we 
still need to figure out what to do about this.  Dean's transformer has 
teased these issues apart some, and so is a start, about which more later.

I know you're especially interested in design of a module system for E, so 
help here would be most appreciated.


>-- A very interesting and difficult example to think about--a good
>challenge, if you will--is to think about the uri string that represents a
>capability [...several good paragraphs about this issue...]

Yes, another secret, but an important one to think especially hard about for 
the reasons MarcS explains.  For more on this, see 
http://www.erights.org/elib/capability/dist-confine.html .  The SturdyRef / 
Introducer separation was motivated by this observation of Norm's.



        Cheers,
        --MarkM