Note: This is an obsolete, no-longer-maintained page. Sun Microsystems has now released their Java implementation as Free/Libre/open source software (FLOSS) - probably because the other FLOSS implementations were becoming quite capable - so the other implementations are now less interesting than they used to be.
Java Implementations
by David K. Friedman and David A. Wheeler
August 5, 2002

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. version 2.0 has been criticized for its Java dependencies (multiple times), but there's ongoing work to make 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 issue #46241, which asks to have run on an OSS/FS Java Virtual Machine, and the 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 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:

  1. The Java Virtual Machine (JVM) which runs class files. The JVM is an abstract computer that executes programs stored in "class" files. The JVM can be implemented on real computers in many different ways, and that's the point: as long as your computer faithfully recreates this abstract computer, it can run programs stored in class files. For example, the JVM might be implemented as an interpreter built into a web browser, or as a separate program that interprets the class files. Your computer could implement the JVM by transforming the class files into an executable program specific for that machine just before running them (this is called a "just-in-time" compiler). In fact, your computer hardware might implement the  JVM directly. As long as you have an implementation of the JVM, you can run Java programs, compiled into class files. Class files are also called bytecode files.
  2. The Java language. The Java language is an object oriented computer programming language that resembles C++ and Objective-C in syntax, with its semantics being more like a cross between Ada (for typesafety) and Smalltalk. It supports automatic garbage collection and single inheritance (with multiple inheritance of interfaces) but lacks enumerations and templates.
  3. A compiler that generates class files. The JVM runs class files, so you need a way to create them. Sun has developed a compiler that takes programs written in the Java language and generates Java class files. Other vendors have also developed compilers that generate class files. Note that you don't need to use the Java language to generate Java class files.
  4. The Java library. The Java technology includes a set of components for a platform-independent graphical user interface (GUI) as well as other useful components.
Sometimes the terminology can rather confusing. Many people, including Sun, use the term "Java" for each of these different components and for the technology as a whole. You'll need to determine what they mean by its context. The key point is that when people "run a Java program", they're actually running a set of class files on their version of the JVM.

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:

  1. You want to use open source / free software technology: When you download from Sun you must agree to a license which states that you are not allowed to modify or redistribute the software except under special conditions.  If you are a developer, you may want something that you can modify, port, and so on. You may also not want some other organization to have that much control over your infrastructure. In our list, we have specified which packages are open source, including those that are GPL (GNU Public License) or LGPL (Lesser GNU Public License). For more information, you can see the Open Source Initiative web site, the Free Software Foundation, Open Source Software / Free Software References, and Quantitative Measures.
  2. You would prefer to write in another language: As stated before you do not need to write Java source code to be able to create bytecode.  We list here several compilers which take source code from a different language and compile it to bytecode.
  3. You would like increased performance: One of the key problems with the Java virtual machine is that performance (i.e., speed) may suffer. For many applications, perhaps performance is not important, but for other applications it's quite important. Sun's original Java implementation performed security checks on code every time it was loaded, and then it interpreted byte codes one-by-one. More recently, some implementations include a ``just-in-time'' compiler which quickly compiles at least some of the code before it's executing (various heuristics may be used to try to determine what should be compiled). Some Java implementations take a more traditional (``ahead-of-time'') approach: they take the Java source code or byte code and compile it to machine-specific native code. This code will work faster (especially since the compiler can spend more time optimizing its results); note that the native code will only work on that kind of machine. Some systems support a hybrid approach: you can compile most code ahead-of-time, but dynamically load code and have them call each other. Note that some required portions of the Java language and byte code (e.g., garbage collection) may make it very difficult for a Java program to be equal in performance to a well-tuned C/C++ program; the extent of this difference is often debated.
  4. Sun doesn't have a Java Development Kit (JDK) for your platform Clearly you can't just download from Sun if you are in this boat. Sun's Java implementation is available on Windows 95/98/NT, Solaris, Linux (x86 only), and several other platforms. The Blackdown team tries to port this to other platforms. However, your platform may not be supported - embedded developers often fit in this category.


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
(more info)
AverStar $/Proprietary Ada95
Compiles Ada95 to bytecode
(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
(GNU compiler for 
(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. 
(more info)
Ada Core Technologies Free/GPL*
(except for the runtime code and library which is like LGPL )
GNAT is able to compile Ada 95 code to bytecode. 
Intent Tao Group Ltd.
(more info)
IBM Research Free/GPL* Test Suite Regression testing suite for Java source code compilers
(more info)
Hungry Programmers Free/LGPL* Virtual
Open source Java VM. 
(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. 
(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.
(more info)
Instantiations $/Proprietary Compiler Compiles bytecode to native code.
(more info)
Python Software Activity Free/Open Source*
(mostly, see below for details)
Compiles Python to bytecode.
(more info)
Kada Systems (formerly Emwerks) $/Proprietary Compiler, code minimizer, Library, Virtual Machine Java implementation for mobile/ handheld devices
(more info)
TransVirtual/ 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.
(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)
Compiles Scheme to Java bytecode.
(more info)
John Leuner Free/GPL* JVM Bytecode interpreter, JIT in development; depends on Classpath. Implements ``persistent'' Java.
(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. 
(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.
(more info)
IBM Free/Closed Source RexxLibrary, RexxCompiler Compiles a dialect of Rexx to Java bytecode. 
(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.
(more info)
University of South Australia Free/Public Domain* Extended Java  Compiler Compiles Java code. Makes several extensions including generic types. 
(more info)
Sable Research Group 
McGill University
Free/GPL* Virtual Machine,
Java Virtual Machine. Comes with SablePath, a library derived from GNU Classpath.
(more info)
Groupe Silicomp $/Proprietary Compiler Compiles Java bytecode to native machine code; sold to OEMs.
(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.

*Open Source Software (OSS)

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 ( or ) 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:

  1. The first one claims to be compliant with the Open Source Definition but has not yet sought certification from the Open Source Organization,  (according to their web site see license) But,  the general Python license has been certified. This is the license associated with the standard python software. You can see the source and modify it if you wish. This first version does not contain the regular expression checker OROMatcher.
  2. The second version does contain OROMatcher. Now the version of  OROMatcher  which comes with JPython is available at no charge but is not open source. Hence the separate license.  However,  OROMatcher is expected to be open source in the next version.

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/ -- 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 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. 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).

Apparently Dead Projects

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
(more info)
Irisa Free/GPL* Compiler,
Compiles bytecode to C.  Also has an Java interpreter
(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.


    If you know of other Java tools or alternate implementations that you think ought to be listed, please contact us at 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.


Some other sources of Java information:

  1. Marco Schmidt's List of Java compilers and virtual machines, which also tries to capture this sort of information.
  2. Programming Languages for the Java Virtual Machine, which specializes in listing different compilers for different languages that generate Java source code or Java bytecode.
  3. Yahoo! Java
  4. Gamelan
  5. Javalobby
  6. Java Repository
  7. TransVirtual's List of Resources
  8. The Java Spec Report (Specification Errata)
You might also take a peek at the "D" language.