[E-Lang] E FAQ

Mark S. Miller markm@caplet.com
Tue, 09 Oct 2001 11:11:48 -0700


At 09:53 AM 10/8/2001 Monday, Steven J. Owens wrote:
>> [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?".
>
>     This is something I'd really like to see.  Specifically, I'd like
>to see a brief overview of each pattern of cooperation, discussed in
>concrete terms, followed by a discussion of how to implement such a
>pattern in Java - and where and why it can't be done.  Maybe discuss
>it at a higher level - talk about patterns of cooperation between
>enterprise or network level java applications, instead of between
>components of a single desktop application.

I agree.  This is precisely the kind of thing we need.  Oh, so many things 
to do!

There is a start on such a taxonomy in Walnut at 
http://www.skyhunter.com/marcs/ewalnut.html#SEC45 .  In addition, I propose 
that the MintMaker from the Ode 
http://www.erights.org/elib/capability/ode/ode-capabilities.html#simple-money
be used as a first test of secure language designs in much the way 
recursive factorial is used to test symbolic language designs.  There was a 
good discussion on e-lang a while back (need link) attempting to reproduce 
the functionality of the MintMaker in a hypothetical ACL system.  I strongly 
suspect the negative result would apply directly to Java, but I don't 
remember if Java specifically was examined.


At 08:42 AM 10/9/2001 Tuesday, Karp, Alan wrote:
>We all know that there are problems with Java security, but some folks will
>say that the flaws are fixable.  We don't want to get into a "he said, she
>said".  
>
>The flaws in Java security don't go to the essential point about E.  As I
>see it, Java security was designed to enable safe use of downloaded code.  E
>is designed to allow complex patterns of cooperation.  I think that is the
>point to be made in the FAQ.  That way, no one is attacking Java.  All
>that's being said is that Java and E were designed to address different
>problems.  Implicit is the fact that E is solving the important problem.

I really have no strong opinion about whether or not we should be seen as 
attacking Java.  (Actually, I have both strong opinions, so at the moment I 
have no net strong opinion.)

Other than that, I agree wholeheartedly with Alan.  I have had the following 
form of argument with people more times than I care to remember:

Me: "Java (or something else) isn't secure."

Them: "Then demonstrate a breach of its security, the way others did with 
(earlier) Netscape browsers."

Me: "I'm not claiming I can break its security."

Them: "Then isn't it secure?"

The following is not text I'm suggesting go into the FAQ, though some of it 
may be useful.  Rather, it's just some thoughts stimulated by the topic.


We absolutely must escape from "We're secure and they're not."  The sense in 
which Java may or may not be secure is the sense examined by the Princeton 
group, Vijay, and others that tried to break the verifier.  Or again, the 
Princeton group, in trying to break out of restrictions imposed by the 
Applet ClassLoader & SecurityManager.  These kinds of investigations -- 
seeing whether safety is preserved -- are important, and Java, by going 
through intense public scrutiny and fixing many of these kinds of flaws, is 
probably now more solid in this regard than is E.

Instead, our criticism of Java, and our comparative rationale for E, is at a 
whole other level.  The problem Java set out to solve is perimeter security 
in the context of mobile code.  This problem is also solved by buying a new 
machine for each applet, and running that machine in a closed room with no 
I/O devices.  Admittedly, that would be expensive.  The problem would also 
be solved by an operating system in which you could configure a process to 
run such that no system calls (or other traps) caused any action outside the 
process, and no other process could effect that process.

The essential ingredient for perimeter security is impenetrable boundaries 
-- Object encapsulation, as enforced by Java's verifier, machine boundaries, 
or MMU-imposed address space boundaries.  Perimeter security is then 
necessary for building a security architecture.  All three of these are 
respectable implementations of perimeter security on top of which an 
architecture can be built.  The job of an architecture is to allow these 
separated components to be able to interact usefully with the outside world 
and each other, but without threatening each other's integrity or interests. 
This is support for cooperation without vulnerability.  What kinds of 
interaction can be supported while preserving safety?  Different 
architectures impose vastly different costs as the price of preserving 
safety.

Applets do in fact interact with the world outside of themselves, but in a 
peculiar, ad hoc, and broken fashion that is symptomatic of a bad architecture 
or no architecture.  For an example (due to MarcS), a spreadsheet applet may 
communicate the financials you enter back to it's originating server, but it 
can't save it to a file on to your own disk.  In Java, the price of safety is 
too high, and as a result, applets are universally thought to be lame, and 
(despite a level of hype the gods would envy) are mostly unused.

It is important to note that, by the goals Javasoft initially set out to 
achieve http://www.eros-os.org/pipermail/e-lang/2001-January/004030.html , 
this state of affairs should be considered a success.

(Whether or not we should antagonize Javasoft in the FAQ, I feel free to do 
so on e-lang.)


        Cheers,
        --MarkM