Какие JDK доступны и чем они отличаются?

Примерно через 10 лет после появления Java в 1996 году Sun Microsystems выпустила OpenJDK в 2007 году, бесплатную реализацию Java SE с открытым исходным кодом. Многие компании начали присоединяться в качестве участников. Первой была Red Hat, которая до сих пор входит в тройку авторов. Это партнерство продолжалось даже после того, как Oracle приобрела Sun в 2009 году.

Несмотря на то, что были доступны другие сборки JDK, большинство из нас даже не подозревало о них. Но все изменилось с новой моделью лицензирования Oracle для Java, которая вступила в силу в январе 2019 года.

Oracle Java SE теперь ограничивается личной или некоммерческой разработкой, тестированием, прототипированием, демонстрацией и т. Д.
Для любого другого сценария требуется ежемесячная подписка.

Но не волнуйтесь, Java по-прежнему и всегда будет бесплатной, нам просто нужно выбрать другую сборку JDK.

Эталонная реализация (RI)

Использование OpenJDK вместо Oracle Java SE не означает, что мы должны отказываться от каких-либо функций.

Начиная с OpenJDK 7, это официальная эталонная реализация Java SE. А начиная с Java 10 OpenJDK отвечает даже за проект JDK, выпуская новую версию каждые шесть месяцев.

На первый взгляд, различные параметры JDK идентичны, потому что они должны соответствовать спецификации Java. Java Compatibility Kit (JCK) обеспечивает это, иначе вы не можете назвать свою сборку совместимой с JavaSE.

Наиболее существенные различия связаны с инструментами поддержки, настройками по умолчанию, предлагаемой поддержкой и исправлениями безопасности.

Бесплатные пакеты JDK с открытым исходным кодом

OpenJDK

Бесплатная реализация Java SE с открытым исходным кодом, инициированная Sun. Все остальные JDK основаны на этой кодовой базе. Сборки поддерживаются и предоставляются Oracle.

Начиная с Java 11, OpenJDK также включает многие из предыдущих коммерческих функций, такие как Java Flight Recorder и Java Mission Control, что делает эту сборку практически идентичной сборкам Oracle JDK.

Цикл выпуска составляет 6 месяцев, чтобы обеспечить более мелкие, более управляемые улучшения, которые легче внедрить. Но это также означает сокращение срока службы поддержки, и на их домашней странице доступны только новейшие сборки. Но для многих менеджеров пакетов доступно несколько версий.

Домашняя страница проекта
Загрузки

AdoptOpenJDK

Несмотря на то, что исходный код OpenJDK был доступен, не хватало легкодоступных и воспроизводимых сборок для различных платформ. Чтобы устранить эту неприятность, в 2017 году сообщество членов группы пользователей Java, разработчиков и поставщиков запустило AdoptOpenJDK.net.

Он предоставит сборку «как есть» из исходного кода OpenJDK. AdoptOpenJDK не является организацией, предоставляющей и поддерживающей собственный форк или версию.

Одно большое различие между OpenJDK и OracleJDK - это доступность различных связанных JVM: доступны OpenJDK HotSpot и Eclipse OpenJ9.

Домашняя страница проекта

Amazon Coretto

отец Java, Джеймс Гослинг, объявил об Amazon Coretto в своем программном докладе на Devoxx Belgium 2018. Amazon запускает свои сервисы на этой сборке и решила открыть исходный код своих усилий и сделать его доступным за пределами AWS.

Это бесплатный, многоплатформенный, готовый к производству дистрибутив OpenJDK. Цикл выпуска - не реже ежеквартально, включая бесплатную долгосрочную поддержку. Все исправления будут переданы в OpenJDK, поэтому вся экосистема получит от них пользу.

Доступны версии Java 8 и 11 с LTS до 2023 и 2024 годов.

Домашняя страница проекта
Знакомство с Amazon Coretto (блог AWS)

GraalVM

GraalVM - это универсальная виртуальная машина, способная запускать несколько языков программирования, таких как JavaScript, Python, Ruby, R, C, C ++ и, конечно же, языки на основе JVM в общей среде выполнения. Его можно использовать как JDK или в контексте другого JDK.

Доступны версии Java LTS 8 и 11.

Домашняя страница проекта
10 лучших вещей, которые можно сделать с GraalVM (Средний)

Либерика

Еще один крупный разработчик Java - компания Bellsoft, о которой я, откровенно говоря, никогда раньше не слышал. Их JDK доступен для нескольких платформ, включая встроенные архитектуры, такие как системы на базе ARM. Дополнительно все сборки содержат LibericaFX, вариант OpenFX / JavaFX.

Доступны версии Java LTS 8 и 11, а также текущая версия 13. Для встроенных платформ также доступны версии 8 и 11 LTS.

Домашняя страница проекта

Собственные / коммерческие реализации

SapMachine

Поддерживается SAP SE, немецкой транснациональной корпорацией по разработке программного обеспечения. Предназначен для предоставления дружественной вилки, версии, поддерживаемой SAP, для своих клиентов и партнеров.

Новые функции будут добавлены в JDK. Если он не будет принят, он все равно может быть включен в SapMachine и даже перенесен в более ранние версии.

Доступна Java LTS версии 11, поддержка до 2022/09. Доступна только последняя версия, отличная от LTS (на данный момент Java 14), поддерживается до 2020/09. Более старые версии доступны в архивах.

Домашняя страница проекта
Различия между SapMachine и OpenJDK (Github)

Зулусский

Zulu - это фирменная версия OpenJDK, но ее можно использовать бесплатно без каких-либо ограничений. Дополнительную платную поддержку предлагает сопровождающий Azul Systems.

Доступны версии Java LTS 7, 8 и 11, а также две последние версии, отличные от LTS 13 и 14.

Домашняя страница проекта / Загрузки
Дорожная карта

Oracle JDK

Оригинальная коммерческая версия Java, которую нельзя бесплатно использовать в производственной среде. Чтобы оправдать затраты, доступны дополнительные инструменты и платная поддержка.

Доступны версии Java LTS 8 и 11. Только последние версии, отличные от LTS.

Домашняя страница проекта
Загрузки

Что выбрать

Иметь возможность выбора - это здорово. Но с точки зрения высокого уровня не имеет большого значения, какой JDK мы выберем. Все они основаны на исходном исходном коде OpenJDK и передали JCK для совместимости со спецификацией JavaSE.

Реальные вопросы, которые мы должны задать, основаны на требованиях нашего проекта:

  • Это бесплатно или мне нужно покупать лицензию?
  • Как долго доступны сборки?
  • Имеются ли исправления безопасности, или нам нужно перейти на следующую версию?
  • Каковы сроки службы поддержки? Доступны ли LTS-версии?
  • Нужны ли нам особые оптимизации для нашего приложения?
  • Какая JVM мне нужна или нужна?
  • Можем ли мы получить платную поддержку при необходимости?

В большинстве случаев вы не ошибетесь, используя сборку OpenJDK от Oracle или AdoptOpenJDK. Мы уже довольно давно пользуемся одним или другим без каких-либо проблем.

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

Работа с несколькими JDK

Такое разнообразие вариантов приводит к другому вопросу: как я могу использовать несколько версий одновременно?

К счастью, доступно несколько инструментов для упрощения переключения между разными JDK.

jEnv

Инструмент командной строки, доступный для Linux и macOS, помогающий управлять JAVA_HOME на глобальном и локальном уровнях.

# ADD JDK
$ jenv add <path to JDK>
# LIST VERSIONS
$ jenv versions
# SET DEFAULT
$ jenv global <version>
# SET LOCAL
$ jenv local <version>
# SET CURRENT SHELL
$ jenv shell <version>

Домашняя страница проекта

SDKMAN

Software Development Kit Manager - это инструмент для управления несколькими SDK в большинстве систем на базе Unix, и он не ограничивается только JDK.

# ADD JDK
$ sdk install java <version>
# LIST VERSIONS
$ sdk list java
# SET DEFAULT
$ sdk default java <version>
# SET LOCAL
# There doesn't seem to be a way to set locally
# SET CURRENT SHELL
$ sdk use <version>

Домашняя страница проекта

Джабба

Менеджер версий, вдохновленный Диспетчером версий узлов.

# LIST INSTALLABLE VERSIONS
$ jabba ls-remote
# ADD JDK
$ jabba install <version>
# LIST VERSIONS
$ jabba ls
# SET DEFAULT
$ jabba alias default <version>
# SET LOCAL
$echo <version> .jabbarc
# ACTIVATE LOCAL VERSION
$ jabba use

Домашняя страница проекта

Обновите альтернативы Java

Команда update-java-alternatives помогает переключаться между установленными JDK.

# LIST VERSIONS
update-java-alternatives --list
# SET VERSION
update-java-alternatives --set <path to JDK>

Справочная страница Ubuntu

Ресурсы

Бесплатные пакеты JDK с открытым исходным кодом

Собственные и коммерческие JDK

Инструменты управления JDK