Введение

Язык программирования Java, реализация с открытым исходным кодом.

Apache Harmony — это прекращенная реализация Java с открытым исходным кодом, разработанная Apache Software Foundation. Она была анонсирована в начале мая 2005 года, а 25 октября 2006 года совет директоров проголосовал за придание Apache Harmony статуса проекта верхнего уровня. К февралю 2011 года проект Harmony достиг 99% полноты реализации J2SE 5.0 и 97% для Java SE 6. Операционная система Android исторически являлась основным потребителем Harmony, однако, начиная с Android Nougat, она все больше использует библиотеки OpenJDK. 29 октября 2011 года руководитель проекта Тим Эллисон инициировал голосование о прекращении проекта. Результат был 20 голосов за и 2 против, и проект был закрыт 16 ноября 2011 года.

Введение

Проект Harmony изначально задумывался как попытка объединить всех разработчиков свободных реализаций Java. Многие разработчики ожидали, что он станет проектом, стоящим над сообществами GNU, Apache и другими. Разработчики GNU были приглашены и участвовали в начальном, подготовительном планировании. Затем Apache решил не использовать код из GNU Classpath, поскольку хотел, чтобы Harmony был доступен под лицензией Apache 2.0. Разработчики Apache планировали писать необходимые классы с нуля и ожидали значительных пожертвований кода от программных компаний. Различные недоразумения на начальном этапе проекта и предложения крупных компаний, таких как IBM, о пожертвовании больших объемов существующего кода, привели к тому, что некоторые участники свободного сообщества Java стали рассматривать проект скорее как корпоративный консорциум, чем как проект Apache. Одним из ключевых моментов несовместимости между GNU Classpath и Apache Harmony была несовместимость их лицензий: GNU General Public License Classpath с исключением для компоновки против лицензии Apache Harmony. Причиной неприемлемости лицензии для ASF является то, что она накладывает ограничения на права пользователей Harmony посредством ограничений в "области применения", что не соответствует правилам Java Community Process. Sun ответила в своем блоге, что намерена создать реализацию Java-платформы с открытым исходным кодом под лицензией GPL, включая TCK, но их приоритетом было как можно быстрее сделать Java-платформу доступной для сообщества Linux под GPL. Этот ответ вызвал неоднозначную реакцию: одни критиковали Sun за недостаточную открытость в ответе на открытое письмо, другие – Apache Software Foundation; некоторые считают, что ASF действовала неразумно, слишком агрессивно требуя от Sun того, чего можно было добиться более дипломатичным путем, особенно учитывая сроки открытия библиотеки классов. Sun выпустила OpenJDK в мае 2007 года вместе со специальной лицензией, позволяющей запускать TCK в контексте OpenJDK для любой реализации GPL, существенно основанной на OpenJDK. Это не распространяется на Apache Harmony, который не лицензирован по GPL. 9 декабря 2010 года Apache Software Foundation покинула Исполнительный комитет Java Community Process в знак протеста против сложностей с получением лицензии, приемлемой для Apache и пригодной для использования в проекте Harmony.

Использование в Android SDK

Виртуальная машина, используемая в платформе Android от Google (Dalvik до версии 4.4 и ее преемник, Android Runtime (ART)), использует подмножество Harmony для ядра своей библиотеки классов. Однако Dalvik не соответствует профилям Java SE или Java ME Class Library (например, классы J2ME, AWT и Swing не поддерживаются). Android 7.0 "Nougat" заменил Harmony на OpenJDK. Боб Сутор, руководитель направления Linux и открытого исходного кода в IBM, написал в своем блоге, что "IBM перенаправит свои усилия по разработке с Apache Project Harmony на OpenJDK". В марте 2011 года Тим Эллисон из IBM объявил о своем уходе с поста председателя проектной группы Harmony. После прекращения участия IBM активность проекта значительно снизилась. 29 октября 2011 года Тим Эллисон, руководитель проекта, инициировал опрос на рассылке разработчиков Harmony о целесообразности закрытия проекта. Результаты опроса 3 ноября показали 20 голосов за закрытие и 2 против. Один из директоров, Ларри Розен, проголосовал против, основываясь на сроках, а не на обоснованности предложения; в остальном решение было единогласным. И, казалось, их усилия увенчались успехом.

Последнее состояние разработки

Apache Harmony был принят в качестве официального проекта Apache 29 октября 2006 года.

Обеспечение библиотекой класса

Ожидаемые пожертвования от компаний-разработчиков программного обеспечения были получены. Apache Harmony теперь содержит рабочий код, включая Swing, AWT и Java 2D, которые были предоставлены Intel. По состоянию на 2011 год проект Harmony достиг 99% завершенности для JDK 5.0 и 97% для Java SE 6. Также существует ветвь для Harmony v6.0, находящаяся в разработке для Java SE 6.0. Разработчики Apache Harmony интегрируют несколько существующих, проверенных в реальных условиях проектов с открытым исходным кодом, чтобы достичь своей цели (не изобретать велосипед). Многие из этих проектов зрелые и хорошо известны, а другие части библиотеки пришлось разрабатывать с нуля. Ниже представлен список существующих компонентов с открытым исходным кодом, используемых в проекте Apache Harmony; некоторые из них использовались еще до начала проекта.

Описание компонента:

ICU – Зрелые библиотеки C/C++ и Java для поддержки Unicode, интернационализации и глобализации программного обеспечения.

Apache Xalan – Процессор таблиц стилей XSLT для Java и C++ с реализацией языка XPath.

Apache Xerces – Библиотека для разбора XML для Java, C++ и Perl.

Apache Portable Runtime – Библиотека кроссплатформенной абстракции, обеспечивающая платформенную независимость.

Apache CXF – Надежный, высокопроизводительный веб-фреймворк для работы с протоколами, такими как SOAP, XML/HTTP, RESTful HTTP и CORBA.

BCEL – Библиотеки для разложения, модификации и рекомпозиции двоичных классов Java, то есть байт-кода.

MX4J – Инструменты Java Management Extensions (JMX) для управления и мониторинга приложений, системных объектов, устройств и сервисно-ориентированных сетей.

VM Magic – Набор расширений для языка Java, облегчающих системное программирование на Java путем добавления операций прямого доступа к памяти и т.д.

Bouncy Castle – Коллекция легковесных криптографических библиотек для Java и C#.

ANTLR – Языковой инструмент, предоставляющий основу для построения распознавателей, интерпретаторов, компиляторов и переводчиков из грамматических описаний, содержащих действия на многих целевых языках.

Документация

Гармония документирована в меньшей степени, чем альтернативные свободные реализации Java. Например, в GNU Classpath каждый метод центрального класса CORBA (ORB) имеет поясняющий комментарий как в стандартном абстрактном классе API, так и в реализации. В проекте Yoko, который использовался Harmony, большинство методов как в стандартном объявлении, так и в классе реализации оставались без документации на конец октября 2006 года. Кроме того, GNU Classpath поддерживал как устаревшие, так и новые функции CORBA (аналогично реализации Sun). В отличие от этого, Harmony оставила центральный метод устаревшего стандарта (ORB.connect(Object)) полностью нереализованным.

Инструменты

Для полной реализации платформы Java также необходим компилятор, преобразующий исходный код Java в байт-код, программа для управления JAR-файлами, отладчик, средство просмотра апплетов и плагин для веб-браузера, и это лишь некоторые из них. Harmony включает в себя компилятор, appletviewer, jarsigner, javah, javap, keytool, policytool и unpack200.