This article briefly introduces Java, provides a bit of Java history, and describes various Java implementations.
As of March 2005, many developers avoid using Java because it has had inadequate open source software / Free Software (OSS/FS) implementations, so using Java has meant falling into the Java trap. For many users, this makes using Java programs incredibly inconvenient; few operating system vendors (other than Sun) can or will distribute Sun's Java implementation, so installing a Java program is currently a big hassle. That's a death blow for a development tool -- it's unwise to make products that create extra hassles for customers! Sun has placed many roadblocks interfering with OSS/FS implementations, even though many believe this strategy has been very unwise; see Eric S. Raymond's "Let Java Go" and comments by IBM's Bob Sutor. Many problems arise from the so-called Java "community" process (JCP); those issues are discussed by IBM's software chief, senior vice president and group executive Steve Mills and in Andrew C. Oliver's comments on the JCP. Sun's March 2005 efforts to "simplify" their licenses, without actually meeting the demands of many customers, have met with widescale derision. You might also want to read Commentary: Where is Java in the settlement? by Rick Ross, founder of Javalobby, and Viva! (Open Source Java).
Thankfully, OSS/FS Java implementations are starting to mature. The primary problem has been inadequate library support for GUIs, but this appears to be changing, finally. Eclipse now runs without Sun's JDK. OpenOffice.org version 2.0 has been criticized for its Java dependencies (multiple times), but there's ongoing work to make Openoffice.org run on OSS/FS Java implementations (mainly gcj plus Classpath); success for the critical portions was reported in January 2005, and by March 2005 even more success was reported. See OpenOffice.org issue #46241, which asks to have OpenOffice.org run on an OSS/FS Java Virtual Machine, and the OpenOffice.org Java policy to encourage portability across different Java implementations.
The GNU Classpath library project is an important project to create an OSS/FS Java library. There many Java implementations, many of which use the GNU Classpath library. These implementations include GNU's gcj Java compiler (part of the gcc toolsuite), Kaffe, IBM's Jikes, and IKVM.net. IKVM.net implements Java on the .NET framework (implemented by Microsoft and by Mono). GNU Classpath provides a long list of Java Virtual Machine implementations that use GNU Classpath. The FOSDEM 2005 conference included a discussion between such projects so they could work out remaining issues. For example, There's work on streamlining the interactions between gcj and Classpath, eliminating some unnecessary redundancies. Here's work on packaging Java programs, and some more info from LWN in Sep. 2005. Hopefully, this will give you enough information to start looking for more current information.
Warning: Below is an old list of Java implementations. However, the text below is now very out-of-date, and I don't have time to keep up right now. The list below isn't limited to OSS/FS implementations, nor is it intended to be. But, you might find it useful, so here it is.
Introduction: What's Java?
Sun Microsystems has developed a set of technologies called Java (TM). Using Java you can create various kinds of programs including traditional applications and "applets" that automatically run when a user views a web page. Many users are very attracted to Java's goal of "write once, run anywhere" (WORA), that is, using this technology the same program can be highly portable and run on many different platforms (e.g. Windows, Mac, Unix, and Linux). The Java technologies can be divided into four components:
Note: the term "Java" is trademarked by Sun.
For purposes of this page, "Java" will also include anything implementing
(or trying to implement) Sun's specifications of Java, but this is not
intended to infringe on the status of Sun's trademark.
Java History
Java is an outgrowth of the Green Project which was started in 1990 by Patrick Naughton, Mike Sheridan, and James Gosling. The idea was simply to plan and anticipate the "next wave" in computing. Initially, it was called Oak after a tree outside of James Gosling's office. However, that name was in use by another product from a different company so the name Java was used. The technology quickly caught on and Java was christened on May 23 of 1993 when Netscape Navigator agreed to make Java a part of its browser software. Today, Java is bigger than ever. It is integral part of the leading web browsers (Internet Explorer and Netscape Navigator) and can run applications on nearly every modern operating system.
However, one thing that we would like to make clear, is that Java is not something which is terribly new. Contrary to what Sun says, virtual machines existed in the 1980s in UCSD p-code, and researchers have been discussing mobile code for years. Still, Java productized these well.
Why not Sun?
Of course, you can always download the current Java Development Kit (JDK) from Sun's Javasoft and if you are just learning Java that may be the simplest thing to do. However, there may be several reasons why you would want software from someone else:
Table
Here is our table of current Java compilers, virtual machines, interpreters, translators and other assorted Java related tools. We have tried to include only those product that we think are current and may be useful to you. Others who appear to be currently inactive are listed below in our Apparently Dead Projects section. Hopefully, this list will be continually updated. Let us know if you think a new product should be added.
You should also take a look at Marco Schmidt's List of Java compilers and virtual machines, which also tries to capture this sort of information.
Product | Company/Organization | Cost/License | Components | Description |
AppletMagic
(more info) |
AverStar | $/Proprietary | Ada95
Compiler |
Compiles Ada95 to bytecode |
BulletTrain
(more info) |
NaturalBridge | $/Proprietary | Bytecode compiler, library | Java bytecode compiler to native code, library, and runtime for Windows |
Dinkum® Jcore
Library
(more info) |
Dinkumware, Ltd | $/Proprietary | Library | Reimplemented Java library; used by JFE. |
Excelsior JET | ||||
GCJ
(GNU compiler for Java) (more info) |
Red Hat | Free/LGPL* | Compiler | Compiles Java code to native code, Java code to bytecode, or bytecode to machine code |
GJ (Generic Java)
(more info) |
Pizza Group | Free/Unknown | Compiles Extended Java to bytecode | Adds support for generics to Java language |
GNU
Classpath
(more info) |
GNU/Open Source | Free/LGPL* | Library | Library of essential Java packages. |
GNAT
(more info) |
Ada Core Technologies | Free/GPL*
(except for the runtime code and library which is like LGPL ) |
Ada95
Compiler |
GNAT is able to compile Ada 95 code to bytecode. |
Intent | Tao Group Ltd. | |||
Jacks
(more info) |
IBM Research | Free/GPL* | Test Suite | Regression testing suite for Java source code compilers |
Japhar
(more info) |
Hungry Programmers | Free/LGPL* | Virtual
Machine |
Open source Java VM. |
Jikes
(more info) |
IBM Research | Free/IBM Public License* | Compiler | Compiles Java source code to bytecode |
JDK (Java Development Kit)
(more info) |
SMI Sun Microsystems Incorporated | Free/Proprietary | Complete Implementation.
Compiler, Library, Virtual Machine |
The Java development kit. |
JFE
(more info) |
Edison Design Group (EDG) | $/Proprietary | Compiler/analysis front end | Generates intermediate form and C; uses Dinkum Jcore |
Joeq | John Whaley | Open Source | Java Virtual Machine | A Java Virtual Machine, itself written in Java. |
JOVE
(more info) |
Instantiations | $/Proprietary | Compiler | Compiles bytecode to native code. |
JPython
(more info) |
Python Software Activity | Free/Open
Source*
(mostly, see below for details) |
Python
Compiler |
Compiles Python to bytecode. |
Kada
(more info) |
Kada Systems (formerly Emwerks) | $/Proprietary | Compiler, code minimizer, Library, Virtual Machine | Java implementation for mobile/ handheld devices |
Kaffe
(more info) |
TransVirtual/Kaffe.org | Free/GPL*
--or--
Custom Edition for commercial developers |
Compiler, Library, Virtual Machine | A complete Java implementation which supports both Sun's Java and Microsoft's. |
Kawa
(more info) |
Per Bothner | Free/GPL*
(if you don't modify then you can use it in proprietary projects ; see license or download for more details) |
Scheme
Compiler |
Compiles Scheme to Java bytecode. |
Kissme
(more info) |
John Leuner | Free/GPL* | JVM | Bytecode interpreter, JIT in development; depends on Classpath. Implements ``persistent'' Java. |
LaTTe
(more info) |
Seoul National University
IBM, T.J Watson Research Center |
Free/BSD license*
(with slight modification from the original) |
Virtual Machine with JIT compiler, and incomplete Library. | Virtual Machine which has its own JIT compiler. |
Mauve
(more info) |
Red Hat | Free/GPL* | Java Test Suite | A free Java Test Suite. |
Microsoft
SDK (Software Development Kit) for Java
(more info) |
Microsoft | Free/Proprietary | Compiler, Library | The Microsoft SDK contains tools, samples, documentation and the Microsoft Java Compiler. |
NetRexx
(more info) |
IBM | Free/Closed Source | RexxLibrary, RexxCompiler | Compiles a dialect of Rexx to Java bytecode. |
PERC
(more info) |
NewMonics | $/Proprietary | Java Virtual Machine, ahead-of-time compiler, class libraries. | Java virtual machine especially for development of network element management and control applications. |
Pizza
(more info) |
University of South Australia | Free/Public Domain* | Extended Java Compiler | Compiles Java code. Makes several extensions including generic types. |
SableVM
(more info) |
Sable Research Group
McGill University |
Free/GPL* | Virtual
Machine,
Library |
Java Virtual Machine. Comes with SablePath, a library derived from GNU Classpath. |
TurboJ
(more info) |
Groupe Silicomp | $/Proprietary | Compiler | Compiles Java bytecode to native machine code; sold to OEMs. |
TowerJ
(more info) |
TowerJ | $/Proprietary | Compiler | Compiles Java bytecode to native machine code. |
Wonka | Open Source (BSD-style license) | JVM, class libraries, etc. | JVM, including class libraries (with own implementation), RTOS, graphical windowing system, etc. It runs on x86-linux, arm-linux (ipaq, yopi, etc), and is being ported to other OSes such as eCos. |
One tool which we have decided to not to include are Compiler Compilers. We feel they are too specialized a thing which only a few people in reality are generally interested in. However, we still list them here in case that may be what you are looking for: SableCC, JavaCC, and ANTLR.
We've not included technologies that are similar to Java but don't appear to be Java. For example, JayaCard's documentation ( http://perso.wanadoo.fr/dgil/jaya/index.htm or http://www.jayacard.com ) doesn't clearly say that it implements Java (though its ideas appear similar). That doesn't make the technology less valuable, but we have to draw the line somewhere.
Further Descriptions
AppletMagic, AverStar -- A commercial Ada 95 compiler from AverStar. Compiles Ada 95 to bytecode. Ada developers should also look at GNAT from Ada Core Technologies.
BulletTrain,
NaturalBridge -- BulletTrain
is a system for statically compiling and linking JVM bytecode applications.
It includes an optimizing ahead-of-time compiler, a linker and recompilation
manager, a runtime, and a core set of optimized libraries compatible with
Sun(TM)'s Java 2 release. It is specifically designed for Windows
platforms
(2000, Windows NT, Windows 98, and Windows 95). It supports over 32,000
threads.
Dinkum® Jcore Library, Dinkumware -- The Dinkum Jcore Library implements essential Java classes. It can be used as the runtime library for JFE (the Java cross-compiler front end from Edison Design Group), or as a replacement core library for use with a Java Virtual Machine (JVM).
GCJ, Red Hat -- Version 2.95.1. GNU Compiler for Java (GCJ) compiles Java code to native code, Java code to bytecode, or bytecode to machine code. Supports everything within the Java language Specification v1.0. The library GCJ uses is called libgcj, so far no support for RMI, AWT, or related GUI libraries, and apparently it has little to no security features.
GJ (Generic Java), Pizza Group -- Compiles an extended form of Java into standard Java bytecode. This extension supports generics. This is follow-on work from the work on Pizza. The executable (class files) can be freely downloaded, but the downloaded files I obtained do not contain the source code for the compiler itself. A website problem prevented accesses to the licensing information.
GNU Classpath -- Intended as an alternative to the proprietary library offered by Sun. No public releases yet, but the interim version can be downloaded. The web site was last updated in late May 2000. The "target" compiler for this library will be Japhar which is also licensed under the LGPL. The people behind SableVM adapted GNU Classpath for their use and called the result SablePath. You can check on the current status.
GNAT, Ada Core Technologies -- Ada 95 compiler. Originally started at NYU this software is now in use by major companies including Boeing, Nortel, Lockheed and others. With regards to the license, the runtime environment and library are licensed under a modified GPL permitting their use in propietary programs. However, the compiler is covered under the standard GPL, so the compiler itself can be modified but may not be made proprietary. You may purchase technical support. See GNATInfo for more information regarding the license.
Jacks, IBM Research -- This is a regression testing suite for Java source code compilers, to see if the compiler meets the requirements of the Java Language Specification Version 2. Jacks is licensed under the GPL (note that it can be used to test non-GPL compilers). Jacks is implemented in Tcl, and works on both Unix-like and Windows systems. Maya Stodte's developerWorks article discusses Jacks. Note that Jacks does not test a Java runtime (JVM) or Java class library (other test suites, such as Mauve, exist to do that).
Japhar, Hungry Programmers -- Java virtual machine currently in the development stage, version 0.08. It is not clear if work on the project is still active. The web site was last modified in March 2000. Japhar is open source and is released under the GPL. Japhar was checked against Mauve and you can view the results.
JDK (Java Development Kit), SMI Sun Microsystems Incorporated(JavaSoft Division) -- Complete Java implementation. Probably the best for a beginner or someone who is just learning, and in our estimation the one currently used by the majority of all users. You will get a complete implementation, including a compiler, virtual machine, and library. Many of the binaries are available at no charge but you are not allowed to make copies or redistribute them. They do offer some of the source code for reference purposes only. You might think twice about looking at the source code though if you want to be considered a "clean" developer of another implementation, i.e., someone who hasn't seen Sun's implementation and can create their own without being accused of copyright infringement.
Jikes, IBM Research -- Compiles Java source code to bytecode. IBM claims it has an extremely fast compile speed, and that it strictly adheres to the Java Language Specification. Last updated November 3, 1999.
JFE, Edison Design Group (EDG)-- Compiles Java source code into an intermediate format suitable for analysis, and can generate C code from the intermediate form (which can then be compiled into an executable that doesn't require a JVM). See Dinkum.
JOVE, Instantiations -- Compiles Java to native code. The pricing information for this software can be found here. You might want this software if you feel your Java applications need to run faster, and that you can substantially improve performance by compiling to native code. It's compatible with JDK 1.3. Note that GCJ, performs the same function; we don't have data comparing their relative strengths.
JPython, Python Software Activity -- Compiles Python to bytecode. With regards to the license, as of now JPython is released under two different licenses:
Kada, Kada Systems -- Full-function Java implementations for handheld/mobile devices. The Kada toolset includes compilers, a code minimizer (to reduce application size), and a source-level debugger. Their Java-compatible virtual machine emphasizes full functionality, speed, and small size. Kada Systems was formerly named Emwerks.
Kaffe,
TransVirtual/Kaffe.org
-- Complete implementation of Java. Kaffe is useful if you want to
support both Microsoft's Java implementation and Sun's. It is designed
to the Personal
Java 1.1.1 specification so it is more oriented toward embedded systems
(VCRs, Phones, Cars, Microwaves etc.). However, you can still use
it to write regular applications and applets.
TransVirtual claims its
Virtual Machine is several times faster than Sun's and that it is only
30% slower than vanilla C. They offer AWT and Swing support. There is corporate
interest in Kaffe:
Compaq,
Schlumberger
and Whistle
have used it for various applications. However, there are also a number
of drawbacks; Kaffe does not have many security features that Sun's implementation
does, including a bytecode verifier and honoring public/private access
modifiers. It does not support the Java 2 security model including stack
inspection and code signing.
Kaffe was written by
Tim
Wilkinson and Peter
Mehlitz. Be aware that there are two distinct versions of Kaffe.
The desktop edition is licensed under the GPL, so you can't use it in a
proprietary project. However, TransVirtual also offers a custom edition
which can be licensed to you for use in a propietary project. This is mirrored
by the two different web sites. From the company website, (TransVirtual)
you may either obtain the Desktop edition or the Custom edition. From the
Kaffe.org
site you may only obtain the Open Desktop edition. In general, the .org
site is more oriented toward other developers, and interested parties who
might feel like contributing to the project, and the .com site is more
oriented towards companies who might use Kaffe for their projects.
Kaffe.org has made it clear that your contributions to the GPL version
will not be used in the custom edition without your permission.
Kawa, Per Bothner -- Compiles Scheme to Java bytecode. Scheme is a programming language similar to LISP and Algol and is often used in introductory Computer Science classes. With regards to the license it is GPLed but you can use it in a proprietary program as long as you don't modify it. See license. Still active. It was last updated June 26, 2000.
Kissme, a Java Virtual Machine which uses native operating system threads and supports an extension to the JVM allowing ``persistent Java'' (in-memory data structures can automatically persist in permanent storage). Licensed using the GPL. It depends on the Classpath Java libraries.
LaTTe, Seoul National University -- Virtual machine with its own JIT compiler. Developed at Seoul National University under the sponsorship of the IBM, T.J Watson Research Center, this software is still in the research stage. The goal is to improve the performance of the JIT compiler component of the Java virtual machine.The class library is incomplete and there is no GUI support, i.e., AWT or Swing.
Mauve, Red Hat -- A test suite for Java. This piece of software tests a JVM and library for compliance against Sun's Java specification. This software is open source and licensed under the GPL.
Microsoft SDK (Software Development Kit) for Java, Microsoft -- Microsoft has its own Java implementation. This package comes with Microsoft's Java compiler and library. You can also download Microsoft's Java Virtual Machine separately. This was part of a lawsuit between Microsoft and Sun. After 3 years, the lawsuit was finally resolved in January 2001. The resolution was not really a surprise, according to InfoWorld (Januar 29, 2001), since it didn't appear that Microsoft was in a position to win the case. Basically, Microsoft blatantly violated Sun's trademark by repeatedly placing Sun's Java logo on software that failed to meet Sun's compatibility testing, in violations of their contract. Many believe Microsoft didn't want to meet the compatibility tests since a compatible Java implementation would enable the same Java software to run on both Microsoft and non-Microsoft platforms. As a result of the court decision, Microsoft has to pay $20 million to Sun, Microsoft will not receive future Java licenses, Microsoft is under a permanent injunction against the use of the Java-compatible logo, and only the existing inventory of Java 1.1.14 can be distributed (under a limited license that expires in seven years). In response, Microsoft is trying to get developers to switch to Microsoft's proprietary ".NET" program and Microsoft's own "C#" language; how successful this will be is yet to be seen.
NetRexx, IBM -- This software allows you to compile a dialect/variant of Rexx (Rexx is a pure procedural language developed by Mike Cowlishaw in the 1970's for IBM). It will generate Java source code, and now interpret code directly, with no compile step at all. The software is free but not open source.
PERC, NewMonics -- PERC is a Java virtual machine for development of network element management and control applications. PERC supports incremental and de-fragmenting real-time garbage collection and deterministic real-time tasking. Also available is an ahead-of-time compiler. Developers can use Windows NT or Linux. Executables can run on Linux, Wind River's VxWorks[tm], ISI's pSOSystem[tm], Windows NT, Phar Lap's ETS, and VenturCom's RTX.
Pizza, University of South Australia -- A compiler for an extended Java language that generates bytecode. It includes support for generic types (i.e. parametric polymorphism, often seen in the form of C++ templates), first class functions, and pattern matching. It is intended to be a superset of Java, but still compiles to regular Java bytecode and you can still use all the old Java libraries. See GJ.
SableVM, Sable Research Group , McGill University -- Developed by a group of students and one professor at McGill University, this is similar to LaTTe in its goal to create a better, faster, Java Virtual Machine. It derives its SablePath library from the GNU Classpath. Still alpha version software. It is open source under the GPL.
TurboJ, Groupe Silicomp -- Compiles Java bytecodes to native executable code. This is OEM'ed by a number of vendors: Hewlett Packard (as TurboChai), Wind River systems, and Fujitsu/Siemens. It supports a mix of both interpreted code and compiled code, and works as an adjunct to a native existing Java run-time system.
TowerJ, TowerJ -- Compiles Java bytecode to native machine code. Allows developers to specify which portions of a system can be dynamically modified (opened) and which portions can not (closed).
Here we list some projects that we found which appear to have little
activity going on right now. They may still have useful nuggets so we've
listed them here.
Product | Company/Organization | Cost/License | Components | Description |
Harissa
(more info) |
Irisa | Free/GPL* | Compiler,
Interpreter |
Compiles bytecode to C. Also has an Java interpreter |
Toba
(more info) |
University of Arizona | Free/License?? | Translator | Translates Java class files into C source code. |
*Open Source Software (OSS)
Harissa, Irisa -- Compiles bytecode to C and inclues a small support library. Developed at a French University this research prototype is at version alpha3.1c. The last change occurred in January 1999. Harissa only supports JDK 1.0.2.
Toba,
University
of Arizona -- Translates Java class files into C source code.
The current version of Toba is 1.1c which was released in mid April of
1999. The link to license info about the software appears to be dead, also
current development on this project has ceased. It may still may have some
useful nuggets for other projects though.
Conclusion
If you know of other Java tools or alternate implementations that you think ought to be listed, please contact us at dwheeler@dwheeler.com. We don't believe there is one clear software package that will satisfy all objectives. However, we encourage you to investigate the packages listed here. You might find what you are looking for.
Links
Some other sources of Java information: