Apache Harmony

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:16, 27 декабря 2016.
Apache Harmony
Harmony-logo.png
Разработчики: Apache Software Foundation
Постоянный выпуск: 6.0 M3 / 2 сентября 2010
Состояние разработки: Retired[1]
Написана на: C++ и Java
Операционная система: Windows и Linux
Тип ПО: Java Virtual Machine
Лицензия: Apache License 2.0
Веб-сайт http://harmony.apache.org

Apache Harmony — модульная cреда выполнения Java с библиотеками классов и связанными инструментами, разработанная Apache Software Foundation. Apache Harmony поддерживет широкий спектр различных платформ. Основным критерием того, поддерживается ли определенная платформа или нет, является участие людей в проведении тестов на регулярной основе, в создании отчетов о состоянии сборки, нахождении и исправлении ошибок для данной платформы.

В начале мая 2005 и 25 октября 2006 было объявлено, что совет директоров принял решение, сделать Apache Harmony проектом верхнего уровня. Apache Harmony достиг (на февраль 2011 года) 99% совместимости с J2SE 5.0 и 97% c Java SE 6.

29 октября 2011 года руководитель проекта Тим Эллисон запустил голосование о ликвидации Apache Harmony. Проект был закрыт с результатом голосования 20 против 2.


История

Основание

Проект Harmony первоначально был задуман как попытка объединить всех разработчиков свободной платформы Java. Многие разработчики ожидали, что этот проект будет выгодно отличаться от GNU, Apache, а также других сообществ. Разработчики GNU были приглашены и участвовали во время начального и предварительного планирования.

Несовместимость с GNU Classpath

Несмотря на плодотвоное сотрудничество в ходе предварительного планирования, было решено не использовать код GNU Classpath в Harmony, а также воспользоваться несовместимой лицензией, что привело к проблемам в сотрудничестве с имеющимися свободными Java проектами.[2] Различные недоразумения в начале разрабтки проекта и то, что крупнейшие компании вроде IBM предлагали обеспечить большую часть исходного кода, создали некоторый беспорядок в свободном сообществе Java на предмет реальных целей проекта.

Главной причиной, препятствующей обмену кода между проектами GNU Classpath и Apache Harmony, являются различия в лицензиях General Public License и, соответственно, Apache License.

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

Виртуальная машина Dalvik, применяемая на платформе Google Android до версии 4.4, использует подмножество Harmony для ядра своей библиотеки классов. Однако, Dalvik не совпадает с профилями библиотек классов Java SE, либо Java ME (например, J2ME классы, AWT и Swing не поддерживаются). В декабре 2015 Google объявили, что следующая версия Android будет использовать библиотеки OpenJDK. [3]

Отделение от IBM

11 октября 2010 корпорация IBM, являющаяся несомненно крупнейшим участником проекта, объявила о присоединении к Oracle на проекте OracleJDK, тем самым переключив усилия с Apache Harmony на Oracle. Боб Сьютор, глава отделения Linux и open source в IBM, написал в своем блоге: "IBM будет смещать усилия разработки с Apache Project Harmony в сторону OpenJDK".

В марте 2011, Тим Эллисон объявил о своем уходе в отставку с поста менеджера проекта, что вызвало вопросы относительно будущего у Apache Harmony.

Завершение проекта

29 октября 2011 руководитель проекта Тим Эллисон запустил голосование о ликвидации проекта. На 3 ноября, результат голосования был 20 к 2 в пользу закрытия Harmony. 16 ноября 2011 совет директоров Apache Software Foundation на основании голования принял решение о закрытии проекта. Apache Harmony был ликвидирован 16 ноября 2011.

Команда разработчиков

В начале разработки Apache Harmony получила большую часть кода от нескольких компаний. Дискуссии разработчиков проводились в формате открытых рассылок. Позднее, менторы Apache Software foundation приложили немало усилий, чтобы развить процесс разработки в соответствии с тем, "как это делают в Apache". Похоже, их услилия были оправданы.

Статус разработки

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

Архитектура

Виртуальная машина Dynamic Runtime Layer состоит из следующих компонентов:

  • 1. Ядро VM: с его субкомпонентами концентрирует большинство функций управления JVM.
  • 2. The porting layer: компонент скрывает специфичные для платформы детали от других компонентов VM позади одного интерфейса. Основан на Apache Portable Runtime.
  • 3. Garbage collector: выделяет объекты Java в памяти "кучи" и удаляет недостижимые объекты, используя различные алгоритмы
  • 4. Execution Manager: выбирает механизм выполнения для компиляции метода, управляет профилями и динамической логикой перекомпиляции.
  • 5. Библиотека классов: стандартная библиотека Java.
  • 6. The thread manager: управляет организацией обработки потоков в операционной системы.
  • 7. The execution engine: состоит из следующего:
    • JIT компилятор для компиляции и выполнения кода метода.
    • Интерпретатор для более простой отладки.

Поддержка фрхитектур и операционных систем

Проект обеспечивает переносимую реализацию, что упрощает разработку на множестве платформ и операционных систем. Основной фокус сделан на сделан на операционных системах Windows и Linux на архитектурах x86 и x86-64.

Windows 2000 Windows XP, Server 2003, Vista Linux RHEL, SLES, Debian, Gentoo, Fedora FreeBSD AIX Mac OS X
IA-32 (Pentium III or better) Нет Да Да Нет n/a n/a
x86-64 (Intel 64, AMD64) n/a Да Да n/a n/a n/a
Itanium (IA64, IPF) n/a Нет Да n/a n/a n/a
PowerPC 32-bit n/a n/a n/a n/a n/a n/a
PowerPC 64-bit n/a n/a Нет n/a Нет n/a
zSeries 31-bit n/a n/a Нет n/a n/a n/a

Покрытие библиотеки классов

Ожидаемые пожертвования от компаний-разработчиков программного обеспечения были получены. Harmony Apache теперь содержит рабочий код, включая код Swing, AWT и Java 2D, которые были внесены Intel.

Проект Harmony в настоящее время достигает (по состоянию на февраль 2011) 99%-полноты для JDK 5.0 и 97% для Java SE 6.

Прогресс проекта Harmony Apache может быть прослежен на фоне J2SE 1.4 и Java SE 5.0. [4] кроме того, есть ответвление для Harmony v6.0 в разработке для Java SE 6.0.

Разработчики Harmony Apache интегрируют некоторые существующие, протестированные проекты с открытым исходным кодом, для достижения своих целей (не изобретая заного колесо). Многие из этих проектов - зрелые и давно известные, в то время как и другие части библиотеки необходимо писать с нуля.

Это - список существующих компонентов с открытым исходным кодом, которые используются в проекте 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, CORBA
BCEL Библиотеки, для того, чтобы раскладывать, изменять и реконструировать двоичные классы Java, т.е., байт-код
MX4J Инструменты Java Management Extensions (JMX), чтобы управлять и контролировать приложения, системные объекты, устройства и сети для обслуживания широкого круга запросов
VM Magic Набор расширений языка Java, чтобы упростить системное программирование в Java, добавляя операции непосредственной памяти, и т.д.
Bouncy Castle Набор библиотек легкой криптографии для Java и C#
ANTLR Языковой инструмент, служит основой, чтобы создать устройства распознавания, интерпретаторы, компиляторы и трансляторы из грамматических описаний, содержащих действия на разных языках.

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

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

Инструменты

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

Поддержка виртуальных машин

У Harmony в настоящее время есть семь реализаций виртуальной машины, которые выполняют библиотеку классов Harmony, все из которых были пожертвованиями внешними группами:

  • JC Harmony Edition VM, "JCHEVM," на основе интерпретатора JCVM, внесенного автором, Archie Cobbs.
  • BootJVM - простая виртуальная машина начальной загрузки, внесенная Daniel Lydick.
  • SableVM - усовершенствованный, переносимый интерпретатор, внесенный авторами от Sable Research Group; и Dynamic Runtime Layer Virtual Machine.
  • DRLVM - JIT-компилятор, внесенный Intel.
  • BEA объявили о доступности ознакомительной версии JRockit VM запускающую библиотеку классов Apache Harmony. [6]
  • JikesRVM - метакруговая JVM с открытым исходным кодом, которая используют библиотеку классов Apache Harmony. [7]
  • Ja.NET SE - проект с открытым исходным кодом, обеспечивающий Java 5 JDK (библиотеки классов, инструменты, и т.д.), которые работают на .NET Framework CLR. Ja.NET SE основывается на библиотеках классов Apache Harmony.

В конце ноября 2006 поддержка языка, предоставленная этими виртуальными машинами была все еще неполной, и инструкции сборки рекомендовали использовать проприетарный IBM J9 вместо того, чтобы выполнить набор тестов библиотеки классов. Однако это не необходимо больше (по состоянию на июль 2007).

Установка Apache Harmony

Проект Apache Harmony был закрыт 16 ноября 2011 года и с тех пор больше не обновлялся.

Далее приведены простые инструкции по установке Apache Harmony для запуска своих Java приложений. Эти шаги не требуют инструментов разработчика или компилирования исходного кода.

Необходимые зависимости для каждой платформы приведены ниже.

Скачайте Apache Harmony Snapshot

Для начала, скачайте бинарный дистрибутив, подходящий под вашу платформу. Следуя инструкциям на странице загрузки, загрузите программное обеспечение.

В настоящее время у проекта Apache Harmony нет формальных выпусков его программного обеспечения. Вместо этого проект предлагает предварительно созданные снимки, которые, как ожидается, будут работать хорошо на предлагаемых платформах.

Разархивируйте бинарный дистрибутив

Как только Вы скачали подходящий бинарник, Вы должны распаковать его на своей машине. Распаковка произойдет в jre каталог, далее именуемый как корневой каталог.

Пользователи Linux

Используйте следующую команду:

$ tar -tzf latest-harmony-jre-linux.tar.gz

Эта команда распакует дерево каталогов JRE в текущую директорию.

Пользователи Windows

Воспользуйтесь любым доступным архиватором.

Настройка среды

Чтобы установить переменные среды JAVA_HOME и PATH, воспользуйтесь необходимыми коммандами для Вашей операционной системы.

Пользователям Linux Следующие комманды работают в оболочке Bash:

$ cd jre
$ export JAVA_HOME=`pwd`
$ cd bin
$ export PATH=`pwd`:$PATH

Предполагается, что текущая дирректория соответствует родительской дирректории Harmony JRE.
Cимвол "`" - кавычка, а не апостроф.


Пользователям Windows Следующий пример предполагает, что Вы распаковали zip файл в дирректорию C:\.

C:\> set JAVA_HOME=C:\jre
C:\> set PATH=C:\jre\bin;%PATH%

Использование Apache Harmony

После выполнения вышеупомянутых шагов, вы должны быть готовы использовать Apache Harmony. Попробуйте запустить свое Java приложение:

$ java Foo
$ java -jar myjar.jar

В дополнение к стандартным опциям Вы можете использовать пользовательские параметры командной строки, чтобы отрегулировать работу VM.

Видео

Параметры коммандной строки Harmony JRE

Параметры командной строки могут быть стандартными или нестандартными. В то время как первый набор допустим для любой JVM, второй набор опций определяется для конкретной VM. Здесь предоставлена информация о параметрах командной строки, поддерживаемых виртуальной машиной DRL (DRLVM), включая составляющие специфичные опции и свойства, которые могут использоваться во время разработки кода и оценки проблем.

Стандартные возможости JRE

Чтобы получить список стандартных возможностй, запустите DRLVM с опцией -help:

java -help

Нестандартные возможости JRE

Нестандартные возможности Harmony можно разделить на следующие группы:

  • "-X" обычно используемые нестандартные возможности. Чтобы вывести полный список возможностей JRE, поддерживаемых DRLVM запустите VM с параметром -X:
java -X
  • "-XX" компонентно-ориентированные возможности.

Статус приложений

Harmony может выполнять нетривиальные JAVA-приложения. Поддерживаемые приложения включают:

  • Eclipse: 99.3% 36000 тестов ссылочной реализации (RI) пройдено на Harmony DRLVM + библиотека классов. [8]
  • Apache Tomcat: 100% из RI тестов пройдены.[9]
  • JUnit: 100% из RI тестов пройдены. [10]
  • Apache Ant: 97% из RI тестов пройдены.[10]
  • Другие приложения, такие как: Apache Derby, Apache Axis, Log4j, Apache Velocity, Apache Cocoon, jEdit, и Apache Commons прошли с большим успехом.

Однако, незавершенная библиотека Harmony не позволяет запускать на ней некоторые приложения:

  • ArgoUML: т.к. требуется реализация апплета Java, которая была все еще недоступна в Harmony.
  • Apache Geronimo запускается на Apache Harmony с некоторыми проблемами и обходными решениями. [10]
  • Vuze, ранее Azureus, из-за нереализованных классов безопасности.

Источники

  1. H-Online [Электронный ресурс]: The end of (Apache) Harmony / Дата обращения: 10.11.2015. — Режим доступа: http://www.h-online.com/open/news/item/The-end-of-Apache-Harmony-1371819.html
  2. LWN [Электронный ресурс]: A proposal for a free Java implementation / Дата обращения: 10.11.2016. — Режим доступа: http://lwn.net/Articles/135111/
  3. Arstechnica [Электронный ресурс]: Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL / Дата обращения: 10.11.2016. — Режим доступа: http://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl
  4. Apache [Электронный ресурс]: Results of comparison between JDK_5.0 and Harmony_5.0 / Дата обращения: 10.11.2016. — Режим доступа: http://people.apache.org/~chunrong/latest-harmony-japi.html
  5. Apache [Электронный ресурс]: Yoko documentation / Дата обращения: 10.11.2016. — Режим доступа: http://svn.apache.org/repos/asf/incubator/yoko/trunk/core/src/main/java/org/apache/yoko/orb/OBCORBA/ORB_impl.java
  6. Apache [Электронный ресурс]: JRockit H27.2.1 for Harmony Class Library released now / Дата обращения: 10.11.2016. — Режим доступа: http://mail-archives.apache.org/mod_mbox/harmony-dev/200701.mbox/%3C1D7F0297-B0C5-4B05-AD27-B457B309C425@pobox.com%3E
  7. Apache [Электронный ресурс]: Announcing Jikes RVM 3.0 + Apache Harmony! / Дата обращения: 10.11.2016. — Режим доступа: http://mail-archives.apache.org/mod_mbox/harmony-dev/200808.mbox/%3cb1e4cffb0808070820u2554f4faw4d98aa5059b5b425@mail.gmail.com%3e
  8. Apache [Электронный ресурс]: Eclipse unit tests pass on DRLVM / Дата обращения: 10.11.2016. — Режим доступа: http://wiki.apache.org/harmony/Eclipse_Unit_Tests_Pass_on_DRLVM#PassRate_2007
  9. Apache [Электронный ресурс]: Apache Tomcat RI tests / Дата обращения: 10.11.2016. — Режим доступа: http://wiki.apache.org/harmony/Apache_Tomcat%7Ctitle=Apache_Tomcat%7Cpublisher=apache.org
  10. 10,0 10,1 10,2 Apache [Электронный ресурс]: JUnit RI tests / Дата обращения: 10.11.2016. — Режим доступа: http://wiki.apache.org/harmony/JUnit%7Ctitle=JUnit%7Cpublisher=apache.org

Ссылки