Escaping the Java Trap (November 26, 2005)

A practical road map to the Free Software and Open
Source alternatives

Based on discussions by Bruno F. Souza, Dalibor Topić, David A. Wheeler and Mark J. Wielaard during
FISL 6.0 with input of the larger GNU Classpath community. Many thanks to SouJava for bringing us together. And Stephane Meslin-Weber for the drawing.

For the last couple of years
the community has been working to ensure that developers can create
applications using the java programming language without having to depend on
proprietary software. Today, the free (as in libre) implementations are already
very capable and support a vast amount of functionality that developers expect
from a java-like environment. Important large applications like JOnAS,
OpenOffice.org 2, Eclipse 3 and Tomcat 5 are known to work. This document
provides a road map of the various projects; how they work together, where they
are, where they're going, and how we make sure that they work well and are
compatible.

Our strategy has been
“user-driven development”: we prioritize developing the capabilities most
needed by real applications. In some areas we do “collaborative competition”:
we have multiple projects that share ideas and sometimes code so people can
choose the best implementation for their purposes. To promote adoption and
participation in the free-libre and open source software (FLOSS)
implementations core components are distributed under terms that allow you to
develop and distribute software under any license.

We
recommend that developers use the FLOSS implementations right now. We're still
working towards a full, complete and compatible stack, but they are mostly
feature complete and ready for use. By using them you’ll avoid accidentally
using a capability not currently implemented. Use 1.4 or lower features, not
1.5. GUI developers must choose a GUI toolkit; Free Swing is making enormous
progress, but is not yet feature complete, so you might wish to choose an
alternative toolkit: AWT for portability, java-gnome for GNOME integration, or
Eclipse SWT for Eclipse integration. Also, avoid proprietary or non-portable
libraries such as com.* internals.

Currently
the primary challenge is remaining unimplemented facilities in the core
library, full 1.5 coverage and tighter integration into the various GNU/Linux
distributions; we urge developers to help in this area and participate in the
various testing, packaging and distribution efforts.

The
standard stack and the enterprise stack plus supporting tools have been built
and are in active development. Various optional extra FLOSS libraries have been
built around the full stack to enhance the development ecosystem. A large set
of regression tests and tools to track completeness, correctness and
compatibility is actively used. Various application servers have been certified
and work is in progress to get to certification of the standard stack. We
deliver the full stack plus application suites through shared packaging efforts
like JPackage and by bundling with several GNU/Linux distributions.

Build

Component

Current Status

Future

Toolsuite and runtime:
Includes the tools (e.g., compiler, jar creator and appletviewer) to develop
and deploy applications. The core component for running applications written
in java is the runtime.

Many implementations.
GCJ can compile to fast (production quality) machine code, but as part of
the critically important GCC suite, releases are not as frequent to allow
more time for testing. Kaffe is a more traditional (interpreter/jit) implementation
that is developed and released more rapidly; IKVM runs applications on Mono.
There are many other implementations where innovations occurs; their best
features get merged into Kaffe, and later GCJ. Gcjwebplugin provides a
(pluggable) appletviewer and GNU Classpath Tools provides additional tools.
Native GCJ applications use GDB for debugging.

Implementations are working
to complete 1.5 features.
GCJX is the next generation GCC frontend that will replace the current GCJ
and will add 1.5 language features. Jarsigner, key management and corba tools
are in development. GNU Classpath will add generic JDWP debugging support.
Audit security manager for safe applet execution. Support more web browsers
and add full JNLP support.

Core Libraries: The
essential core libraries required to compile and run applications.

GNU Classpath is the
shared library that includes most 1.3 and 1.4 features, including essentially
all of the core java.* and javax.* packages; it currently lacks full support
for some of the newer 1.5 packages and Free Swing is in active development.

Enhanced AWT
integration with GTK+, cairo and pango for Graphics2D support, add full Free
Swing, accessibility, JNDI providers, and kerberos implementations. Where
possible import existing libraries to provide additional core packages. The
new 1.5 language capabilities are developed on a separate branch.

Application Servers:
Extended set of enterprise libraries and programs.

JOnAS and JBoss (both
LGPL) provide J2EE certified application servers. JOnAS can be build and
distributed using current GCJ 4.

Get Geronimo working on
the free stack. Extend language support to 1.5 (annotations).