Открыть сервис

OpenJDK

OpenJDK (Open Java Development Kit) — это свободная и открытая реализация платформы Java, Standard Edition (Java SE), а также эталонная реализация для спецификаций Java, разрабатываемая сообществом под эгидой компании Oracle (ранее Sun Microsystems) и проекта OpenJDK. OpenJDK является основной и наиболее широко используемой открытой средой разработки и выполнения Java-приложений, лежащей в основе множества дистрибутивов Java, включая Oracle JDK, Adoptium (Eclipse Temurin), Amazon Corretto, Azul Zulu, Red Hat OpenJDK и другие.

История

Предпосылки и создание

История OpenJDK началась в 2006 году, когда компания Sun Microsystems объявила о намерении выпустить основную часть платформы Java под свободной лицензией GNU General Public License (GPL) версии 2. До этого момента Java была проприетарной технологией, что вызывало критику со стороны сообщества разработчиков открытого ПО. 8 мая 2007 года Sun официально опубликовала исходные коды Java Standard Edition под лицензией GPLv2 с исключением для связывания (Classpath Exception), что позволило использовать библиотеки Java в коммерческих проектах без ограничений, налагаемых GPL. Проект получил название OpenJDK.

Развитие под управлением Sun Microsystems

Первоначально OpenJDK включал в себя компилятор javac, виртуальную машину HotSpot, основные библиотеки классов и инструменты. Однако некоторые компоненты, такие как криптографические библиотеки, графическая библиотека (частично) и кодек для работы со звуком, оставались проприетарными. В течение следующих лет Sun постепенно заменяла эти компоненты на свободные аналоги. Ключевым моментом стало создание проекта IcedTea, который позволил собрать полностью свободную версию OpenJDK, используя альтернативные реализации недостающих частей.

Переход к Oracle

В 2010 году компания Oracle завершила приобретение Sun Microsystems, став основным спонсором и модератором проекта OpenJDK. Несмотря на опасения сообщества, Oracle продолжила развитие OpenJDK как основного референсного проекта для Java. В 2017 году Oracle объявила о переходе на новый шестимесячный цикл выпуска версий Java, начиная с Java 9. Это привело к тому, что OpenJDK стал выпускаться чаще, а Oracle JDK, ранее отличавшийся от OpenJDK дополнительными проприетарными функциями (например, коммерческими инструментами мониторинга), стал практически идентичным OpenJDK, за исключением лицензионных условий. С Java 11 Oracle JDK перешёл на платную модель для коммерческого использования, в то время как OpenJDK остаётся полностью свободным.

Архитектура и компоненты

OpenJDK представляет собой набор инструментов и библиотек, необходимых для разработки, компиляции и выполнения Java-программ. Основные компоненты включают:

Виртуальная машина Java (JVM)

Сердцем OpenJDK является виртуальная машина Java (JVM), реализованная в проекте HotSpot. HotSpot обеспечивает выполнение байт-кода Java, управление памятью (сборка мусора), динамическую компиляцию (JIT-компиляцию) и многопоточность. С Java 9 была добавлена поддержка модульной системы (Project Jigsaw), а с Java 12 — экспериментальная функция компактных строк и улучшенного сборщика мусора Shenandoah.

Компилятор Java (javac)

Компилятор javac преобразует исходный код Java (.java) в байт-код (.class), который затем выполняется JVM. Он поддерживает все версии языка Java, начиная с Java 1.0, и является эталонной реализацией компилятора для спецификаций Java.

Стандартные библиотеки классов (Java Class Library)

Библиотеки классов OpenJDK включают в себя все пакеты, определённые в спецификации Java SE: java.lang, java.util, java.io, java.net, java.sql, javax.swing и многие другие. Они предоставляют готовые реализации для работы с коллекциями, вводом-выводом, сетевыми протоколами, графическим интерфейсом, базами данных и т.д.

Инструменты разработчика

OpenJDK включает в себя ряд утилит командной строки: javadoc (генератор документации), jar (архиватор), jlink (сборщик пользовательских образов JRE), jpackage (инструмент для создания установочных пакетов), jconsole (графический монитор JVM), jstack (дамп потоков), jmap (дамп памяти) и другие.

Версии и цикл выпуска

До Java 9

До 2017 года новые версии Java (и, соответственно, OpenJDK) выходили примерно раз в 2–3 года. Ключевыми вехами стали Java 5 (2004, добавление дженериков), Java 8 (2014, лямбда-выражения, Stream API), которая до сих пор широко используется в устаревших системах.

Современный цикл (Java 9+)

Начиная с Java 9, Oracle перешла на строгий шестимесячный цикл выпуска (Feature Releases). Каждая такая версия содержит новые функции, улучшения и удаление устаревших API. Раз в три года (каждый шестой релиз) выпускается версия с долгосрочной поддержкой (LTS — Long-Term Support). Наиболее популярными LTS-версиями являются Java 11, Java 17 и Java 21. OpenJDK для этих версий получает обновления безопасности и исправления ошибок в течение нескольких лет от сообщества и вендоров.

Дистрибутивы OpenJDK

Поскольку OpenJDK является эталонной реализацией, любой вендор может взять его исходный код, собрать и распространять под своим брендом. Наиболее известные дистрибутивы:

  • Oracle OpenJDK — официальные сборки от Oracle, распространяемые под лицензией GPLv2. С Java 11 они практически идентичны платному Oracle JDK, но без коммерческой поддержки.
  • Eclipse Temurin (ранее AdoptOpenJDK) — проект под управлением Eclipse Foundation, предоставляющий предварительно собранные бинарные файлы OpenJDK для различных платформ, включая Linux, Windows, macOS, AIX и Solaris. Temurin является сертифицированной реализацией Java SE.
  • Amazon Corretto — дистрибутив от Amazon, оптимизированный для работы в облачной среде AWS. Включает дополнительные исправления и патчи для повышения производительности.
  • Azul Zulu — дистрибутив от компании Azul Systems, известный своей поддержкой большого количества платформ (включая встраиваемые системы) и наличием версий с долгосрочной поддержкой.
  • Red Hat OpenJDK — дистрибутив, входящий в состав операционных систем семейства Red Hat Enterprise Linux и CentOS. Обеспечивает интеграцию с системными библиотеками Linux.
  • Microsoft Build of OpenJDK — дистрибутив, выпущенный Microsoft в 2021 году, ориентированный на разработку для Azure и облачных решений.

Лицензирование

OpenJDK распространяется под лицензией GNU General Public License версии 2 с исключением Classpath Exception. Это означает, что:

  1. Исходный код самого OpenJDK является свободным и может быть изменён и распространён при условии сохранения лицензии GPL.
  2. Исключение Classpath Exception разрешает связывать код OpenJDK с любым другим кодом (в том числе проприетарным) без необходимости раскрывать исходный код этого другого кода. Это делает OpenJDK пригодным для коммерческой разработки, где код приложения может оставаться закрытым.

Значение и применение

OpenJDK является фундаментом современной Java-экосистемы. Его значение проявляется в нескольких аспектах:

  • Эталонная реализация: OpenJDK служит официальной реализацией спецификаций Java Community Process (JCP). Любая новая функция языка или библиотеки сначала появляется в OpenJDK.
  • Безопасность и прозрачность: Открытый исходный код позволяет любому разработчику, аудитору или исследователю проверять код на наличие уязвимостей, что повышает общую безопасность платформы.
  • Кроссплатформенность: OpenJDK поддерживает десятки операционных систем и архитектур процессоров (x86, ARM, RISC-V, PowerPC, SPARC), что делает Java одной из самых переносимых платформ.
  • Экономическая эффективность: Для большинства проектов использование OpenJDK не требует лицензионных отчислений, что снижает затраты на разработку и эксплуатацию.

OpenJDK используется повсеместно: от серверных приложений и микросервисов (в том числе в России — в банковском секторе, государственных информационных системах, телекоммуникациях) до мобильных приложений (Android использует модифицированную версию OpenJDK) и встраиваемых устройств.

Критика и ограничения

Несмотря на широкое распространение, OpenJDK имеет ряд критических замечаний:

  • Сложность сборки: Сборка OpenJDK из исходных кодов требует значительных ресурсов и времени, а также зависимостей (например, предыдущей версии JDK). Для неподготовленного разработчика это может быть сложной задачей.
  • Размер дистрибутива: Полный дистрибутив OpenJDK (включая библиотеки Swing, JavaFX и т.д.) занимает сотни мегабайт, что может быть избыточным для микросервисных или контейнерных сред. Для решения этой проблемы используется инструмент jlink, позволяющий создавать минимальные образы JRE.
  • Отсутствие некоторых проприетарных функций: В отличие от платного Oracle JDK, OpenJDK не включает некоторые коммерческие инструменты (например, Java Mission Control в некоторых версиях, Flight Recorder до Java 11), хотя многие из них были открыты и включены в основную ветку.
  • Скорость внедрения новых функций: Некоторые вендоры (например, Red Hat) могут задерживать выпуск сборок OpenJDK для своих дистрибутивов, что приводит к отставанию от официального графика.

Источники

  • Официальный сайт проекта OpenJDK (openjdk.org)
  • Спецификация Java SE (Java Community Process)
  • Документация Oracle по OpenJDK
  • Статья «OpenJDK» в Википедии (русскоязычная версия)
  • Материалы Eclipse Foundation по проекту Adoptium/Temurin

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →