ERights Home download 
Back to: E stl-0.8.9t Download and Install E 1st child: E stl-0.8.9t.1a: Installing on Windows On to: E 0.8.10alpha1 Download and Install E

Download and Install
E stl-0.8.9t.1a
Featuring Dean's Transformer

Jump to

Download by Platforms & Versions
Highlights this Version

Variants and Subsets of E

Are you sure you want the stl-0.8.9t.1a version?

Download by Platforms & Versions

Earlier versions of E have been tested and run on MSWindows (95, 98 FE, NT, 2K), and Linux. It should run on other UNIX platforms as well, given an adequate version of Java and bash (see below). It should also run without problems on MSWindows 98 SE and on ME, but as far as we are aware, no one has tried this. If you experience any problems, or have any other informative experiences, please let me know.

The Installing links below describe how to install, and run various forms of the binary distribution. The Building links describe how to build E from the source release. The Download links will download each corresponding form of the release to your machine.

MSWindows 9x/ME/NT/2k
(zip files)
Unix & Unix-like Platforms
(tar.gz files)
Mac OS X
(coming soon)
(coming soon)


Highlights of this Version

E stl-0.8.9t.1a is a branch off of 0.8.9t, contributed by Dean Tribble, who says:

This is an initial development release for a faster E interpreter. This release is intended for joint implementation, so the minimal documentation in the release is not yet intended for users This interpreter is intended to both provide faster interactive E execution, and provide initial steps towards full compilation. When complete and integrated with the main line of E development, it is expected to replace the current E interpreter.

The primary change in this interpreter is to use an addressing-oriented execution model. Specifics include:

  • Outers, fields, and locals are stored and accessed from Arrays rather than through Hash tables (i.e., noun get and store are via a single array indirection)

  • Final nouns (which is expected to be most nouns) point directly at their value, not indirectly through Slots

  • The execution state at any given point is always represented as three arrays: outers, fields, and locals

  • Locals are used in a stack-like fashion

  • Each expr node points at its scope map, so the values in scope can be reconstructed in a future debugger

  • All non-finals use slot objects so that they can be copied into nested objects but still behave as shared mutable variables (i.e., as in the cells used in Scheme compilation)

  • Numerous minor optimizations

  • All ENodes point at immutable ScopeMaps that describe which variables are visible and where to find them in the EvalContext (for future debugging support)

  • Clarified semantics of mutable, interactive scopes, import, and other scoping-related issues.

This is still a work in progress. The parser in this version does not yet actually generate FinalPattern nodes, so the change in representation of Finals is not yet used (and indeed, depends on bug fixes not yet integrated from the main development line). Additional complimentary optimizations will be included in future releases that eliminate method dispatch overhead, comparison overhead, etc.

Variants and Subsets of E

A complete E system is persistent, distributed, and capability-secure both within and between processes. Incomplete variants of E are tagged by which of these features are left out.

Feature Prefix if
feature is absent
What it stands for







capability security

capability security


Distributed Application Framework
Forsaking Encryption

A non-persistent E is called time-local since an object only exist as long as its hosting process does. A non-distributed E is called space-local if an object and all references to it only exist within its hosting process.

This release is space-time-local, meaning it is non-distributed and non-persistent, and so is prefixed with "stl-". Being non-distributed, this release is much less useful than the 0.8.9 release. This version is being released mainly to support work on compiling E, since its interpreter conforms more closely to the definition of Kernel-E. If this is not a concern, you should probably stick with the 0.8.9 release.

E by definition provides distributed capability-security -- the ability for objects in mutually suspicious processes to safely cooperate. If it looks like E and it quacks like E, it might be a duck; but if it doesn't provide distributed capability security, it's not E. A system that's otherwise equivalent to E, but doesn't provide distributed capability security, is called daffE. A distributed E can only be implemented by means of strong crypto, of course, for which we are bundling a subset of the Cryptix library. In a space-local system, no distributed insecurity can arise, so such a system would be an sl-E rather than an sl-daffE. This release is non-distributed and so is an E rather than a daffE.

E is designed to provide local capabillity-security -- the ability for mutually suspicious objects hosted by the same process to safely cooperate, and the use of capability discipline to determine which of its hosting process's authorities it may exercise. Such objects could be executing untrusted code -- code that the hosting process (or its owner) doesn't need to fully trust. This version of E supports this feature, including confinement, and so is not prefixed with "otc-".


Versions & Types of Java

In refering to various versions of Java, we follow Sun's terminology and numbering. A Java Runtime, or jre, is adequate to run standard Java binary programs (class files & resources). A Java Development Kit, or jdk, is adequate both to build a program from sources and to run it. A jdk is a superset of the corresponding jre, and their version numbers are always in synch. Each successive version of the jdk/jre from Sun effectively defines a new version of the Java & JVM standards, except that Sun has introduced a numbering inconsistency: The Java/JVM 2.x standard corresponds to Sun's jdk/jre 1.2.x. We ignore this inconsistency and refer to both as 1.2.x.

This version of E requires a jre >= 1.3.1. E no longer supports Java < 1.3.1. To build E from sources, a corresponding jdk is required.

Some places to get a jre or jdk:



Build-Only Dependencies

If you are only installing E from a binary distribution, or only rebuilding the Java portion for your own use, you can ignore this section. However, if you wish to build an E distribution from sources, then you will need the equivalent of the following tools as well.

The Cygwin Distribution

The E building process relies on a number of UNIX tools. These are available for Windows from Cygnus Support as the Cygwin package. If you wish to build E on Windows, you should download and install a version >= 1.0.

BYacc/J (Berkeley Yacc for Java)

The E source distribution contains the executable binary program byaccj.exe for Windows, and byaccj for Linux/386/glibc. These are actually BYacc/Java from Bob Jamison and others. BYacc/Java is the Berkeley Yacc program extended with a "-j" flag and others for producing Java output. BYacc/Java is covered by the Berkeley License. If you are on a Unix system other than glibc Linux, you need to download your own version of byaccj and overwrite the one in src/bin/linux-386-glibc that our Makefile is using.

Note: The website at the above link,, seems to have disappeared. If you know where it may have gone to, or know how to contact Bob Jamison, please let me know. In the meantime, starting with the 0.8.9t.1a release, the sources to byaccj are bundled with the E sources, and byaccj is made as part of making E.

Zip Files

Our build process packs up the *.zip files in the distribution by using Info-Zip's highy portable, and highly ported, zip program. Info-Zip's zipping tools are open-sourced with a license that seems to resemble the X11 license, but before redistributing it, you should read it for yourself. The E distributions do not bundle in these tools.

Unless stated otherwise, all text on this page which is either unattributed or by Mark S. Miller is hereby placed in the public domain.
ERights Home  
Prev x Next
Download    FAQ    API    Mail Archive    Donate

report bug (including invalid html)

Golden Key Campaign Blue Ribbon Campaign