[E-Lang] Other E News: E & EROS

Mark S. Miller markm@caplet.com
Fri, 19 Jan 2001 18:16:30 -0800


As I'm about to be gone for a week, now's a good time to update y'all on 
some other E relevant developments.  In this message, news regarding E and 
EROS.



                        E to be EROS's Shell Language

At the EROS workshop, Jonathan wrote on the whiteboard a very good list of 
the tasks that need to be done to turn EROS is a practical and useful 
system.  When we discussed what their relative order should be, I was 
pleasantly surprised to see consensus that "shell / command line 
interpreter" was one of the first things to do.  Everyone was very happy 
with the idea of an ENative-like implementation of E being used as EROS's 
shell language, and for E's notions of capability & capability invocation to 
be mapped naturally to EROS's.

                           http://www.CapIDL.org

However, in order to do this, another piece of infrastructure must first be 
built: an interface definition language (IDL) must first be defined which 
can describe (at least) EROS capability invocations in terms of the data 
types that programming languages traffic in, all the existing capability 
protocols must be described in terms of this IDL, and a query must be added 
by which one can ask a key for the IDL (or a predigested equivalent) that 
describes its protocol.  Finally, for each supported language, an IDL 
compiler is needed to generate the marshalling and unmarshalling code that 
interfaces EROS to the concepts of that language.

Towards this end, I've proposed CapIDL, and IDL designed initially to 
support EROS specifically, but intended to be able to grow into something 
that can serve more generally as a basis for interoperability between 
capability systems.  Just as E was designed to look familiar to C and Java 
programmers, CapIDL is designed to look familiar to Corba programmers.  Not 
to enable the porting of Corba *.idl files, but to port Corba programmers.  
The eros-arch list has been intensely discussing CapIDL for a while, and the 
current draft proposal owes much to these discussions.

The current draft proposal is posted at the above URL


                      Jonathan & I fix each other's formalisms


I'd been developing a growing discomfort with the tradition among OS folks, 
starting with Butler Lampson, at formalizing capabilities.  While I think 
Jonathan's formalism may be better in many regards, at its heart it still 
held that nugget I found disturbing.

In a conversation following the workshop in with Jonathan, Scott, Ben, and 
myself, I showed how Jonathan's formalism of capabilities -- a pair 
designating state & a *set* of operations (equivalently, state & interface 
type) -- could not even describe EROS itself.  In EROS, as in most other 
capability systems (including KeyKOS, E, Joule, and W7), two different 
capabilities designating the same state could respond to the same message 
(order code) with two different behaviors.  To describe this requires that 
we replace the "set of operations" with a "mapping from order codes (ie, 
message names) to operations", ie, a vtable.

Of course, objects don't have to dispatch on the order code, so we ended up 
with a two level description.  The fundamental level of description has a 
capability be a pair of a state designator and a behavior designator.  The 
behavior is a procedure of two arguments -- the state and the incoming 
message.  All the information that determines the object's behavior on 
invocation must be reachable from the behavior, state, and message.  At a 
non-fundamental level, if the behavior starts by switching on part of the 
message (the message name / order code), then we have a vtable-like mapping.

This formulation makes clear the unity of EROS's (and KeyKOS's) capabilities 
with lambda calculus based programming languages, especially those in the 
Actors tradition.  Including especially E, as the multi-facet nature of E 
maps very well to the multi-facet nature of EROS.  The fact that OS 
formalists have been getting this wrong till now may also help explain why 
they've been underestimating capabilities.  Specifically, if you don't see 
the mapping, you don't see the polymorphism.  More on this later.
If Jonathan & I can find the time, we've agreed to coauthor a paper on this.

There has also been much discussion on the EROS list of this shift in 
perspective, and how it should or should not effect the way we speak 
informally.  No clear results so far.


But my capabilities formalism was totally broken.  It couldn't work at all.


I gave two talks, on E and on Smart Contracts, both of which were well 
received.  During my E talk, I put up my "one slide definition of capability 
security", which is essentially identical to 
http://www.erights.org/elib/capability/ode/ode-capabilities.html#patt-coop . 
Jonathan pointed out that there's a 4th way in which Bob can come to have a 
capability to Carol: "Connectivity by Initial Conditions".  Indeed, without 
this, none of the rest ever apply.  If "Only Connectivity Begets 
Connectivity", we're in trouble unless we posit a world with some initial 
connectivity.


These are good cautionary tales for why proofs of correctness are hard.  If 
we call our formalisms "specifications", then both of us built systems that 
did not meet our specifications.  In both cases, the systems were right and 
the specifications wrong.  

        Cheers,
        --MarkM