Вчера на Хабре был опубликован перевод поста «Не попадитесь в ловушку используя Oracle JDK 11» с последующим обсуждением «платности Java», но не всё так страшно, как кажется на первый взгляд — ниже перевод публикации из блога Oracle с официальной позицией по лицензированию и распространению версий JDK 11+.

Резюме


Начиная с Java 11, Oracle будет выпускать JDK под лицензией GNU General Public License v2, with the Classpath Exception (GPLv2+CPE) и под коммерческой лицензией для тех, кто использует Oracle JDK как часть продуктов или сервисов Oracle, или кто не хочет использовать открытое программное обеспечение. Эта комбинация из OS-лицензии и коммерческой заменяет старую лицензию BCL (Oracle Binary Code License), которая состоит из коммерческих и бесплатных условий использования.

Для каждой лицензии будут предоставляться отдельные сборки, но эти сборки будут идентичны функционально, кроме некоторых косметических различий и различий в способе упаковки бинарников, подробно описанных ниже.

От BCL к GPL


Лицензия BCL для Oracle Java SE использовалась для лицензирования технологий Oracle Java SE более 10 лет. BCL при определённых условиях разрешает использование без лицензионных отчислений. Чтобы упростить дальнейшую работу, начиная с Java 9, Oracle начала предоставлять сборки OpenJDK под OS-лицензией, используемой платформой Linux (ядро Linux распространяется под лицензией GNU GPLv2). Если вы привыкли использовать бинарники Oracle Java SE бесплатно, вы можете просто продолжить делать это с бинарниками OpenJDK, доступными на jdk.java.net. Если вы привыкли использовать бинарники Oracle Java SE как часть коммерческих продуктов или сервисов Oracle, тогда вы можете продолжить получать релизы Oracle JDK через My Oracle Support (MOS) или в других местах.

Идентичные фунционально и взаимозаменяемые...


Oracle JDK, лизензируемый по BCL, исторически содержал «коммерческие функции», которые не были доступны в сборках OpenJDK. Как и было обещано, за последний год Oracle добавила эти функции в OpenJDK, включая:


Поэтому, начиная с Java 11 и выше, сборки Oracle JDK и OpenJDK будут по сути идентичными.

… но с некоторыми косметическими и упаковочными различиям


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

  • Oracle JDK 11 выдаёт предупреждение при использовании опции -XX:+UnlockCommercialFeatures, тогда как в OpenJDK эта опция приведёт к ошибке. Эта опция никогда не была частью OpenJDK, поэтому нет никакого смысла добавлять её, поскольку в OpenJDK нет коммерческих функций. Эта разница остаётся для того, чтобы пользователям Oralce JDK 10 или более ранних версий было проще перейти Oracle JDK 11 или более поздние версии.
  • Oracle JDK 11 может быть сконфигурирована для предоставления лог-данных в инструмент Advanced Management Console, являющимся отдельным коммерческим продуктом Oracle. Мы будем работать с другими контрибьюторами OpenJDK над вопросом необходимости предоставления таких данных и пользы от них в OpenJDK в будущих версиях. Эта разница остаётся прежде всего для сохранения накопленного опыта клиентами Oracle.
  • Команда javac --release ведёт себя по-разному для Java 9 и Java 10, поскольку в этих версиях Oracle JDK содержит некоторые дополнительные компоненты, которые не были частью соответствующих версий OpenJDK:
    • javafx.base
    • javafx.controls
    • javafx.fxml
    • javafx.graphics
    • javafx.media
    • javafx.web
    • java.jnlp
    • jdk.jfr
    • jdk.management.cmm
    • jdk.management.jfr
    • jdk.management.resource
    • jdk.packager.services
    • jdk.snmp

    Это отличие остаётся для сохранения совместимости в некоторых случаях легаси. Эти модули теперь либо доступны отдельно как часть OpenJFX, либо присутствуют в OpenJDK и в Oracle JDK, потому что они были коммерческими функциями, которые Oracle добавила в OpenJDK, либо были удалены из Oracle JDK 11 (например, JNLP).
  • Вывод команд java --version и java -fulversion будет отличаться между сборками Oracle JDK и OpenJDK, чтобы команды поддержки могли диагностировать любые возникающие проблемы. В частности, запуск java --version со сборкой Oracle JDK 11 выведет:
    java 11 2018-09-25
    Java(TM) SE Runtime Environment 18.9 (build 11+28)
    Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11+28, mixed mode)

    И с OpenJDK 11:
    openjdk version «11» 2018-09-25
    OpenJDK Runtime Environment 18.9 (build 11+28)
    OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
  • Oracle JDK всегда требовал, чтобы сторонние криптографические провайдеры подписывались известным сертификатом. Криптография в OpenJDK имеет открытый интерфейс, это означает, что нет ограничения на используемый крипто-провайдер. Oracle JDK 11 будет продолжать требовать действительную подпись, а сборки OpenJDK будут по-прежнему разрешать использование стороннего крипто-провайдера как с действительной подписью, так и без подписи.
  • Oracle JDK 11 будет по-прежнему включать инсталляторы, брэндирование и JRE для совместимости с настольными легаси-приложениями. Сейчас сборки OpenJDK доступны в виде zip и tar.gz файлов, в то же время рассматриваются альтернативные форматы для распространения.

Как нам их назвать?


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

Комментарии (0)