FAQ

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.

Why is it called E?
Douglas Crockford writes: 'I chose 'E' because of the progression 'B', 'C'. I observed that there was no language 'D' (Ed: There is now a language called D ). I figured it was a bad luck letter, so we moved on to 'E'. That 'E' was also the initial of Electric Communities was noticed at the time. It also tied in to our development of the Unum distributed object model.'

How can I learn about E?
A good starting point is the Walnut. For further information check out Getting Started

Is E free?
The code distributed with E is licensed under Mozilla-compatible licenses. According to opensource.org, Mozilla is an open-source license. According to gnu.org, Mozilla is a free software license.

Can't E's goals be met by an API (instead of a language)?
An API on an IPC system can provide inter-process security. But it can't provide intra-process security, because adding an API cannot take away security holes.

ELib, the Java API that underlies E, provides the means for objects to speak to one another in a capability-secure fashion. Objects defined in the E language may only affect the world outside of themselves according to the semantics provided by ELib.

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.

How can I declare a Java class as safe for importing?
Create a file with the extension .safej and save it to the same class path location as the java class you want to declare as safe. In the .safej file you can declare methods of that class as allowed or rejected. Take a look at the Safej example. You can find more .safej files in the E distribution in the folder src/safej.

Is there an IDE?
Developer MarkM uses IntelliJ for development.

What is the best way to use XML?
The org.capml.dom classes should work, but the E documentation says they have been replaced by term trees. However, this doesn't appear to be implemented yet and a question about using XML on the e-lang list went unanswered.