[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Why I dislike Java. (was Re: "Scruffies" vs. "Neats")




Timothy C. May writes:
> SCRUFFIES AND NEATS IN SECURITY
> 
> The "security neat" believes in applying rigor to security. Machines and
> languages should be "provably secure." (Better yet, machines should be
> "provably correct," a la Viper, and operating systems and languages should
> produce provably correct code.)

Don't take this the wrong way, Tim, but you have totally
misinterpreted the position many of us who dislike Java take. You
completely mischaracterize our attitude.

There are two philosophies in opposition here, the optimistic
model versus the realistic model.

1) "We are smart, so we simply build something that feels good and
   provided we can't find a way to break it we declare it secure."
   This is the Java model. Java isn't "scruffy". Its a very elegant
   and cleanly built system, far more elegant than most. I contend
   that it is flawed, but not because it is "scruffy". I contend that
   the flaw is that its security depends on all its parts working
   flawlessly, and that we can't build flawless systems. Such systems
   are made on the liberal assumption that humans can design something
   perfect in all its parts. To trust a system built on such an
   assumption, you ultimately need a proof of its security from top to
   bottom. The very reason I think such a system is impractical is
   that I agree with the notion that such proofs are not possible or
   if they are made are often as buggy as the code was, proofs merely
   being a formalism in a different language. This is the wrong
   paradigm, from the start.

2) "We are ignorant, so we build something that does as little as we
   can get away with, makes the assumption at every stage that every
   component of the system might be broken, and put seventeen layers
   of armor around it on the assumption that we still have probably
   made a mistake or two in designing the system." This is the model
   that modern firewalls built by the likes of me take -- systems that
   are designed to be tolerant of multiple engineering failures. Such
   systems are built on the assumption that humans are fallible. Such
   systems, unlike Java, do not depend on flawless operation of all
   their components for their security. Such systems are built on the
   conservative assumption that humans are going to make mistakes and
   that you have to take account of your own fallibility when
   designing secure systems. In such a system, one can have breeches
   of the security of four major subsystems and the fifth still keeps
   you alive. The "belt and suspenders" model doesn't require
   mathematical proofs of security because it was engineered, from the
   start, to be robust.

Tim misunderstands, thinking this is a case of some foolish
perfectionists getting mad at the guys who throw things together and
hope that they work. Not at all. Our problem with Java is the security
model, which inherently requires perfect design and operation. We
build our own systems to be robust enough to survive our own mistakes.
Java is built such that any mistake is fatal.

Essentially, this is the optimists versus the realists.

Perry

PS BTW, Tim, Java is great for the theorem prover fetishizers -- look no
further than Java's bytecode verifier. I have never built a system
that required an "active defense" like that. They fill me with the
same sort of dread I would get from a skyscraper design that required
a constant flow of electricity to the building lest it collapse. Sure,
its cool. Maybe it even saves some money. However, can you sleep at
night inside it?