OpenJDK 和 AdoptOpenJDK 的区别

预先构建的 OpenJDK(或发行版)二进制文件,由 http://hg.openjdk.java.net/ 构建,以归档文件或安装程序的形式提供,并为各种平台提供了可能的支持合同。

OpenJDK 源存储库(也称为 OpenJDK 项目)是一个基于 Mercurial 的开放源码库,托管在 http://hg.openjdk.java.net。Java的源代码。绝大多数的 Java 功能(从 VM 虚拟机到编译器)都完全基于这个源码库。Oracle 有一个备用的 fork。

OpenJDK 发行版(请参阅下面的提供程序列表)是免费的,但是,如果遇到问题,你不能向 Oracle 提问。因为你没有支持合同。


此外,甲骨文只对任何OpenJDK(发行版)版本发布更新,如果Oracle OpenJDK是最新的Java版本,包括LTS(长期支持)版本。在Oracle 发布 OpenJDK(发行版)12.0版本的那天,即使 OpenJDK(发行版)11.0 版本存在安全问题,Oracle 也不会发布11.0的更新。

一些 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 二进制相同。这意味着你可以从 Oracle 的网站上下载 LTS JDK 的安全修补程序版本,只要您承诺不将其用于商业用途。

注意:最好将 Oracle 的 OpenJDK 构建称为 " Oracle OpenJDK "
Oracle  的 Java产品经理 Donald Smith 写道:

理想情况下,我们将所有 Oracle JDK 构建称为 "Oracle JDK",取决于您的GPL或商业许可情况。但是,由于历史原因,剩下的一小部分  存在差异,我们将它们分别称为 Oracle 的 OpenJDK 和 Oracle JDK。
提供链接
AdoptOpenJDKhttps://adoptopenjdk.net
Amazon Correttohttps://aws.amazon.com/corretto
Azul Zuluhttps://www.azul.com/downloads/zulu/
BellSoft Libericahttps://bell-sw.com/java.html
IBMhttps://www.ibm.com/developerworks/java/jdk
jClarityhttps://www.jclarity.com/adoptopenjdk-support/
OpenJDK Upstream(上游)https://adoptopenjdk.net/upstream.html
Oracle JDKhttps://www.oracle.com/technetwork/java/javase/downloads
Oracle OpenJDKhttp://jdk.java.net
ojdkbuildhttps://github.com/ojdkbuild/ojdkbuild
RedHathttps://developers.redhat.com/products/openjdk/overview
SapMachinehttps://sap.github.io/SapMachine
----------------------------------------------------------------------------------------
|     Provider      | Free Builds | Free Binary   | Extended | Commercial | Permissive |
|                   | from Source | Distributions | Updates  | Support    | License    |
|--------------------------------------------------------------------------------------|
| AdoptOpenJDK      |      ✅     |      ✅      |    ✅    |     ❌     |     ✅    |
| Amazon – Corretto |      ✅     |      ✅      |    ✅    |     ❌     |     ✅    |
| Azul Zulu         |      ❌     |      ✅      |    ✅    |     ✅     |     ✅    |
| BellSoft Liberica |      ❌     |      ✅      |    ✅    |     ✅     |     ✅    |
| IBM               |      ❌     |      ❌      |    ✅    |     ✅     |     ✅    |
| jClarity          |      ❌     |      ❌      |    ✅    |     ✅     |     ✅    |
| OpenJDK           |      ✅     |      ✅      |    ✅    |     ❌     |     ✅    |
| Oracle JDK        |      ❌     |      ✅      |    ❌    |     ✅     |     ❌    |
| Oracle OpenJDK    |      ✅     |      ✅      |    ❌    |     ❌     |     ✅    |
| ojdkbuild         |      ✅     |      ✅      |    ❌    |     ❌     |     ✅    |
| RedHat            |      ✅     |      ✅      |    ✅    |     ✅     |     ✅    |
| SapMachine        |      ✅     |      ✅      |    ✅    |     ✅     |     ✅    |
----------------------------------------------------------------------------------------

● Free Builds from Source - 发行版的源代码是公开的,开发者可以自己构建
● Free Binary Distributions - 发行版的二进制文件是可以公开的    下载和使用
● Extended Updates - aka LTS (长期支持) - 超过6个月发布生命周期的公开更新
● Commercial Support - 一些供应商为付费客户提供扩展更新和客户支持,例如 Oracle JDK(支持详情)
● Permissive License - 发行许可是非保护性的,如 Apache 2.0

我应该使用哪个 Java 发行版?

在 Sun/Oracle 时代,通常是 Sun/Oracle 基于 OpenJDK 的源代码生产专有的下游 JDK 发行版。
最近,Oracle 仅在附带商业支持的情况下进行自己的专有构建。他们还在其 https://jdk.java.net/ 网站上慷慨地发布了 OpenJDK 构建。

从 JDK 11开始发生的事情是,从单一供应商(Oracle)的思维方式转变为这样的思维方式:你选择一个供应商,在你喜欢的条件下为你提供产品的发行版:他们构建的平台、发布的频率/及时性、支持的结构等等。如果你不信任任何现有的供应商,你甚至可以自己构建 OpenJDK。

OpenJDK 的每次构建通常都是从同一个原始上游源码库(OpenJDK "项目")中产生的。但是,每个构建都是相当独特的 —— 免费的或商业的,有品牌的或无品牌的,纯净的或捆绑的(例如,BellSoft Liberica JDK 提供了捆绑的 JavaFX,从 JDK 11开始就从 Oracle 的构建中移除)。

如果没有环境(例如 Linux)许可证要求定义了特定的发行版,如果你想要最标准的 JDK 构建,那么最好的选择可能是使用 Oracle 的 OpenJDK 或 AdoptOpenJDK。

添加新评论