Apache Harmony

Last updated

Apache Harmony
Developer(s) Apache Software Foundation
Final release
5.x 5.0M15 / September 15, 2010;13 years ago (2010-09-15)
6.x6.0M3 / September 15, 2010;13 years ago (2010-09-15)
Repository
Written in C, Java
Operating system Linux, Windows
Type Java virtual machine, Java Library
License Apache License 2.0
Website harmony.apache.org

Apache Harmony is a retired open source, free Java implementation, developed by the Apache Software Foundation. [1] 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 J2SE 5.0, and 97% for Java SE 6. [2] The Android operating system has historically been a major user of Harmony, although since Android Nougat it increasingly relies on OpenJDK libraries. [3]

Contents

On October 29, 2011 a vote was started by the project lead Tim Ellison whether to retire the project. The outcome was 20 to 2 in favor, [4] and the project was retired on November 16, 2011. [5] [6]

History

Initiation

The Harmony project was initially conceived as an effort to unite all developers of the free Java implementations. Many developers expected that it would be the project above[ clarification needed ] the GNU, Apache and other communities. GNU developers were invited into and participated during the initial, preparatory planning. [7] Apache then decided not to use code from GNU Classpath because it wanted Harmony to be available under the Apache License v2. [8] 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 proposals from major companies like IBM to donate large amounts of existing code, led some people in the free Java community to view the project as a corporate consortium than an Apache project. [9]

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. [9]

Difficulties to obtain a TCK license from Sun

On April 10, 2007, the Apache Software Foundation sent an open 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. [10] 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. [11]

Sun answered on a company blog [12] [13] that it intended to create an open source implementation of the Java platform under GPL, including the TCK, but that their priority was to make the Java Platform accessible to the 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, [14] 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. [15] [16]

Sun released the OpenJDK in May 2007, along with a specific license to allow to run the TCK in the OpenJDK context for any GPL implementation deriving substantially from OpenJDK. [17] This does not cover Apache Harmony, which is not GPL-licensed. On December 9, 2010, the Apache Software Foundation resigned from the Java Community Process Executive Committee, [18] in protest over the difficulty in obtaining a license acceptable to Apache for use with the Harmony project. [19]

Use in Android SDK

The virtual machine that is used in Google's Android platform (Dalvik up to version 4.4, and its successor, Android Runtime (ART)) uses a subset of Harmony for the core of its Class Library. [20] [21] However, Dalvik does not align to Java SE nor Java ME Class Library profiles (for example J2ME classes, AWT and Swing are not supported).

Android 7.0 "Nougat" replaced Harmony with OpenJDK. [3]

End of the project

On October 11, 2010, IBM, 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. [22] [23] 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". [24] In March 2011, IBM's Tim Ellison announced that he resigned as Project Management Chair for Harmony [25] [26] After IBM's disengagement, the project's activity level greatly declined. [27]

On October 29, 2011, a poll was started on the harmony-dev mailing list by the project lead Tim Ellison whether to retire the project. The outcome on November 3, was 20 to 2 in favor of retirement. [4] On November 16, 2011, the Apache Software Foundation board of directors passed a motion to terminate the project. [28] One director, Larry Rosen, cast a "no" vote, based on the timing rather than the merits of the proposal; it was otherwise unanimous. [28] The project was retired on November 16, 2011. [5]

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 effort into bringing the development process more in line with "the Apache way," [29] [30] and it seemed that their efforts were successful.

Last development status

Apache Harmony was accepted among the official Apache projects on October 29, 2006.

Architecture

The Dynamic Runtime Layer virtual machine consists of the following components:

  1. The VM core: with its subcomponents concentrates most of the JVM control functions.
  2. The porting layer: hides platform-specific details from other VM components behind a single interface and is based on the Apache Portable Runtime layer.
  3. The garbage collector : allocates Java objects in the heap memory and reclaims unreachable objects using various algorithms
  4. Execution Manager: selects the execution engine for compiling a method, handles profiles and the dynamic recompilation logic.
  5. Class Library: is a Java standard library.
  6. The thread manager that handle operating system threading
  7. The execution engine: consists of the following:
    1. The just-in-time compiler for compilation and execution of method code.
    2. The interpreter 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 Windows and Linux operating systems on x86 and x86-64 architectures. [31]

Windows 2000 Windows XP, Server 2003, Vista Linux RHEL, SLES, Debian, Gentoo, Fedora FreeBSD AIX Mac OS X
IA-32 (Pentium III or better)NoYesYesNo
x86-64 (Intel 64, AMD64)YesYes
Itanium (IA64, IPF)NoYes
PowerPC 32-bit No
PowerPC 64-bit NoNo
zSeries 31-bitNo

Class library coverage

The expected donations from software companies were actually received. The Apache Harmony now contains the working code, including the Swing, AWT and Java 2D code which were contributed by Intel.

As of February 2011, the Harmony project achieved 99% completeness for JDK 5.0, and 97% for Java SE 6. [2]

The progress of the Apache Harmony project can be tracked against J2SE 1.4 and Java SE 5.0. [32] 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.

ComponentDescription
ICU Mature C/C++ and Java libraries for Unicode support and software internationalization and globalization
Apache Xalan XSLT stylesheet processor for Java, C++ which implements XPath language
Apache Xerces XML parser library for Java, C++, Perl
Apache Portable Runtime Cross-platform abstraction library, provides platform independence
Apache CXF Robust, high performance Web services framework work over protocols such as SOAP, XML/HTTP, RESTful HTTP, CORBA
BCEL Libraries to decompose, modify, and recompose binary Java classes, i.e., bytecode
MX4J Java Management Extensions (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 Libraries collection of lightweight cryptography for Java and C#
ANTLR Language tool, provides a framework to construct recognizers, interpreters, compilers, and translators from grammatical descriptions containing actions in many target languages

Documentation

Harmony is less documented than the alternative free Java implementations. For instance, in GNU Classpath every method of the central CORBA class (ORB) has the explaining comment both in the standard abstract API class [33] and implementation. [34] In the Yoko project, used by Harmony, [35] most methods both in the standard declaration [36] and implementing class [37] were undocumented at the end of October 2006. Also, GNU Classpath supported both older and newer 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 compiler that translates Java source code into bytecodes, a program that manages JAR files, a debugger, and an applet viewer and web browser plugin, to name a few. Harmony has the compiler, appletviewer, jarsigner, javah, javap, keytool, policytool, and unpack200. [38]

Virtual machine support

Harmony has seven virtual machine 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). [42]

Application status

Since its conception, Harmony grew in its ability to execute non-trivial Java applications. [43] As of July 2007, supported applications include:

However, Harmony's incomplete library prevented it from launching some other applications:

See also

Related Research Articles

<span class="mw-page-title-main">Java (programming language)</span> Object-oriented programming language

Java is a high-level, class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible. It is a general-purpose programming language intended to let programmers write once, run anywhere (WORA), meaning that compiled Java code can run on all platforms that support Java without the need to recompile. Java applications are typically compiled to bytecode that can run on any Java virtual machine (JVM) regardless of the underlying computer architecture. The syntax of Java is similar to C and C++, but has fewer low-level facilities than either of them. The Java runtime provides dynamic capabilities that are typically not available in traditional compiled languages.

A GPL linking exception modifies the GNU General Public License (GPL) in a way that enables 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. Linking is the technical process of connecting code in a library to the using code, to produce a single executable file. It is performed either at compile time or run-time in order to produce functional machine-readable code. The Free Software Foundation states that, without applying the linking exception, a program linked to GPL library code may only be distributed under a GPL-compatible license. This has not been explicitly tested in court, but linking violations have resulted in settlement. The license of the GNU Classpath project explicitly includes a statement to that effect.

<span class="mw-page-title-main">GNU Classpath</span> Implementation of standard class library of Java

GNU Classpath is a free software implementation of the standard class library for the Java programming language. Most classes from J2SE 1.4 and 5.0 are implemented. Classpath can thus be used to run Java-based applications. GNU Classpath is a part of the GNU Project. It was originally developed in parallel with libgcj due to license incompatibilities, but later the two projects merged.

Kaffe is a discontinued "clean room design" version 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.

Free Java implementations are software projects that implement Oracle's Java technologies and are distributed under free software licences, making them free software. Sun released most of its Java source code as free software in May 2007, so it can now almost be considered a free Java implementation. Java implementations include compilers, runtimes, class libraries, etc. Advocates of free and open source software refer to free or open source Java virtual machine software as free runtimes or free Java runtimes.

javac is the primary Java compiler included in the Java Development Kit (JDK) from Oracle Corporation. Martin Odersky implemented the GJ compiler, and his implementation became the basis for javac.

Jikes Research Virtual Machine is a mature virtual machine that runs programs written for the Java platform. Unlike most other Java virtual machines (JVMs), it is written in the programming language Java, in a style of implementation termed meta-circular. It is free and open source software released under an Eclipse Public License.

A Technology Compatibility Kit (TCK) is a suite of tests that at least nominally checks a particular alleged implementation of a Java Specification Request (JSR) for compliance. It is one of the three required pieces for a ratified JSR in the Java Community Process, which are:

<span class="mw-page-title-main">GlassFish</span> Application server project

GlassFish is an open-source Jakarta EE platform application server project started by Sun Microsystems, then sponsored by Oracle Corporation, and now living at the Eclipse Foundation and supported by Payara, Oracle and Red Hat. The supported version under Oracle was called Oracle GlassFish Server. GlassFish is free software and was initially dual-licensed under two free software licences: the Common Development and Distribution License (CDDL) and the GNU General Public License (GPL) with the Classpath exception. After having been transferred to Eclipse, GlassFish remained dual-licensed, but the CDDL license was replaced by the Eclipse Public License (EPL).

<span class="mw-page-title-main">Java (software platform)</span> Set of computer software and specifications

Java is a set of computer software and specifications that provides a software platform for developing application software and deploying it in a cross-platform computing environment. Java is used in a wide variety of computing platforms from embedded devices and mobile phones to enterprise servers and supercomputers. Java applets, which are less common than standalone Java applications, were commonly run in secure, sandboxed environments to provide many features of native applications through being embedded in HTML pages.

OpenJDK is a free and open-source implementation of the Java Platform, Standard Edition. It is the result of an effort Sun Microsystems began in 2006. The implementation is licensed under the GPL-2.0-only with a linking exception. Were it not for the GPL linking exception, components that linked to the Java Class Library would be subject to the terms of the GPL license. OpenJDK is the official reference implementation of Java SE since version 7.

<span class="mw-page-title-main">History of free and open-source software</span> Aspect of history

In the 1950s and 1960s, computer operating software and compilers were delivered as a part of hardware purchases without separate fees. At the time, source code, the human-readable form of software, was generally distributed with the software providing the ability to fix bugs or add new functions. Universities were early adopters of computing technology. Many of the modifications developed by universities were openly shared, in keeping with the academic principles of sharing knowledge, and organizations sprung up to facilitate sharing. As large-scale operating systems matured, fewer organizations allowed modifications to the operating software, and eventually such operating systems were closed to modification. However, utilities and other added-function applications are still shared and new organizations have been formed to promote the sharing of software.

Comparison of the Java and .NET platforms.

The Java Class Library (JCL) is a set of dynamically loadable libraries that Java Virtual Machine (JVM) languages can call at run time. Because the Java Platform is not dependent on a specific operating system, applications cannot rely on any of the platform-native libraries. Instead, the Java Platform provides a comprehensive set of standard class libraries, containing the functions common to modern operating systems.

IcedTea is a build and integration project for OpenJDK launched by Red Hat in June 2007. IcedTea also includes some addon libraries: IcedTea-Web is a free software implementation of Java Web Start and the Java web browser applet plugin. IcedTea-Sound is a collection of plugins for the Java sound subsystem, including the PulseAudio provider which used to be included with IcedTea. The Free Software Foundation recommends that all Java programmers use IcedTea as their development environment.

The Java Development Kit (JDK) is a distribution of Java Technology by Oracle Corporation. It implements the Java Language Specification (JLS) and the Java Virtual Machine Specification (JVMS) and provides the Standard Edition (SE) of the Java Application Programming Interface (API). It is derivative of the community driven OpenJDK which Oracle stewards. It provides software for working with Java applications. Examples of included software are the virtual machine, a compiler, performance monitoring tools, a debugger, and other utilities that Oracle considers useful for a Java programmer.

<span class="mw-page-title-main">Acquisition of Sun Microsystems by Oracle Corporation</span> Agreement announced in 2009 and completed in 2010

The acquisition of Sun Microsystems by Oracle Corporation was completed on January 27, 2010. After the acquisition was completed, Oracle, only a software vendor prior to the merger, owned Sun's hardware product lines, such as SPARC Enterprise, as well as Sun's software product lines, including the Java programming language.

Google LLC v. Oracle America, Inc., 593 U.S. ___ (2021), was a U.S. Supreme Court decision related to the nature of computer code and copyright law. The dispute centered on the use of parts of the Java programming language's application programming interfaces (APIs) and about 11,000 lines of source code, which are owned by Oracle, within early versions of the Android operating system by Google. Google has since transitioned Android to a copyright-unburdened engine without the source code, and has admitted to using the APIs but claimed this was within fair use.

References

  1. "Original FAQ Questions from Project Launch". harmony.apache.org. Retrieved February 27, 2011. We are starting with Java SE 5, as that is the first version of Java SE for which the licensing allows an open source implementation, but we'll continue with Java SE 6 and any subsequent versions that follow.
  2. 1 2 "Class Library Component Status". harmony.apache.org. Retrieved February 27, 2011.
  3. 1 2 Amadeo, Ron (January 7, 2016). "Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL". Ars Technica . Condé Nast . Retrieved July 1, 2016.
  4. 1 2 Ellison, Tim (November 3, 2011). "Move Apache Harmony to the Attic (updated)". org.apache.harmony.dev. Archived from the original on December 14, 2013. Alt URL Archived February 7, 2013, at the Wayback Machine
  5. 1 2 Ellison, Tim (November 16, 2011). "Board accepted attic resolution". org.apache.harmony.dev. Archived from the original on December 14, 2013. Retrieved November 27, 2011. Alt URL Archived March 14, 2013, at the Wayback Machine
  6. "The end of (Apache) Harmony". The H. November 4, 2011.
  7. Mark Wielaard (May 9, 2005). "Harmony!". Archived from the original on May 16, 2008. Retrieved October 21, 2010. Apache has set up a proposal for discussion around a full free j2se implementation. Which they call "Harmony". This is (at the moment) not about code, but about finding out a direction for getting to such a beast. Dalibor, Tom, Jeroen and I were asked to help them in that discussion and possibly show them how to set up a good architecture for it.
  8. Geir Magnusson Jr. (May 24, 2006). "A proposal for a free Java implementation". Apache.
  9. 1 2 Mark Wielaard (May 24, 2006). "Toward a free Java". LWN.net. All this means that, despite the fact that there is now some code available donated by Intel, there is no practical cooperation between the original free software projects backing Harmony and the project now known as Apache Harmony. All this made some people think of Harmony as a company consortium in the guise of an ASF project and not a full community project.
  10. "Open Letter to Sun Microsystems - JCK". apache.org.
  11. According to ASF, 1) a specification lead cannot impose any contractual condition or covenant that would limit or restrict the right of any licensee to create or distribute such Independent Implementations (section 5.C.III), and 2) a specification lead must license all necessary IP royalty-free to any compatible implementation of a specification (section 5.B).
  12. "On the Record". Archived from the original on April 21, 2007.
  13. "Sun to Apache: "Open Source Process is a Journey" - Java IoT". Archived from the original on July 9, 2008. Retrieved April 14, 2007.
  14. "The Silence from an Open Sun". Ian Skerrett. April 16, 2007.
  15. "Mark J. Wielaard » Blog Archive » OpenJCK" . Retrieved August 27, 2023.
  16. Gilbert, Dave (April 16, 2007). "Five Reasons Why Apache Will Regret That Open Letter". Archived from the original on April 18, 2007. Retrieved March 8, 2008.
  17. "OpenJDK Community TCK License Agreement V 1.1" (PDF). Sun Microsystems . Retrieved March 8, 2008. Subject to and conditioned upon its Licensee Implementation being substantially derived from OpenJDK Code and, if such Implementation has or is to be distributed to a third party, its being distributed under the GPL License, Sun hereby grants to Licensee, to the extent of Sun's Intellectual Property Rights in the TCK, a worldwide, personal, non-exclusive, non-transferable, limited license to use the TCK internally and solely for the purpose of developing and testing Licensee Implementation.
  18. "The ASF Resigns From the JCP Executive Committee". Apache Software Foundation. December 9, 2010.
  19. "Apache quits Java governance group in protest of Oracle abuses". Ars Technica. December 9, 2010.
  20. "Google's Android SDK Bypasses Java ME in Favor of Java Lite and Apache Harmon". infoq.com. November 12, 2007. Retrieved May 31, 2009. Instead of providing a full version of the Java SE or Java ME Google has diverged on two fronts. First, a limited subset of the core Java packages is provided. (...) By going this route Android is following in the footsteps of another Google project GWT which uses Java as its development language but does not support the full JDK.
  21. "Package Index". Open Handset Alliance. Archived from the original on June 27, 2009. Retrieved May 31, 2009.
  22. "Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK". Oracle Corporation. Archived from the original on October 14, 2010. Retrieved October 22, 2010.
  23. Ryan Paul (October 13, 2010). "Java wars: IBM joins OpenJDK as Oracle shuns Apache Harmony". Ars Technica. Archived from the original on October 19, 2010. Retrieved October 22, 2010.
  24. Bob Sutor. "IBM joins the OpenJDK community, will help unify open source Java efforts". Archived from the original on October 18, 2010. Retrieved October 22, 2010. IBM will be shifting its development effort from the Apache Project Harmony to OpenJDK. For others who wish to do the same, we'll work together to make the transition as easy as possible. IBM will still be vigorously involved in other Apache projects.
  25. Tim Ellison (March 14, 2011). "Rebooting the Harmony project" . Retrieved March 20, 2011.
  26. "What is the Future of Apache Harmony?". infoq.com. March 14, 2011. Retrieved March 20, 2011.
  27. "Mailing list archives: dev@harmony.apache.org". apache.org. Retrieved September 11, 2011.
  28. 1 2 "Board of Directors Meeting Minutes". Apache Software Foundation. November 16, 2011. Retrieved August 8, 2012. Larry wishes it to be noted that he is not against termination, he simply would have preferred to have more time to work on the messaging.
  29. Leo Simons (July 24, 2006). "We would like all the development to happen right here". Archived from the original on September 29, 2007. Retrieved July 28, 2006.
  30. "The Apache Way". Archived from the original on August 21, 2006. Retrieved July 28, 2006.
  31. Harmony Documentation Team. "Apache Harmony - Supported Platforms". harmony.apache.org.
  32. "Results of comparison between JDK_5.0 and Harmony_5.0". people.apache.org. Retrieved August 27, 2023.
  33. Class path [ permanent dead link ]
  34. Class path [ permanent dead link ]
  35. "Harmony uses latest Yoko jars..." September 27, 2006.
  36. "License". apache.org. Retrieved August 27, 2023.
  37. "License". apache.org. Retrieved August 27, 2023.
  38. "Apache Harmony - Project Roadmap". harmony.apache.org. Retrieved August 27, 2023.
  39. "[general] JRockit H27.2.1 for Harmony Class Library released now".
  40. "Announcing Jikes RVM 3.0 + Apache Harmony!".
  41. "Janet Dev".
  42. "Subversion Commits". harmony.apache.org. Retrieved May 28, 2011.
  43. "Application_Status". apache.org. Archived from the original on August 10, 2007. Retrieved November 4, 2006.
  44. "Eclipse Unit Tests Pass on DRLVM - Harmony Wiki". Archived from the original on February 8, 2007. Retrieved November 4, 2006.
  45. "Apache_Tomcat". apache.org. Archived from the original on February 10, 2007. Retrieved November 4, 2006.
  46. "JUnit". apache.org.
  47. "Apache_Ant". apache.org. Archived from the original on February 10, 2007. Retrieved November 4, 2006.
  48. "Apache Harmony". apache.org.