[E-Lang] E FAQ

Mark S. Miller markm@caplet.com
Thu, 27 Sep 2001 11:18:17 -0700


At 06:20 AM Wednesday 9/26/01, Jonathan A Rees wrote:

>As my little contribution to the effort, I've started an E FAQ. [...]
>
>  http://rosebud.mumble.net:8888/jar/e/faq.html

Very cool!  after another round of fleshing out, I'll link to it from the 
erights home page.

Btw, just curious, what happened to the original 
http://mumble.net/jar/e/faq.html ?

Some further answers and [notes towards answers]

>1.1. What is E?
>E is a programming language designed to make it easy to write
>                 distributed programs that are correct and secure.
>                 For more information, see E in a Walnut and the erights.org web site.

A fine short answer.

>1.2. Why is it called 'E'?

[What's good faq answer-length style?  If this is too long, please excerpt, 
or place elsewhere and link to it.  Thanks.]

Many people guess that it's an extension of the sequence 'B', 'C', etc.  
Other's have guessed that it's from the first letter of Electric 
Communities, or that it's for today's ubiquitous "e" as in "eMail".  But no.

(The following events happened at Electric Communities (EC) before I arrived. 
Perhaps someone on the list, or either of the Dougs (cc'ed on this message) 
can provide a more accurate account.)

At EC, Doug Crockford was playing around with letters and logos while Doug 
Barnes was creating the first prototype of the language that would become E. 
The language got to the point that it was clearly more than interesting, 
but it still needed a name.  Doug Crockford had just put together a cool 
graphic for the letter 'E' in Intellidraw (seen 
http://www.erights.org/images/small-logo.gif and 
http://www.erights.org/images/large-logo.jpg ), so he suggested something 
like "If you call it 'E', we can use this cool logo."

So the language was called E, the logo was used and was found good, and 
begat many a T-shirt.

This language, the one originally called 'E', was an extension of Java -- it 
approximately included Java as a sublanguage, in much the way C++ sort-of 
includes C as a sublanguage.  But this attempt at almost compatibility was 
thought to be worth it only if we could get Javasoft's cooperation.  EC was 
offering Javasoft, for free, an approach that could actually deliver on 
Javasoft's implied security promises, while preserving a large measure of 
compatibility.  We met the same NIH stonewall that I'd previously 
encountered while consulting (through a previous employer) to Sun Labs.

Without this cooperation, the pain of almost compatibility was no longer 
worth it.  The ideas of E split into EZ (a new distributed capability 
scripting language) and EZLib (the runtime library for implementing EZ, also 
usable directly from Java as a library).

Just as EZ/EZLib was getting interesting in its own right, EC, for business 
reasons one can argue about endlessly, turned away from EC Habitats (the 
social virtual reality system), E, EZ, and EZLib.  The great tragedy of 
ideas lost to intellectual property was about to be repeated, but then a 
miracle happened.

The EC board decided, without a fight, to open-source EZ and EZLib.  Since E 
was not to be open sourced as well, the name "EZ" was already taken, "E" had 
already gathered some name recognition, and "EZ" really was continuing the 
mission begun by "E"; it was decided to rename "E" to "Original-E", and to 
rename "EZ/EZLib" to "E/ELib".


>2.1. What is capability security?
>[To be answered - talk about naming, authorization, POLA.
>            Walnut deals with this.]

Jonathan, given your thesis, I suggest you take a stab at it.  I continue to 
think you explanation does better at motivating the definitional attributes 
of capability security than anything the rest of us has written.

In any case, my best attempt at a short definition is in the ode.  
Rearranging a bit, show the Granovetter diagram, give this link  
http://www.erights.org/elib/capability/ode/ode-capabilities.html , and say:

* Only Connectivity Begets Connectivity: How can Bob gain access to Carol?
  1) Connectivity by Introduction. Only when Alice
     a) already has a reference to Carol,
     b) already has a reference to Bob, and
     c) voluntarily decides to share with Bob her reference to Carol.
  2) Connectivity by Parenthood.
  3) Connectivity by Endowment.
  4) Connectivity by Initial Conditions.

* Absolute Encapsulation. 
* All Authority Accessed Only by References.

However, my best attempt at saying why is the Ode itself, which is way too 
long for a FAQ ;)


>2.3. I thought Java was secure.  Isn't it?
>Sun claims that 'right from the beginning, the Java platform was designed to 
>run programs securely on networks'. Java takes many steps in the direction 
>of language-based security, such as pointer safety and garbage collection. 
>However, as explained in E in a Walnut's 'Capability security' section, Java 
>security is based on identities of principals, not on keys, and is so 
>complicated that no one uses it nontrivially. It may work for confining 
>applets, but not for more sophisticated patterns of cooperation. For an 
>example of Java's pervasive inattention to security, see the discussion in 
>the same section of how Java's ReadStream class fails to be secure.

[This may also be a good opportunity to change the terms of the debate from 
"is it secure?" to "what patterns of cooperation without vulnerability does 
it support?".  That's why the MintMaker is potentially so important, 
together with the insightful failure earlier on e-lang to write a MintMaker 
using ACLs.  I propose that "write a MintMaker" may be for secure languages 
what "write recursive factorial" was for earlier symbolic or computational 
languages.  But maybe such an approach is overkill for a FAQ.]



>2.4. If capability security is such a good idea, why 
>             isn't it in wide use?
>[To be answered; acknowledge critics before shooting them down]

[Great question!  Norm may have the best historical perspective on this.  
Norm?]


>2.8. If capabilities can be sent over the network, doesn't that 
>          mean they're ultimately just strings (i.e. the characters that
>          get sent over the wire)?
>[To be answered.  Talk about sturdyrefs?]
>2.9. E seems to be vulnerable to denial of service attacks, 
>           such as long-running loops. What gives?
>[To be answered: there's nothing that can be done?]
>2.10. Is confinement really good for anything useful?
>[To be answered. Cf. especially the distinctions made by 
>http://www.erights.org/elib/capability/dist-confine.html]

[Actually, I'd meant to refer to those distinctions regarding 2.8 (as in the 
distinction between having and knowing).  Sorry for the confusion.]

[As for confinement, I like an analogy from Norm for thinking about it.  
Note to future readers, this is written in the days before pervasive wireless]

When I buy an HP calculator, I feel free to use it to enter in my company's 
financial data, even I'm working for an HP competitor.  I know, because of 
physical constraints, that the calculator is not communicating my secrets 
back to HP.  If instead I use a spreadsheet program on a 
Windows/Mac/Unix/Linux PC, I have no such assurance.  (For those who believe 
program vendors -- or at least reputable ones -- would never stoop so low, 
see the tale of software from RealNetworks, Netscape, or NetZip at 
http://grc.com/downloaders.htm ).

If, instead, you were installing a malicious spreadsheet caplet, even one 
written by RealNetworks, but you granted it no authority that enabled it to 
escape confinement, then you could be confident that you could give it your 
financial secrets.  It may give you bad answers, but it can only leak your 
secrets to the extent it can wall-bang.

[The above is a bad example because the possibility of wall-banging makes it 
too weak.  Info can be leaked, but authority can really be confined.  What's 
a nice motivating case for confining authority?]


        Cheers,
        --MarkM