Разница между OpenJDK и Adoptium / AdoptOpenJDK

183

В связи с недавним обновлением политики Oracle Java SE Support Roadmap (в частности, окончание бесплатных релизов Oracle после марта 2019 года), я искал альтернативы Oracle Java. Я обнаружил, что OpenJDK является альтернативой с открытым исходным кодом. И я нашел AdoptOpenJDK , теперь известный как Adoptium, который представляет собой готовый двоичный файл . Это загадки.

В чем разница между OpenJDK и Adoptium / AdoptOpenJDK?

Михаил Холодков
источник
Обновление: AdoptOpenJDK изменил свое название на Adoptium , как часть его перехода к Eclipse Foundation .
Василий Бурк

Ответы:

272

Коротко:

  • OpenJDK имеет несколько значений и может относиться к:
    • бесплатная и открытая реализация платформы Java, Standard Edition (Java SE)
    • репозиторий с открытым исходным кодом - исходный код Java или проект OpenJDK
    • готовые двоичные файлы OpenJDK, поддерживаемые Oracle
    • готовые двоичные файлы OpenJDK, поддерживаемые сообществом OpenJDK
  • AdoptOpenJDK - готовые двоичные файлы OpenJDK, поддерживаемые сообществом (с открытым исходным кодом, лицензируются )

Объяснение:

Prebuilt OpenJDK (или дистрибутив) - двоичные файлы, созданные из http://hg.openjdk.java.net/ , предоставляемые в виде архива или установщика, предлагаемые для различных платформ, с возможным контрактом на поддержку.

OpenJDK, репозиторий исходного кода (также называемый проектом OpenJDK ) - это репозиторий с открытым исходным кодом на основе Mercurial , размещенный по адресу http://hg.openjdk.java.net . Исходный код Java. Подавляющее большинство функций Java (от ВМ и основных библиотек до компилятора) основаны исключительно на этом исходном репозитории. У Oracle есть альтернативная ветвь этого.

OpenJDK, дистрибутив (см. Список провайдеров ниже) - бесплатный, как в пиве, так и бесплатный, как в речи , но вы не можете позвонить в Oracle, если у вас есть проблемы с ним. Контракта на поддержку нет. Кроме того, Oracle будет выпускать обновления для любой версии OpenJDK (дистрибутива), только если этот выпуск является самым последним выпуском Java, включая выпуски LTS (долгосрочная поддержка). В тот день, когда Oracle выпустит OpenJDK (дистрибутив) версии 12.0, даже если существует проблема безопасности с OpenJDK (дистрибутив) версии 11.0, Oracle не выпустит обновление для 11.0. Поддерживается исключительно Oracle.

Некоторые проекты OpenJDK, такие как OpenJDK 8 и OpenJDK 11 , поддерживаются сообществом OpenJDK и предоставляют версии для некоторых версий OpenJDK для некоторых платформ. Члены сообщества взяли на себя ответственность за выпуск исправлений для уязвимостей в этих версиях OpenJDK.

AdoptOpenJDK, дистрибутив очень похож на дистрибутив Oracle OpenJDK (в том смысле, что он бесплатный, и это сборка, созданная путем компиляции исходных кодов из репозитория OpenJDK). AdoptOpenJDK как сущность не будет бэкпортировать патчи, то есть не будет AdoptOpenJDK 'fork / version', который существенно отличается от апстрима (за исключением некоторых патчей сценария сборки для таких вещей, как поддержка Win32). Это означает, что если члены сообщества (Oracle или другие, но не AdoptOpenJDK как сущность) исправляют ошибки безопасности, связанные с бэкпортом, для обновлений версий OpenJDK LTS, то AdoptOpenJDK предоставит сборки для них. Поддерживается сообществом OpenJDK.

OracleJDK - это еще один дистрибутив. Начиная с JDK12 не будет бесплатной версии OracleJDK. Предложение Oracle по распространению JDK предназначено для коммерческой поддержки. Вы платите за это, но затем вы получаете поддержку Oracle. В отличие от предложения Oracle OpenJDK, OracleJDK поставляется с более длинной поддержкой версий LTS. Как разработчик вы можете получить бесплатную лицензию для личного использования / разработки только для этого конкретного JDK, но это в основном красная сельдь, поскольку «просто двоичный файл» в основном совпадает с двоичным файлом OpenJDK. Я предполагаю, что это означает, что вы можете загружать исправленные для безопасности версии LTS JDK с веб-сайтов Oracle, если вы пообещаете не использовать их в коммерческих целях.

Примечание . Лучше всего называть сборки OpenJDK от Oracle «сборками Oracle OpenJDK».

Дональд Смит, менеджер по продуктам Java в Oracle, пишет :

В идеале, мы бы просто называли все сборки Oracle JDK «Oracle JDK», либо по лицензии GPL, либо по коммерческой лицензии, в зависимости от вашей ситуации. Однако по историческим причинам, несмотря на то, что существуют небольшие оставшиеся различия, мы будем ссылаться на них отдельно как сборки Oracle OpenJDK и Oracle JDK.


Поставщики OpenJDK и сравнение

-------------------------------------------------- --------------------------------------
| Провайдер | Бесплатные сборки | Бесплатный бинарный | Расширенный | Коммерческий | Разрешительный |
| | из источника | Распределения | Обновления | Поддержка | Лицензия |
| ------------------------------------------------- ------------------------------------- |
| AdoptOpenJDK | Да | Да | Да | Нет | Да |
| Амазонка - Корретто | Да | Да | Да | Нет | Да |
| Азул Зулу | Нет | Да | Да | Да | Да |
| BellSoft Liberica | Нет | Да | Да | Да | Да |
| IBM | Нет | Нет | Да | Да | Да |
| jClarity | Нет | Нет | Да | Да | Да |
| OpenJDK | Да | Да | Да | Нет | Да |
| Oracle JDK | Нет | Да | Нет ** | Да | Нет |
| Oracle OpenJDK | Да | Да | Нет | Нет | Да |
| ojdkbuild | Да | Да | Нет | Нет | Да |
| RedHat | Да | Да | Да | Да | Да |
| SapMachine | Да | Да | Да | Да | Да |
-------------------------------------------------- --------------------------------------

Бесплатные сборки из исходного кода - исходный код дистрибутива общедоступен, и можно собрать собственную сборку

Бесплатные бинарные дистрибутивы - бинарные дистрибутивы общедоступны для скачивания и использования

Расширенные обновления - LTS (долгосрочная поддержка) - публичные обновления после 6-месячного жизненного цикла выпуска

Коммерческая поддержка - некоторые провайдеры предлагают расширенные обновления и поддержку для платящих клиентов, например Oracle JDK ( подробности поддержки )

Permissive License - лицензия на распространение не является защитной, например, Apache 2.0


Какой дистрибутив Java я должен использовать?

В дни Sun / Oracle, как правило, Sun / Oracle производила проприетарные нисходящие дистрибутивы JDK на основе источников OpenJDK. Недавно Oracle решила делать собственные проприетарные сборки только с коммерческой поддержкой. Они любезно публикуют сборки OpenJDK также на своем сайте https://jdk.java.net/ .

Начиная с JDK 11 происходит переход от мышления одного поставщика (Oracle) к мышлению, при котором вы выбираете провайдера, который дает вам дистрибутив для продукта в соответствии с вашими условиями: платформы, для которых они создаются, частота и скорость выпусков как устроена поддержка и т. д. Если вы не доверяете ни одному из существующих поставщиков, вы можете даже создать OpenJDK самостоятельно.

Каждая сборка OpenJDK обычно делается из одного исходного исходного репозитория («проект» OpenJDK). Однако каждая сборка является совершенно уникальной - бесплатной или коммерческой, фирменной или не брендированной, чистой или в комплекте (например, BellSoft Liberica JDK предлагает пакетную версию JavaFX, которая была удалена из сборок Oracle, начиная с JDK 11).

Если ни одна среда (например, Linux) и / или лицензионное требование не определяют конкретный дистрибутив и если вам нужна самая стандартная сборка JDK, то, вероятно, лучшим вариантом будет использование OpenJDK от Oracle или AdoptOpenJDK.


Дополнительная информация

Время заглянуть за пределы Oracle JDK Стивен Коулборн

Java все еще бесплатна сообществом Java Champions (опубликовано 17 сентября 2018 г.)

Java всё ещё бесплатна 2.0.0 от сообщества Java Champions (опубликовано 3 марта 2019 г.)

Алексей Шипилев о интервью JDK с Опсианом (опубликовано 27 июня 2019 г.)

Михаил Холодков
источник
8
Можно добавить, что другие поставщики предоставляют реализации Java на основе OpenJDK, такие как продукты Zulu и Zing от Azul Systems . Другим проектом является Eclipse OpenJ9 .
Базилик Бурк
2
@DmitriyPopov Это разрешительно - github.com/AdoptOpenJDK/openjdk-build/blob/master/LICENSE
Михаил Холодков
1
@MikhailKholodkov Неправильно в отношении лицензирования Apache. Ваша ссылка на AdoptOpenJDK с использованием Apache License 2.0 применяется только к сценариям сборки, которые они создали, чтобы помочь создать свои двоичные файлы. Двоичные файлы построены из исходного кода, полученного из проекта OpenJDK с использованием GPL с привязкой лицензии на исключение.
Василий Бурк
2
@GarrettWilson AdoptOpenJDK выполняет только 2 вещи: (a) Сборка двоичных файлов и установщиков с использованием исходного кода, предоставленного OpenJDK, и (b) Запуск тестов на этих двоичных файлах. AdoptOpenJDK не поддерживает хранилище исходного кода для реализации платформы Java. Итак: OpenJDK - это только исходный код, AdoptOpenJDK - это только двоичные файлы + установщики. Авторы AdoptOpenJDK пишут только для своих инструментов разработки и тестовых наборов. Помимо AdoptOpenJDK, несколько других компаний также предоставляют сборки на основе исходного кода, предоставленного проектом OpenJDK: Azul Systems, Oracle, BellSoft, Amazon AWS, RedHat / IBM, SAP и другие.
Василий Бурк
1
@GarretWilson Я должен добавить, что AdoptOpenJDK выполняет третье действие: (c) Создает и поддерживает инструменты для поддержки сборки и тестирования, упомянутые в моем предыдущем комментарии.
Базилик Бурк
64

Обновление: AdoptOpenJDK изменил свое название на Adoptium , как часть его перехода к Eclipse Foundation .


OpenJDK
сборки исходного кода Adoptium / AdoptOpenJDK

Разница между OpenJDK и AdoptOpenJDK

Первый предоставляет исходный код , другой предоставляет сборки этого исходного кода.

Несколько поставщиков Java & OpenJDK

Adoptium из Eclipse Foundation , ранее известный как AdoptOpenJDK , является лишь одним из нескольких поставщиков, распространяющих реализации платформы Java. Это включает:

  • Eclipse Foundation (Adoptium / AdoptOpenJDK)
  • Azul Systems
  • оракул
  • Red Hat / IBM
  • BellSoft
  • SAP
  • Amazon AWS
  • … и больше

Посмотрите мою блок-схему, чтобы помочь вам выбрать поставщика для реализации платформы Java. Нажмите / нажмите, чтобы увеличить.

Блок-схема, помогающая вам выбрать поставщика для реализации Java 11

Другой ресурс: эта матрица сравнения от Azul Systems полезна, и, на мой взгляд, она верна и справедлива.

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

Мотивации при выборе поставщика для Java

Некоторые поставщики предлагают вам выбор технологий JIT .

Диаграмма, показывающая историю слияния HotSpot и JRockit и OpenJ9, доступных в AdoptOpenJDK

Чтобы узнать больше об этой экосистеме Java, прочитайте Java Is Still Free

Базилик Бурк
источник
1
Если «OpenJDK» относится к источнику, то в чем разница между hub.docker.com/_/openjdk и hub.docker.com/_/adoptopenjdk ?
bcoughlan
1
@bcoughlan Вам нужно будет спросить издателя этих двух продуктов: Docker, Inc. На ваших связанных веб-страницах утверждается, что второе поддерживается проектом AdoptOpenJDK, а первое поддерживается "сообществом Docker". Первый вводит в заблуждение использование логотипа и наименования, поскольку это может создать впечатление, что его создал проект OpenJDK, а это не так. Первый может даже нарушать пункт № 2 уведомления о торговой марке, предоставленного OpenJDK , но я не поверенный.
Василий Бурк
1
@SanderVerhagen Можете ли вы предоставить ссылку на эту страницу загрузки на сайте OpenJDK? Я не нахожу такого предложения. Я нашел ссылку на двоичные файлы Oracle OpenJDK JDK для Windows, macOS и Linux на другом веб-сайте: jdk.java.net . Этот сайт и его двоичные файлы предоставляются в качестве любезности сообществу Oracle, а не проектом OpenJDK. Как говорится на домашней странице : Java Development Kit собирается из Oracle . Я показываю этот продукт как второй пузырь в синей бочке моей блок-схемы, в верхнем правом углу.
Василий Бурк
1
@SanderVerhagen Ваша ссылка ведет на другой веб-сайт , как я подозревал, за пределами OpenJDK . Сайт jdk.java.net/14 не является частью веб-сайта OpenJDK и не является частью проекта OpenJDK. Другими словами, openjdk.java.net не является jdk.java.net . Опять же, посмотрите на два пузыря в верхней части синей бочки на моей блок-схеме. Продукт Oracle в левом верхнем углу - их коммерческий продукт. Продукт Oracle в правом верхнем углу представляет собой бесплатную сборку с лицензией GPL - ваша ссылка ведет на этот конкретный продукт.
Василий Бурк
1
@SanderVerhagen Я подозреваю, что вас смущает название продукта. Слово «Java» является торговой маркой Oracle и может использоваться только с их разрешения. Поэтому большинство поставщиков не используют этот товарный знак. Вместо этого большинство поставщиков используют термин «OpenJDK» как часть своего наименования, а не «Java». Эти поставщики делают свои сборки из исходного кода, полученного из проекта OpenJDK . Проект OpenJDK предоставляет только исходный код , а не сборки, не установщики. Для сборки / установки вы должны либо сделать свой собственный, либо получить его у поставщика. Я предлагаю читать Java по-прежнему бесплатно .
Базилик Бурк