Java research directions

Work on Java security :

Java is the programming language of our times ... net-aware, object-oriented, buzzword-compliant, hype-laden.

Where did the language come from?

Oak project (1991?), at FirstPerson Inc, led by James Gosling --- focused on programming of embedded systems (controllers for desktop sets, coffee-makers...). Started system design in C++ --- turned out to be too cumbersome for their purposes. Garbage-collection was a serious issue. Focused on defining a ``clean'' subset of C++ ... ``C++ without guns, knives and clubs'' (Gosling), with significant influence from Objective C (interfaces).

The language design has almost no new language features --- most of the ideas have been introduced in other languages before. For instance, the notion of a Virtual Machine (VM) has been around at least since the popular P-code machine developed by Niklaus Wirth and his collaborators in the 70s as a target for a portable Pascal compiler.

Java's contribution to programming language design lies in its simplifcation of the C++ computation model, and in its introduction of type-safe, arbitrarily user-extensible dynamic linking, loading and verification.

Where is the language today?

So what are the core features of the language? It is strongly typed, garbage-collected, VM based, dynamically linked. The latter makes possible the notion of code mobility over the net, and ``sandbox''-security. The object model is simple and elegant, with single-inheritance of signatures and implementations, but multiple inheritance of interfaces. VM is carefully designed to allow for considerable compile-time information to be carried over and available at link-time. Thus a number of transformations (e.g. adding new private members, reimplementing methods without changing the public interface) can be performed on source code without affecting the linkability against pre-existing, pre-compiled code. This kind of binary compatibility is extremely attractive, though it has not been pushed to the extent that it can. Of particular note in the Java design is the provision of classloaders. A class-loader is, essentially, user-defined code that is called in the heart of the Java implementation, and is used to resolve a class name into binary code to be loaded by the Java Virtual Machine. The current design of Java suffers from the severe bug that people can write class loaders which compromises the type-security of the language. Among the wide-spread commercially available languages, Java is the best basis for large-scale distributed computing. This is due in part to recent extensive work (released in Java 1.1) on extending Application Programmer Interfaces (APIs) to support

In addition an object component model (JavaBeans) is being developed on top of these facilities to allow interoperable plug-and-play components to be developed.

Work to do done ...

Weaknesses ... and therefore opportunities for research.

Research areas