GNU Classpath
Encyclopedia
GNU Classpath is a project aiming to create a free software
implementation of the standard class library
for the Java programming language
. Despite the massive size of the library to be created, the majority of the task is already done, including Swing
, CORBA
, and other major parts. The Classpath developers have implemented almost all of the classes from J2SE
1.4 and 5.0. Classpath can thus be used to run popular Java-based software such as Vuze
and Eclipse
.
GNU Classpath has been one of the high priority directions of the GNU Project
. While the source code of the "official" implementation from Sun Microsystems was available, the license did not allow distribution of any alterations. This was a major obstacle for many innovative projects that could not progress without altering this code. The GNU Classpath development community includes institutions focused on research of Java virtual machines, as well as companies interested in providing alternative Java runtimes
.
GNU Classpath is a part of the Free Software Foundation
. It was originally developed in parallel with libgcj due to license incompatibilities, but later the two projects merged.
with a linking exception
. This is a free software license. All code is formally owned by the Free Software Foundation
, and this owner is bound by its own contractual obligations to the developers.
(like Kaffe
, SableVM
, JamVM
, CACAO
, Jikes RVM, VMkit) because every full-featured Java virtual machine must provide an implementation of the standard class libraries.
Some other uses include:
, libgcj). In the past, GNU Classpath supplied its own virtual machine (Japhar). As Classpath was becoming a base library, shared with a lot of different projects, this virtual machine received less and less attention and is now no longer supported.
After implementing the majority of the official Java 1.4 API, the work in the project became more bug oriented rather than API coverage oriented. On October 24, 2006, the implementation of the last missing 1.4 class, HTMLWriter, was committed. The development speed (computed mathematically as the average number of the new lines of code
per day) reached its highest ever in 2006.
The name GNU Classpath was originally suggested by Bradley M. Kuhn
to one of the first developers, Paul Fisher. At the time, there was great concern in the Free Java implementations community
about enforcement of Sun's trademark on Java against free implementations. Kuhn suggested the name $CLASSPATH, which is the environment variable
used by most Java systems to indicate where the Java libraries reside on the computer. Since $CLASSPATH often expanded to a path name
that included the word java (such as
(with approximately 20 currently active) and one active maintainer
. The maintainer takes care of the legal side of the project, prepares the regular project releases and does some quality management. The maintainer also grants the CVS
access permissions.
Unlike some projects, GNU Classpath has no formal hierarchy. The work is done by the most technically capable, and there is no strict work division either. All code changes are first posted to the discussion list as patches where they can be opposed if needed. The project typically receives between five and eight patches per day.
The project has its own testing suite (Mauve
) with about 175,000 tests and performs daily checks to ensure that the project classes are compatible with the official Sun API classes.
The GNU Classpath library code coverage
progress can be tracked against J2SE 1.4 and Java SE 5.0.
and another that contained the contents of a more experimental branch, supporting the additions, such as generics, enumerations and annotations, present in Java 1.5.
Since version 0.95, Java 1.5 additions like generics have been fully integrated into the main branch. The branch allows GCJ to use Eclipse compiler, ecj, to compile Java 1.5 source code to bytecode, which is then changed into native code by GCJ itself.
compiler
using the Classpath run-time system
(GIJ
) and compiler (GCJ) and also allows to compile the GNU Classpath class library, tools and examples with javac
itself.
. The "use, but no modify" license of these files counts as non-free. Because of this reason, the mentioned classes in the GNU Classpath project were written by hand, using only the official printed OMG specifications. Hence this part of GNU Classpath is as free as any other code in the project.
Free software
Free software, software libre or libre software is software that can be used, studied, and modified without restriction, and which can be copied and redistributed in modified or unmodified form either without restriction, or with restrictions that only ensure that further recipients can also do...
implementation of the standard class library
Java Class Library
The Java Class Library is a set of dynamically loadable libraries that Java applications can call at run time. Because the Java Platform is not dependent on any specific operating system, applications cannot rely on any of the existing libraries...
for the Java programming language
Java (programming language)
Java is a programming language originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java platform. The language derives much of its syntax from C and C++ but has a simpler object model and fewer low-level facilities...
. Despite the massive size of the library to be created, the majority of the task is already done, including Swing
Swing (Java)
Swing is the primary Java GUI widget toolkit. It is part of Oracle's Java Foundation Classes — an API for providing a graphical user interface for Java programs....
, CORBA
Çorba
Chorba , ciorbă , shurpa , shorpo , or sorpa is one of various kinds of soup or stew found in national cuisines across Middle East...
, and other major parts. The Classpath developers have implemented almost all of the classes from J2SE
Java Platform, Standard Edition
Java Platform, Standard Edition or Java SE is a widely used platform for programming in the Java language. It is the Java Platform used to deploy portable applications for general use...
1.4 and 5.0. Classpath can thus be used to run popular Java-based software such as Vuze
Vuze
Vuze is a BitTorrent client used to transfer files via the BitTorrent protocol. Vuze is written in Java, and uses the Azureus Engine. In addition to downloading data linked to by .torrent files, Azureus allows users to view, publish and share original DVD and HD quality video content...
and Eclipse
Eclipse (software)
Eclipse is a multi-language software development environment comprising an integrated development environment and an extensible plug-in system...
.
GNU Classpath has been one of the high priority directions of the GNU Project
GNU Project
The GNU Project is a free software, mass collaboration project, announced on September 27, 1983, by Richard Stallman at MIT. It initiated GNU operating system development in January, 1984...
. While the source code of the "official" implementation from Sun Microsystems was available, the license did not allow distribution of any alterations. This was a major obstacle for many innovative projects that could not progress without altering this code. The GNU Classpath development community includes institutions focused on research of Java virtual machines, as well as companies interested in providing alternative Java runtimes
Run-time system
A run-time system is a software component designed to support the execution of computer programs written in some computer language...
.
GNU Classpath is a part of the Free Software Foundation
Free Software Foundation
The Free Software Foundation is a non-profit corporation founded by Richard Stallman on 4 October 1985 to support the free software movement, a copyleft-based movement which aims to promote the universal freedom to create, distribute and modify computer software...
. It was originally developed in parallel with libgcj due to license incompatibilities, but later the two projects merged.
License
GNU Classpath is licensed under the GNU General Public LicenseGNU General Public License
The GNU General Public License is the most widely used free software license, originally written by Richard Stallman for the GNU Project....
with a linking exception
GPL linking exception
A GPL linking exception modifies the GNU General Public License to create a new, modified license. Such modified licenses enable software projects which provide library code, to be "linked to" the programs that use them, without applying the full terms of the GPL to the using program...
. This is a free software license. All code is formally owned by the Free Software Foundation
Free Software Foundation
The Free Software Foundation is a non-profit corporation founded by Richard Stallman on 4 October 1985 to support the free software movement, a copyleft-based movement which aims to promote the universal freedom to create, distribute and modify computer software...
, and this owner is bound by its own contractual obligations to the developers.
Uses
GNU Classpath is used by many free Java runtimesFree Java implementations
Free Java implementations are software projects that implement Oracle's Java technologies and are distributed under free software licences, thus making them free software...
(like Kaffe
Kaffe
Kaffe is a clean room design of a Java Virtual Machine. It comes with a subset of the Java Platform, Standard Edition , Java API, and tools needed to provide a Java runtime environment. Like most other Free Java virtual machines, Kaffe uses GNU Classpath as its class library.Kaffe, first released...
, SableVM
SableVM
SableVM is a clean room implementation of Java bytecode interpreter implementing the Java virtual machine specification, second edition.SableVM was designed to be a robust, extremely portable, efficient, and fully specifications-compliant Java Virtual Machine that would be easy to maintain and to...
, JamVM
JamVM
JamVM is an open source Java Virtual Machine developed to be extremely small compared with other virtual machines while conforming to the Java virtual machine specification version 2 ....
, CACAO
CACAO
CACAO is a research Java Virtual Machine developed at Vienna University of Technology. It compiles the class binaries while running , resulting in faster execution...
, Jikes RVM, VMkit) because every full-featured Java virtual machine must provide an implementation of the standard class libraries.
Some other uses include:
- The GNU Compiler for Java, which is capable of compiling Java code into native standalone executables.
- GCJAppletViewer for launching Java appletJava appletA Java applet is an applet delivered to users in the form of Java bytecode. Java applets can run in a Web browser using a Java Virtual Machine , or in Sun's AppletViewer, a stand-alone tool for testing applets...
s from command line if they are not supported by the browser in use. - IKVM.NETIKVM.NETIKVM.NET is an implementation of Java for Mono and the Microsoft .NET Framework. IKVM is free software, distributed under a permissive free software licence.IKVM.NET includes the following components:* A Java Virtual Machine implemented in .NET...
, which integrates Java with the .NET Framework.NET FrameworkThe .NET Framework is a software framework that runs primarily on Microsoft Windows. It includes a large library and supports several programming languages which allows language interoperability... - JNodeJNodeJNode is a free software project to create a Java platform operating system. The project has taken the unique direction of creating all the software in Java itself, with the exception of some assembly language to boot and load the system...
, an operating system for running Java applications. This system is written in Java and assembler only. - Specialised virtual machines such as JaosJaosJaos is an unmaintained attempt to build an open-source Java virtual machine on top of the Bluebottle System, a kernel using active objects and Oberon programming language. The machine uses the runtime features provided by the Bluebottle System such as garbage collection, memory management and...
for integration with the Oberon programming language, and JamaicaVMJamaicaVMThe JamaicaVM is a virtual machine and build environment for developing and running realtime Java programs. It includes a deterministic garbage collector and implements the RTSJ. It is designed for use in realtime and embedded systems.- See also :*Aicas...
for embedded systems with real-time guarantees. - Virtual machines for the distributed computing with clusters, having up to 128 processors on MyrinetMyrinetMyrinet, ANSI/VITA 26-1998, is a high-speed local area networking system designed by Myricom to be used as an interconnect between multiple machines to form computer clusters. Myrinet has much lower protocol overhead than standards such as Ethernet, and therefore provides better throughput, less...
(http://www.eecg.toronto.edu/jupiter/). - The IcedTeaIcedTeaIcedTea is a build and integration project for OpenJDK launched by Red Hat in June 2007. The initial goal was to make the Java OpenJDK software which Sun Microsystems released as free software in 2007 usable without requiring any other software that is not free software and hence make it possible...
project used GNU Classpath as a replacement for proprietary elements of OpenJDKOpenJDKOpenJDK is a free and open source implementation of the Java programming language. It is the result of an effort Sun Microsystems began in 2006...
, prior to their replacement upstream.
History
GNU Classpath development started in 1998 with five developers. During the history, it merged several times with other projects having similar goals (KaffeKaffe
Kaffe is a clean room design of a Java Virtual Machine. It comes with a subset of the Java Platform, Standard Edition , Java API, and tools needed to provide a Java runtime environment. Like most other Free Java virtual machines, Kaffe uses GNU Classpath as its class library.Kaffe, first released...
, libgcj). In the past, GNU Classpath supplied its own virtual machine (Japhar). As Classpath was becoming a base library, shared with a lot of different projects, this virtual machine received less and less attention and is now no longer supported.
After implementing the majority of the official Java 1.4 API, the work in the project became more bug oriented rather than API coverage oriented. On October 24, 2006, the implementation of the last missing 1.4 class, HTMLWriter, was committed. The development speed (computed mathematically as the average number of the new lines of code
Source lines of code
Source lines of code is a software metric used to measure the size of a software program by counting the number of lines in the text of the program's source code...
per day) reached its highest ever in 2006.
The name GNU Classpath was originally suggested by Bradley M. Kuhn
Bradley M. Kuhn
Bradley M. Kuhn is a free software activist from the United States.Kuhn is currently Executive Director of the Software Freedom Conservancy. Until 2010 he was the FLOSS Community Liaison and Technology Director of the Software Freedom Law Center . He previously served as the Executive Director of...
to one of the first developers, Paul Fisher. At the time, there was great concern in the Free Java implementations community
Free Java implementations
Free Java implementations are software projects that implement Oracle's Java technologies and are distributed under free software licences, thus making them free software...
about enforcement of Sun's trademark on Java against free implementations. Kuhn suggested the name $CLASSPATH, which is the environment variable
Environment variable
Environment variables are a set of dynamic named values that can affect the way running processes will behave on a computer.They can be said in some sense to create the operating environment in which a process runs...
used by most Java systems to indicate where the Java libraries reside on the computer. Since $CLASSPATH often expanded to a path name
Path (computing)
A path, the general form of a filename or of a directory name, specifies a unique location in a file system. A path points to a file system location by following the directory tree hierarchy expressed in a string of characters in which path components, separated by a delimiting character, represent...
that included the word java (such as
/usr/lib/java
), it was a way to evoke the name Java without actually saying it. Fisher and other developers didn't like the unsightly use of the $ and all capital letters and settled on Classpath.Development team
The project team consists of about 70 developersSoftware developer
A software developer is a person concerned with facets of the software development process. Their work includes researching, designing, developing, and testing software. A software developer may take part in design, computer programming, or software project management...
(with approximately 20 currently active) and one active maintainer
Software maintainer
In free and open source software, a software maintainer is usually one or more people who build source code into a binary package for distribution, commit patches, or organize code in a source repository....
. The maintainer takes care of the legal side of the project, prepares the regular project releases and does some quality management. The maintainer also grants the CVS
Concurrent Versions System
The Concurrent Versions System , also known as the Concurrent Versioning System, is a client-server free software revision control system in the field of software development. Version control system software keeps track of all work and all changes in a set of files, and allows several developers ...
access permissions.
Unlike some projects, GNU Classpath has no formal hierarchy. The work is done by the most technically capable, and there is no strict work division either. All code changes are first posted to the discussion list as patches where they can be opposed if needed. The project typically receives between five and eight patches per day.
The project has its own testing suite (Mauve
Mauve (test suite)
Mauve is a project to provide a free software test suite for the Java class libraries. Mauve is developed by the members of Kaffe, GNU Classpath, GCJ, and other projects. Unlike a similar project, JUnit, Mauve is designed to run on various experimental Java virtual machines, where some features may...
) with about 175,000 tests and performs daily checks to ensure that the project classes are compatible with the official Sun API classes.
The GNU Classpath library code coverage
Code coverage
Code coverage is a measure used in software testing. It describes the degree to which the source code of a program has been tested. It is a form of testing that inspects the code directly and is therefore a form of white box testing....
progress can be tracked against J2SE 1.4 and Java SE 5.0.
Virtual machine integration
GNU Classpath contains classes from the official java API namespace. Where calls to the native code are necessary or highly desired, this is done from the small number of "VM" classes. The name of such class matches the name of the class, requiring native methods plus the additional VM prefix: VMObject, VMString and so on. VM classes, stored separately from the rest of code, are package private and final. The methods of these classes contain the keyword native, indicating the necessity of the supporting library. Such library is provided by the authors of the Java virtual machine. Hence GNU Classpath can be connected to nearly any Java virtual machine if the sources of such machine are available and can be modified.Support for the new language features in Java 1.5
Before version 0.95, each GNU Classpath release consisted of two separate release tarballs; one that represented the state of the main development branchBranching (software)
Branching, in revision control and software configuration management, is the duplication of an object under revision control so that modifications can happen in parallel along both branches....
and another that contained the contents of a more experimental branch, supporting the additions, such as generics, enumerations and annotations, present in Java 1.5.
Since version 0.95, Java 1.5 additions like generics have been fully integrated into the main branch. The branch allows GCJ to use Eclipse compiler, ecj, to compile Java 1.5 source code to bytecode, which is then changed into native code by GCJ itself.
Interface with Sun's open-source compiler
Since version 0.95, GNU Classpath supports compiling and running the GPL open-source javacJavac
javac is the primary Java compiler, included in the Java Development Kit from Oracle Corporation.The compiler accepts source code conforming to the Java language specification and produces bytecode conforming to the Java Virtual Machine Specification .javac is itself written in Java...
compiler
Java compiler
A Java compiler is a compiler for the Java programming language. The most common form of output from a Java compiler is Java class files containing platform-neutral Java bytecode...
using the Classpath run-time system
Run-time system
A run-time system is a software component designed to support the execution of computer programs written in some computer language...
(GIJ
GNU Interpreter for Java
The GNU Interpreter for Java is a Java bytecode interpreter for the Java programming language.It is part of the free software GNU Compiler for Java . GCJ is the compiler counterpart to GIJ.-External links:* * *...
) and compiler (GCJ) and also allows to compile the GNU Classpath class library, tools and examples with javac
Javac
javac is the primary Java compiler, included in the Java Development Kit from Oracle Corporation.The compiler accepts source code conforming to the Java language specification and produces bytecode conforming to the Java Virtual Machine Specification .javac is itself written in Java...
itself.
Classes from the omg.org domain
GNU Classpath does not accept any code that has a non-free license, or that was automatically generated from code with a non-free license. The standard Java API contains numerous classes from the omg.org domain that are normally generated from the IDL files, released by the Object Management GroupObject Management Group
Object Management Group is a consortium, originally aimed at setting standards for distributed object-oriented systems, and is now focused on modeling and model-based standards.- Overview :...
. The "use, but no modify" license of these files counts as non-free. Because of this reason, the mentioned classes in the GNU Classpath project were written by hand, using only the official printed OMG specifications. Hence this part of GNU Classpath is as free as any other code in the project.
See also
- Apache HarmonyApache HarmonyApache Harmony was an open source, free Java implementation, developed by the Apache Software Foundation. It was announced in early May 2005 and on October 25, 2006, the Board of Directors voted to make Apache Harmony a top-level project...
- GCJ
- IKVM.NETIKVM.NETIKVM.NET is an implementation of Java for Mono and the Microsoft .NET Framework. IKVM is free software, distributed under a permissive free software licence.IKVM.NET includes the following components:* A Java Virtual Machine implemented in .NET...
- JamVMJamVMJamVM is an open source Java Virtual Machine developed to be extremely small compared with other virtual machines while conforming to the Java virtual machine specification version 2 ....
- JamaicaVMJamaicaVMThe JamaicaVM is a virtual machine and build environment for developing and running realtime Java programs. It includes a deterministic garbage collector and implements the RTSJ. It is designed for use in realtime and embedded systems.- See also :*Aicas...
- JaosJaosJaos is an unmaintained attempt to build an open-source Java virtual machine on top of the Bluebottle System, a kernel using active objects and Oberon programming language. The machine uses the runtime features provided by the Bluebottle System such as garbage collection, memory management and...
- JikesRVMJikesRVMJikes RVM is a mature open source virtual machine that runs Java programs. Unlike most other JVMs it is written in Java, a style of implementation termed meta-circular.-History:...
- KaffeKaffeKaffe is a clean room design of a Java Virtual Machine. It comes with a subset of the Java Platform, Standard Edition , Java API, and tools needed to provide a Java runtime environment. Like most other Free Java virtual machines, Kaffe uses GNU Classpath as its class library.Kaffe, first released...
- IcedTeaIcedTeaIcedTea is a build and integration project for OpenJDK launched by Red Hat in June 2007. The initial goal was to make the Java OpenJDK software which Sun Microsystems released as free software in 2007 usable without requiring any other software that is not free software and hence make it possible...
- Free Java implementationsFree Java implementationsFree Java implementations are software projects that implement Oracle's Java technologies and are distributed under free software licences, thus making them free software...
- Java Class LibraryJava Class LibraryThe Java Class Library is a set of dynamically loadable libraries that Java applications can call at run time. Because the Java Platform is not dependent on any specific operating system, applications cannot rely on any of the existing libraries...