Apache Harmony
Encyclopedia
Apache 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. The Harmony project achieved (as of February 2011) 99% completeness for JDK 5.0, and 97% for Java SE 6.
In 2011-10-29 a vote was started by the project lead Tim Ellison whether to retire the project. The outcome was 20:2 in favor, and the project was retired on November 16, 2011.
. Many developers
expected that it would be the project above the GNU
, Apache
and other communities. GNU developers were invited into and participated during the initial, preparatory planning.
, and that Harmony would use an incompatible license; therefore blocking the collaboration between Harmony and existing free Java projects. Apache developers would then write the needed classes from scratch
and expect necessary large code donations from software companies. Various misunderstandings at the start of the project, and the fact that major companies like IBM
proposed to give large amount of existing code, created some confusion in the free Java community about the real objectives of the project.
One major point of incompatibility between the GNU Classpath and Apache Harmony projects was their incompatible licenses: Classpath's GNU General Public License
with the linking exception
versus Harmony's Apache License
.
sent a letter to Sun Microsystems
CEO
, Jonathan Schwartz
regarding their inability to acquire an acceptable license for the Java SE 5 Technology Compatibility Kit
(TCK), a test kit needed by the project to demonstrate compatibility with the Java SE 5 specification, as needed by the Sun
specification license for Java SE 5. What makes the license unacceptable for ASF
is the fact that it imposes rights restrictions through limits on the "field of use" available to users of Harmony, not compliant with the Java Community Process
rules.
Sun answered on a company blog http://blogs.sun.com/ontherecord/http://java.sys-con.com/read/360602.htm that it intended to create an open source implementation of the Java platform under GPL, including the TCK, but that their current priority was to make the Java Platform accessible to the GNU/Linux
community under GPL as quickly as possible.
This answer triggered some reactions, either criticizing Sun
for not responding "in a sufficiently open manner" to an open letter http://ianskerrett.wordpress.com/2007/04/16/the-silence-from-an-open-sun/, or rather Apache Software Foundation
; some think that ASF acted unwisely to aggressively demand something they could have obtained with more diplomacy from Sun, especially considering the timescale of the opening class library.http://gnu.wildebeest.org/diary/2007/04/21/openjck/
Since Sun's release of OpenJDK
, Sun
has released a specific license to allow to run the TCK in the OpenJDK context for any GPL
implementation deriving substantially from OpenJDK.
On December 9, 2010, the Apache Software Foundation resigned from the Java Community Process Executive Committee, in protest over the difficulty in obtaining a license acceptable to Apache for use with the Harmony project.
, the Virtual Machine used in Google
's Android platform, uses a subset of Harmony for the core of its Class Library
. However, Dalvik does not align to Java SE
nor Java ME
Class Library
profiles (for example J2ME
classes, AWT
and Swing
are not supported). Instead it uses its own library, built on a subset of Harmony.
, by far the biggest participant in the project, decided to join Oracle
on the OpenJDK
project, effectively shifting its efforts from Harmony to the Oracle
reference implementation. Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".
On March 2011, IBM
's Tim Ellison, announced that he resigned as Project Management Chair for Harmony, a move which brings questions about the future of the project.. Since the beginning of 2011, there has been almost no more development on the project, nor discussions on the mailing list.
into bringing the development process more in line with "the Apache way," and it seems that their efforts were successful. On November 1, 2006, the current team of committers consisted of 16 developers, 12 of them from IBM and Intel.
and Linux
operating systems on x86 and x86-64 architectures.
, AWT
and Java 2D
code which were contributed by Intel.
The Harmony project currently achieve (as of February 2011) 99% completeness for JDK 5.0, and 97% for Java SE 6.
The progress of the Apache Harmony project can be tracked against J2SE 1.4 and Java SE 5.0. Also, there is a branch for Harmony v6.0 in development for Java SE 6.0.
Apache Harmony developers integrate several existing, field-tested open-source projects to meet their goal (not reinventing the wheel
). Many of these projects are mature and well known and other parts of the library needed to be written from scratch.
This is a list of existing open source components that are used in the Apache Harmony project; some of them were in use before the project started.
class (ORB) has the explaining comment both in the standard abstract API class http://cvs.savannah.gnu.org/viewcvs/*checkout*/classpath/org/omg/CORBA/ORB.java?rev=1.2.2.12&root=classpath and implementation http://cvs.savannah.gnu.org/viewcvs/*checkout*/classpath/gnu/CORBA/OrbFunctional.java?rev=1.6&root=classpath. In the Yoko project, used by Harmony,http://www.mail-archive.com/yoko-dev@incubator.apache.org/msg01428.html most methods both in the standard declaration http://svn.apache.org/repos/asf/incubator/yoko/trunk/yoko-spec-corba/src/main/java/org/omg/CORBA/ORB.java and implementing class http://svn.apache.org/repos/asf/incubator/yoko/trunk/core/src/main/java/org/apache/yoko/orb/OBCORBA/ORB_impl.java were undocumented at the end of October, 2006. Also, GNU Classpath supported both older and current CORBA features (same as Sun's implementation). Harmony, differently, left the central method of the older standard (ORB.connect(Object)) fully unimplemented.
that translates Java source code into bytecode
s, a program that manages JAR files
, a debugger
, and an applet
viewer and web browser
plugin, to name a few. Harmony currently has the compiler, appletviewer, jarsigner, javah, javap, keytool, policytool, and unpack200 http://incubator.apache.org/harmony/roadmap.html#General.
implementations that run Harmony Class Library, all of which were donations by external groups:
In the end of November, 2006, the language support provided by these virtual machine was still incomplete, and the build instructions recommended to use IBM
's proprietary
J9 instead to run the class library test suite. However, this is not necessary anymore (as of July 2007).
As for the rest of the project, DRLVM virtual machine
development has now stalled (as of May 2011).
However, Harmony's incomplete library prevented it from launching some other applications:
Open source
The term open source describes practices in production and development that promote access to the end product's source materials. Some consider open source a philosophy, others consider it a pragmatic methodology...
, free Java implementation
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...
, developed by the Apache Software Foundation
Apache Software Foundation
The Apache Software Foundation is a non-profit corporation to support Apache software projects, including the Apache HTTP Server. The ASF was formed from the Apache Group and incorporated in Delaware, U.S., in June 1999.The Apache Software Foundation is a decentralized community of developers...
. 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. The Harmony project achieved (as of February 2011) 99% completeness for JDK 5.0, and 97% for Java SE 6.
In 2011-10-29 a vote was started by the project lead Tim Ellison whether to retire the project. The outcome was 20:2 in favor, and the project was retired on November 16, 2011.
Initiation
The Harmony project was initially conceived as an effort to unite all developers of the free Java implementationsFree 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...
. Many developers
Software 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...
expected that it would be the project above the GNU
GNU
GNU is a Unix-like computer operating system developed by the GNU project, ultimately aiming to be a "complete Unix-compatible software system"...
, Apache
Apache Software Foundation
The Apache Software Foundation is a non-profit corporation to support Apache software projects, including the Apache HTTP Server. The ASF was formed from the Apache Group and incorporated in Delaware, U.S., in June 1999.The Apache Software Foundation is a decentralized community of developers...
and other communities. GNU developers were invited into and participated during the initial, preparatory planning.
Incompatibility with GNU Classpath
Despite the impression given by the preparatory planning, it was decided not to use the code from GNU ClasspathGNU Classpath
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...
, and that Harmony would use an incompatible license; therefore blocking the collaboration between Harmony and existing free Java projects. Apache developers would then write the needed classes from scratch
Rewrite (programming)
A rewrite in computer programming is the act or result of re-implementing a large portion of existing functionality without re-use of its source code. When the rewrite is not using existing code at all, it is common to speak of a rewrite from scratch...
and expect necessary large code donations from software companies. Various misunderstandings at the start of the project, and the fact that major companies like IBM
IBM
International Business Machines Corporation or IBM is an American multinational technology and consulting corporation headquartered in Armonk, New York, United States. IBM manufactures and sells computer hardware and software, and it offers infrastructure, hosting and consulting services in areas...
proposed to give large amount of existing code, created some confusion in the free Java community about the real objectives of the project.
One major point of incompatibility between the GNU Classpath and Apache Harmony projects was their incompatible licenses: Classpath's GNU General Public License
GNU 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 the 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...
versus Harmony's Apache License
Apache License
The Apache License is a copyfree free software license authored by the Apache Software Foundation . The Apache License requires preservation of the copyright notice and disclaimer....
.
Difficulties to obtain a TCK license from Sun
On April 10, 2007, the Apache Software FoundationApache Software Foundation
The Apache Software Foundation is a non-profit corporation to support Apache software projects, including the Apache HTTP Server. The ASF was formed from the Apache Group and incorporated in Delaware, U.S., in June 1999.The Apache Software Foundation is a decentralized community of developers...
sent a letter to Sun Microsystems
Sun Microsystems
Sun Microsystems, Inc. was a company that sold :computers, computer components, :computer software, and :information technology services. Sun was founded on February 24, 1982...
CEO
Chief executive officer
A chief executive officer , managing director , Executive Director for non-profit organizations, or chief executive is the highest-ranking corporate officer or administrator in charge of total management of an organization...
, Jonathan Schwartz
Jonathan I. Schwartz
Jonathan Ian Schwartz is the co-founder and Chief Executive Officer of Picture of Health. He was formerly the President and CEO of Sun Microsystems prior to its acquisition by Oracle, and previously the founder and Chief Executive Officer of Lighthouse Design, Ltd., a software company focused on...
regarding their inability to acquire an acceptable license for the Java SE 5 Technology Compatibility Kit
Technology Compatibility Kit
A Technology Compatibility Kit is a suite of tests that at least nominally checks a particular alleged implementation of a Java Specification Request for compliance...
(TCK), a test kit needed by the project to demonstrate compatibility with the Java SE 5 specification, as needed by the Sun
Sun Microsystems
Sun Microsystems, Inc. was a company that sold :computers, computer components, :computer software, and :information technology services. Sun was founded on February 24, 1982...
specification license for Java SE 5. What makes the license unacceptable for ASF
Apache Software Foundation
The Apache Software Foundation is a non-profit corporation to support Apache software projects, including the Apache HTTP Server. The ASF was formed from the Apache Group and incorporated in Delaware, U.S., in June 1999.The Apache Software Foundation is a decentralized community of developers...
is the fact that it imposes rights restrictions through limits on the "field of use" available to users of Harmony, not compliant with the Java Community Process
Java Community Process
The Java Community Process or JCP, established in 1998, is a formalized process that allows interested parties to get involved in the definition of future versions and features of the Java platform....
rules.
Sun answered on a company blog http://blogs.sun.com/ontherecord/http://java.sys-con.com/read/360602.htm that it intended to create an open source implementation of the Java platform under GPL, including the TCK, but that their current priority was to make the Java Platform accessible to the GNU/Linux
Linux
Linux is a Unix-like computer operating system assembled under the model of free and open source software development and distribution. The defining component of any Linux system is the Linux kernel, an operating system kernel first released October 5, 1991 by Linus Torvalds...
community under GPL as quickly as possible.
This answer triggered some reactions, either criticizing Sun
Sun Microsystems
Sun Microsystems, Inc. was a company that sold :computers, computer components, :computer software, and :information technology services. Sun was founded on February 24, 1982...
for not responding "in a sufficiently open manner" to an open letter http://ianskerrett.wordpress.com/2007/04/16/the-silence-from-an-open-sun/, or rather Apache Software Foundation
Apache Software Foundation
The Apache Software Foundation is a non-profit corporation to support Apache software projects, including the Apache HTTP Server. The ASF was formed from the Apache Group and incorporated in Delaware, U.S., in June 1999.The Apache Software Foundation is a decentralized community of developers...
; some think that ASF acted unwisely to aggressively demand something they could have obtained with more diplomacy from Sun, especially considering the timescale of the opening class library.http://gnu.wildebeest.org/diary/2007/04/21/openjck/
Since Sun's release of OpenJDK
OpenJDK
OpenJDK is a free and open source implementation of the Java programming language. It is the result of an effort Sun Microsystems began in 2006...
, Sun
Sun Microsystems
Sun Microsystems, Inc. was a company that sold :computers, computer components, :computer software, and :information technology services. Sun was founded on February 24, 1982...
has released a specific license to allow to run the TCK in the OpenJDK context for any GPL
GNU 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....
implementation deriving substantially from OpenJDK.
On December 9, 2010, the Apache Software Foundation resigned from the Java Community Process Executive Committee, in protest over the difficulty in obtaining a license acceptable to Apache for use with the Harmony project.
Use in Android SDK
DalvikDalvik virtual machine
Dalvik is the process virtual machine in Google's Android operating system. It is the software that runs the apps on Android phones. Dalvik is thus an integral part of Android, which is typically used on mobile devices such as mobile phones, tablet computers and netbooks. Programs are commonly...
, the Virtual Machine used in Google
Google
Google Inc. is an American multinational public corporation invested in Internet search, cloud computing, and advertising technologies. Google hosts and develops a number of Internet-based services and products, and generates profit primarily from advertising through its AdWords program...
's Android platform, uses a subset of Harmony for the core of its 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...
. However, Dalvik does not align to Java SE
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...
nor Java ME
Java Platform, Micro Edition
Java Platform, Micro Edition, or Java ME, is a Java platform designed for embedded systems . Target devices range from industrial controls to mobile phones and set-top boxes...
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...
profiles (for example J2ME
Java Platform, Micro Edition
Java Platform, Micro Edition, or Java ME, is a Java platform designed for embedded systems . Target devices range from industrial controls to mobile phones and set-top boxes...
classes, AWT
Abstract Window Toolkit
The Abstract Window Toolkit is Java's original platform-independent windowing, graphics, and user-interface widget toolkit. The AWT is now part of the Java Foundation Classes — the standard API for providing a graphical user interface for a Java program.AWT is also the GUI toolkit for a...
and 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....
are not supported). Instead it uses its own library, built on a subset of Harmony.
Disengagement from IBM
On 11 October 2010, IBMIBM
International Business Machines Corporation or IBM is an American multinational technology and consulting corporation headquartered in Armonk, New York, United States. IBM manufactures and sells computer hardware and software, and it offers infrastructure, hosting and consulting services in areas...
, by far the biggest participant in the project, decided to join Oracle
Oracle Corporation
Oracle Corporation is an American multinational computer technology corporation that specializes in developing and marketing hardware systems and enterprise software products – particularly database management systems...
on the OpenJDK
OpenJDK
OpenJDK is a free and open source implementation of the Java programming language. It is the result of an effort Sun Microsystems began in 2006...
project, effectively shifting its efforts from Harmony to the Oracle
Oracle Corporation
Oracle Corporation is an American multinational computer technology corporation that specializes in developing and marketing hardware systems and enterprise software products – particularly database management systems...
reference implementation. Bob Sutor, IBM's head of Linux and open source, blogged that "IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK".
On March 2011, IBM
IBM
International Business Machines Corporation or IBM is an American multinational technology and consulting corporation headquartered in Armonk, New York, United States. IBM manufactures and sells computer hardware and software, and it offers infrastructure, hosting and consulting services in areas...
's Tim Ellison, announced that he resigned as Project Management Chair for Harmony, a move which brings questions about the future of the project.. Since the beginning of 2011, there has been almost no more development on the project, nor discussions on the mailing list.
End of the project
In 2011-10-29 a vote was started by the project lead Tim Ellison whether to retire the project. The outcome was 20:2 in favor, and the project was retired on November 16, 2011.Development team
At the start, Apache Harmony received some large code contributions from several companies. Development discussions have taken place on open mailing lists. Later, the Apache Software foundation mentors put a lot of effortinto bringing the development process more in line with "the Apache way," and it seems that their efforts were successful. On November 1, 2006, the current team of committers consisted of 16 developers, 12 of them from IBM and Intel.
Last development status
Apache Harmony was accepted among the official Apache projects on 29 October 2006.Architecture
The Dynamic Runtime Layer virtual machine consists of the following components:- The VM core: with its subcomponents concentrates most of the JVM control functions.
- The porting layer: hides platform-specific details from other VM components behind a single interface and is based on the Apache Portable RuntimeApache Portable RuntimeThe Apache Portable Runtime is a supporting library for the Apache web server. It provides a set of APIs that map to the underlying operating system . Where the OS doesn't support a particular function, APR will provide an emulation...
layer. - The garbage collectorGarbage collection (computer science)In computer science, garbage collection is a form of automatic memory management. The garbage collector, or just collector, attempts to reclaim garbage, or memory occupied by objects that are no longer in use by the program...
: allocates Java objects in the heap memory and reclaims unreachable objects using various algorithms - Execution Manager: selects the execution engine for compiling a method, handles profiles and the dynamic recompilation logic.
- Class Library: is a Java standard library.
- The thread manager that handle operating system threading
- The execution engine: consists of the following:
- The just-in-time compiler for compilation and execution of method code.
- The interpreterInterpreter (computing)In computer science, an interpreter normally means a computer program that executes, i.e. performs, instructions written in a programming language...
for easier debugging.
Support platform and operating system
The project provided a portable implementation that ease development on many platforms and operating systems. The main focus was on WindowsMicrosoft Windows
Microsoft Windows is a series of operating systems produced by Microsoft.Microsoft introduced an operating environment named Windows on November 20, 1985 as an add-on to MS-DOS in response to the growing interest in graphical user interfaces . Microsoft Windows came to dominate the world's personal...
and Linux
Linux
Linux is a Unix-like computer operating system assembled under the model of free and open source software development and distribution. The defining component of any Linux system is the Linux kernel, an operating system kernel first released October 5, 1991 by Linus Torvalds...
operating systems on x86 and x86-64 architectures.
Windows 2000 Windows 2000 Windows 2000 is a line of operating systems produced by Microsoft for use on personal computers, business desktops, laptops, and servers. Windows 2000 was released to manufacturing on 15 December 1999 and launched to retail on 17 February 2000. It is the successor to Windows NT 4.0, and is the... |
Windows Microsoft Windows Microsoft Windows is a series of operating systems produced by Microsoft.Microsoft introduced an operating environment named Windows on November 20, 1985 as an add-on to MS-DOS in response to the growing interest in graphical user interfaces . Microsoft Windows came to dominate the world's personal... XP Windows XP Windows XP is an operating system produced by Microsoft for use on personal computers, including home and business desktops, laptops and media centers. First released to computer manufacturers on August 24, 2001, it is the second most popular version of Windows, based on installed user base... , Server 2003 Windows Server 2003 Windows Server 2003 is a server operating system produced by Microsoft, introduced on 24 April 2003. An updated version, Windows Server 2003 R2, was released to manufacturing on 6 December 2005... , Vista Windows Vista Windows Vista is an operating system released in several variations developed by Microsoft for use on personal computers, including home and business desktops, laptops, tablet PCs, and media center PCs... |
Linux Linux Linux is a Unix-like computer operating system assembled under the model of free and open source software development and distribution. The defining component of any Linux system is the Linux kernel, an operating system kernel first released October 5, 1991 by Linus Torvalds... RHEL, SLES SUSE Linux Enterprise Server SUSE Linux Enterprise Server is a Linux distribution supplied by SUSE and targeted at the business market. It is targeted for servers, mainframes, and workstations but can be installed on desktop computers for testing as well. New major versions are released at an interval of 3-4 years, while... , Debian Debian Debian is a computer operating system composed of software packages released as free and open source software primarily under the GNU General Public License along with other free software licenses. Debian GNU/Linux, which includes the GNU OS tools and Linux kernel, is a popular and influential... , Gentoo Gentoo Linux Gentoo Linux is a computer operating system built on top of the Linux kernel and based on the Portage package management system. It is distributed as free and open source software. Unlike a conventional software distribution, the user compiles the source code locally according to their chosen... , Fedora Fedora (operating system) Fedora is a RPM-based, general purpose collection of software, including an operating system based on the Linux kernel, developed by the community-supported Fedora Project and sponsored by Red Hat... |
FreeBSD FreeBSD FreeBSD is a free Unix-like operating system descended from AT&T UNIX via BSD UNIX. Although for legal reasons FreeBSD cannot be called “UNIX”, as the direct descendant of BSD UNIX , FreeBSD’s internals and system APIs are UNIX-compliant... |
AIX | Mac OS X Mac OS X Mac OS X is a series of Unix-based operating systems and graphical user interfaces developed, marketed, and sold by Apple Inc. Since 2002, has been included with all new Macintosh computer systems... |
|
---|---|---|---|---|---|---|
IA-32 IA-32 IA-32 , also known as x86-32, i386 or x86, is the CISC instruction-set architecture of Intel's most commercially successful microprocessors, and was first implemented in the Intel 80386 as a 32-bit extension of x86 architecture... (Pentium III or better) |
||||||
x86-64 X86-64 x86-64 is an extension of the x86 instruction set. It supports vastly larger virtual and physical address spaces than are possible on x86, thereby allowing programmers to conveniently work with much larger data sets. x86-64 also provides 64-bit general purpose registers and numerous other... (Intel 64, AMD64) |
||||||
Itanium Itanium Itanium is a family of 64-bit Intel microprocessors that implement the Intel Itanium architecture . Intel markets the processors for enterprise servers and high-performance computing systems... (IA64, IPF) |
||||||
PowerPC 32-bit PowerPC PowerPC is a RISC architecture created by the 1991 Apple–IBM–Motorola alliance, known as AIM... |
||||||
PowerPC 64-bit Ppc64 ppc64 is an identifier commonly used within the Linux and GCC open source software communities to refer to the target architecture for applications optimized for 64-bit PowerPC- and Power Architecture processors, frequently used when compiling source code.... |
||||||
zSeries 31-bit |
Class library coverage
The expected donations from software companies were actually received. The Apache Harmony now contains the working code, including the SwingSwing (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....
, AWT
Abstract Window Toolkit
The Abstract Window Toolkit is Java's original platform-independent windowing, graphics, and user-interface widget toolkit. The AWT is now part of the Java Foundation Classes — the standard API for providing a graphical user interface for a Java program.AWT is also the GUI toolkit for a...
and Java 2D
Java 2D
In computing, Java 2D is an API for drawing two-dimensional graphics using the Java programming language. Every Java 2D drawing operation can ultimately be treated as filling a shape using a paint and compositing the result onto the screen....
code which were contributed by Intel.
The Harmony project currently achieve (as of February 2011) 99% completeness for JDK 5.0, and 97% for Java SE 6.
The progress of the Apache Harmony project can be tracked against J2SE 1.4 and Java SE 5.0. Also, there is a branch for Harmony v6.0 in development for Java SE 6.0.
Apache Harmony developers integrate several existing, field-tested open-source projects to meet their goal (not reinventing the wheel
Reinventing the wheel
To reinvent the wheel is to duplicate a basic method that has already previously been created or optimized by others.The inspiration for this idiomatic metaphor lies in the fact that the wheel is the archetype of human ingenuity, both by virtue of the added power and flexibility it affords its...
). Many of these projects are mature and well known and other parts of the library needed to be written from scratch.
This is a list of existing open source components that are used in the Apache Harmony project; some of them were in use before the project started.
Component | Description |
---|---|
ICU International Components for Unicode International Components for Unicode is an open source project of mature C/C++ and Java libraries for Unicode support, software internationalization and software globalization. ICU is widely portable to many operating systems and environments. It gives applications the same results on all... |
Mature C/C++ and Java libraries for Unicode Unicode Unicode is a computing industry standard for the consistent encoding, representation and handling of text expressed in most of the world's writing systems... support, software internationalization Internationalization In economics, internationalization has been viewed as a process of increasing involvement of enterprises in international markets, although there is no agreed definition of internationalization or international entrepreneurship... and software globalization Globalization Globalization refers to the increasingly global relationships of culture, people and economic activity. Most often, it refers to economics: the global distribution of the production of goods and services, through reduction of barriers to international trade such as tariffs, export fees, and import... |
Apache Xalan | XSLT XSLT XSLT is a declarative, XML-based language used for the transformation of XML documents. The original document is not changed; rather, a new document is created based on the content of an existing one. The new document may be serialized by the processor in standard XML syntax or in another format,... stylesheet processor for Java 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... , C++ C++ C++ is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as an intermediate-level language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell... which implements XPath XPath XPath is a language for selecting nodes from an XML document. In addition, XPath may be used to compute values from the content of an XML document... language |
Apache Xerces | XML parser library for Java, C++, Perl Perl Perl is a high-level, general-purpose, interpreted, dynamic programming language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier. Since then, it has undergone many changes and revisions and become widely popular... |
Apache Portable Runtime Apache Portable Runtime The Apache Portable Runtime is a supporting library for the Apache web server. It provides a set of APIs that map to the underlying operating system . Where the OS doesn't support a particular function, APR will provide an emulation... |
Cross-platform Cross-platform In computing, cross-platform, or multi-platform, is an attribute conferred to computer software or computing methods and concepts that are implemented and inter-operate on multiple computer platforms... abstraction library, provides platform independence |
Apache CXF Apache CXF Apache CXF is an open-source, fully featured Web services framework. It originated as the combination of two open-source projects: Celtix developed by IONA Technologies and XFire developed by a team hosted at Codehaus. These two projects were combined by people working together at the Apache... |
Robust, high performance Web service Web service A Web service is a method of communication between two electronic devices over the web.The W3C defines a "Web service" as "a software system designed to support interoperable machine-to-machine interaction over a network". It has an interface described in a machine-processable format... s framework work over protocols such as SOAP SOAP SOAP, originally defined as Simple Object Access Protocol, is a protocol specification for exchanging structured information in the implementation of Web Services in computer networks... , XML/HTTP, RESTful Representational State Transfer Representational state transfer is a style of software architecture for distributed hypermedia systems such as the World Wide Web. The term representational state transfer was introduced and defined in 2000 by Roy Fielding in his doctoral dissertation... HTTP, CORBA Çorba Chorba , ciorbă , shurpa , shorpo , or sorpa is one of various kinds of soup or stew found in national cuisines across Middle East... |
BCEL Byte Code Engineering Library The Byte Code Engineering Library is a project sponsored by the Apache Foundation under their Jakarta charter to provide a simple API for decomposing, modifying, and recomposing binary Java classes . The project was originally conceived and developed by Markus Dahm prior to officially being... |
Libraries to decompose, modify, and recompose binary Java classes, i.e., bytecode Bytecode Bytecode, also known as p-code , is a term which has been used to denote various forms of instruction sets designed for efficient execution by a software interpreter as well as being suitable for further compilation into machine code... |
MX4J MX4J MX4J is a project to create an open source implementation of Java Management Extensions. The JMX specification is a Java Specification Request currently in maintenance release 1.2; the new JSR 160 has been issued to address connectivity to a remote JMX agent... |
Java Management Extensions Java Management Extensions Java Management Extensions is a Java technology that supplies tools for managing and monitoring applications, system objects, devices and service oriented networks. Those resources are represented by objects called MBeans... (JMX) tools to manage and monitor applications, system objects, devices and service oriented networks |
VM Magic | Set of extensions to Java language to facilitate systems programming in Java by adding direct memory operations, etc. |
Bouncy Castle Bouncy castle (cryptography) Bouncy Castle is a collection of APIs used in cryptography. It includes APIs for both the Java and the C# programming languages.Bouncy Castle is Australian in origin and thus American restrictions on the export of cryptographic software do not apply to it.... |
Libraries collection of lightweight cryptography for Java and C# |
ANTLR ANTLR In computer-based language recognition, ANTLR , or ANother Tool for Language Recognition, is a parser generator that uses LL parsing. ANTLR is the successor to the Purdue Compiler Construction Tool Set , first developed in 1989, and is under active development... |
Language tool, provides a framework to construct recognizers, interpreters, compilers, and translators from grammatical descriptions containing actions in many target languages |
Documentation
Harmony is currently less documented than the alternative free Java implementations. For instance, in GNU Classpath every method of the central CORBAÇorba
Chorba , ciorbă , shurpa , shorpo , or sorpa is one of various kinds of soup or stew found in national cuisines across Middle East...
class (ORB) has the explaining comment both in the standard abstract API class http://cvs.savannah.gnu.org/viewcvs/*checkout*/classpath/org/omg/CORBA/ORB.java?rev=1.2.2.12&root=classpath and implementation http://cvs.savannah.gnu.org/viewcvs/*checkout*/classpath/gnu/CORBA/OrbFunctional.java?rev=1.6&root=classpath. In the Yoko project, used by Harmony,http://www.mail-archive.com/yoko-dev@incubator.apache.org/msg01428.html most methods both in the standard declaration http://svn.apache.org/repos/asf/incubator/yoko/trunk/yoko-spec-corba/src/main/java/org/omg/CORBA/ORB.java and implementing class http://svn.apache.org/repos/asf/incubator/yoko/trunk/core/src/main/java/org/apache/yoko/orb/OBCORBA/ORB_impl.java were undocumented at the end of October, 2006. Also, GNU Classpath supported both older and current CORBA features (same as Sun's implementation). Harmony, differently, left the central method of the older standard (ORB.connect(Object)) fully unimplemented.
Tools
A complete implementation of the Java platform also needs a compilerCompiler
A compiler is a computer program that transforms source code written in a programming language into another computer language...
that translates Java source code into bytecode
Bytecode
Bytecode, also known as p-code , is a term which has been used to denote various forms of instruction sets designed for efficient execution by a software interpreter as well as being suitable for further compilation into machine code...
s, a program that manages JAR files
JAR (file format)
In software, JAR is an archive file format typically used to aggregate many Java class files and associated metadata and resources into one file to distribute application software or libraries on the Java platform.JAR files are built on the ZIP file format and have the .jar file extension...
, a debugger
Debugger
A debugger or debugging tool is a computer program that is used to test and debug other programs . The code to be examined might alternatively be running on an instruction set simulator , a technique that allows great power in its ability to halt when specific conditions are encountered but which...
, and an applet
Applet
In computing, an applet is any small application that performs one specific task that runs within the scope of a larger program, often as a plug-in. An applet typically also refers to Java applets, i.e., programs written in the Java programming language that are included in a web page...
viewer and web browser
Web browser
A web browser is a software application for retrieving, presenting, and traversing information resources on the World Wide Web. An information resource is identified by a Uniform Resource Identifier and may be a web page, image, video, or other piece of content...
plugin, to name a few. Harmony currently has the compiler, appletviewer, jarsigner, javah, javap, keytool, policytool, and unpack200 http://incubator.apache.org/harmony/roadmap.html#General.
Virtual machine support
Harmony currently has seven virtual machineVirtual machine
A virtual machine is a "completely isolated guest operating system installation within a normal host operating system". Modern virtual machines are implemented with either software emulation or hardware virtualization or both together.-VM Definitions:A virtual machine is a software...
implementations that run Harmony Class Library, all of which were donations by external groups:
- JC Harmony Edition VM, "JCHEVM," based on the JCVM'sJC virtual machineJC virtual machine is a Java Virtual Machine that converts class files from byte-code into C and compiles them using C compiler GCC. It uses Soot, a Java programming language framework to load, manipulate and optimize byte-code and GNU Classpath as a standard library....
interpreterInterpreter (computing)In computer science, an interpreter normally means a computer program that executes, i.e. performs, instructions written in a programming language...
, contributed by the author, Archie Cobbs. - BootJVM, a simple bootstrapping virtual machine, contributed by Daniel Lydick.
- SableVMSableVMSableVM 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...
, an advanced, portable interpreter, contributed by authors from the Sable Research GroupSable Research GroupThe Sable Research Group is located at the School of Computer Science at McGill University and currently under the supervision of Laurie Hendren and Clark Verbrugge. The name of the group originates from the idea that the original goal was to develop research tools for the programming language Java...
; and the Dynamic Runtime Layer Virtual Machine. - DRLVM, a just-in-time compiler contributed by Intel.
- BEA announced the availability of an evaluation version of JRockit VM running Apache Harmony Class Library.
- 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:...
, an open-source meta-circularMeta-circular evaluatorA meta-circular evaluator is a special case of a self-interpreter in which the existing facilities of the parent interpreter are directly applied to the source code being interpreted, without any need for additional implementation...
JVM that use the Apache Harmony Class Library. - Ja.NET SE, an open source project providing a Java 5 JDK (class libraries, tools, etc.) that run on 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...
CLR. Ja.NET SE is based on the Apache Harmony Class Libraries.
In the end of November, 2006, the language support provided by these virtual machine was still incomplete, and the build instructions recommended to use IBM
IBM
International Business Machines Corporation or IBM is an American multinational technology and consulting corporation headquartered in Armonk, New York, United States. IBM manufactures and sells computer hardware and software, and it offers infrastructure, hosting and consulting services in areas...
's proprietary
Proprietary software
Proprietary software is computer software licensed under exclusive legal right of the copyright holder. The licensee is given the right to use the software under certain conditions, while restricted from other uses, such as modification, further distribution, or reverse engineering.Complementary...
J9 instead to run the class library test suite. However, this is not necessary anymore (as of July 2007).
As for the rest of the project, DRLVM virtual machine
Virtual machine
A virtual machine is a "completely isolated guest operating system installation within a normal host operating system". Modern virtual machines are implemented with either software emulation or hardware virtualization or both together.-VM Definitions:A virtual machine is a software...
development has now stalled (as of May 2011).
Application status
Since its conception, Harmony has steadily grown in its ability to execute non-trivial Java applications (see here). , supported applications include:- EclipseEclipse (software)Eclipse is a multi-language software development environment comprising an integrated development environment and an extensible plug-in system...
: 99.3% of the 36000 reference implementation (RI) test pass on Harmony's DRLVM + class library.http://wiki.apache.org/harmony/Eclipse_Unit_Tests_Pass_on_DRLVM#PassRate_2007 - Apache TomcatApache TomcatApache Tomcat is an open source web server and servlet container developed by the Apache Software Foundation...
: 100% of the RI tests pass.http://wiki.apache.org/harmony/Apache_Tomcat - JUnitJUnitJUnit is a unit testing framework for the Java programming language. JUnit has been important in the development of test-driven development, and is one of a family of unit testing frameworks collectively known as xUnit that originated with SUnit....
: 100% of the RI tests pass.http://wiki.apache.org/harmony/JUnit - Apache AntApache AntApache Ant is a software tool for automating software build processes. It is similar to Make but is implemented using the Java language, requires the Java platform, and is best suited to building Java projects....
: 97% of the RI tests pass.http://wiki.apache.org/harmony/Apache_Ant - Other applications pass with a high success rate, such as Apache DerbyApache DerbyApache Derby is a relational database management system developed by the Apache Software Foundation that can be embedded in Java programs and used for online transaction processing. It has a 2 MB disk-space footprint.Apache Derby is developed as an open source project under the Apache 2.0 license...
, Apache AxisApache AxisApache Axis is an open source, XML based Web service framework. It consists of a Java and a C++ implementation of the SOAP server, and various utilities and APIs for generating and deploying Web service applications. Using Apache Axis, developers can create interoperable, distributed computing...
, Log4jLog4jApache log4j is a Java-based logging utility. It was originally written by Ceki Gülcü and is now a project of the Apache Software Foundation. log4j is one of several Java Logging Frameworks....
, Apache Velocity, Apache CocoonApache CocoonApache Cocoon, usually just called Cocoon, is a web application framework built around the concepts of pipeline, separation of concerns and component-based web development. The framework focuses on XML and XSLT publishing and is built using the Java programming language...
, jEditJEditjEdit is a text editor for programmers, available under the GNU General Public License version 2.0. It is written in Java and runs on any operating system with Java support, including Windows, Linux, Mac OS X, and BSD.-Development:...
, and Apache Commons.
However, Harmony's incomplete library prevented it from launching some other applications:
- ArgoUMLArgoUMLArgoUML is an UML diagramming application written in Java and released under the open source Eclipse Public License. By virtue of being a Java application, it is available on any platform supported by Java....
: because it needs a 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...
implementation, which was still unavailable in Harmony. - Apache Geronimo runs on Apache Harmony with some issues and workarounds.
- VuzeVuzeVuze 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...
, formerly Azureus, because of unimplemented security classes.
See also
- GNU ClasspathGNU ClasspathGNU 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...
- List of Java virtual machines
- 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...
- 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...
- 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...
External links
- Apache Harmony FAQ
- Apache Harmony source code repository
- JavaOne 2006 Online Harmony Session
- JavaOne 2007 Online Harmony Session
- Apache Harmony by Geir Magnusson Jr at JavaPolis 2006
- The Java open source debate - a good summary of the debate
- What is the Future of Apache Harmony?
- Apache Harmony loses project manager