306

由于最近Oracle Java SE 支持路线图政策更新(特别是 2019 年 3 月之后 Oracle 免费发布更新的结束),我一直在寻找 Oracle Java 的替代品。我发现 OpenJDK 是一种开源替代方案。我发现了 AdoptOpenJDK现在称为Adoptium,它是一个预构建的二进制文件。它令人困惑。

OpenJDK 和 Adoptium/AdoptOpenJDK 有什么区别?

4

2 回答 2

432

简而言之:

  • OpenJDK有多种含义,可以参考:
    • Java 平台标准版 (Java SE) 的免费和开源实现
    • 开源存储库— Java 源代码,即 OpenJDK 项目
    • 由 Oracle 维护的预构建 OpenJDK 二进制文件
    • 由 OpenJDK 社区维护的预构建 OpenJDK 二进制文件
  • AdoptOpenJDK — 由社区维护的预构建 OpenJDK 二进制文件(开源许可

解释:

预构建的OpenJDK(或发行版)—— 二进制文件,从http://hg.openjdk.java.net/构建,作为存档或安装程序提供,提供给各种平台,并带有可能的支持合同。

OpenJDK,源代码存储库(也称为OpenJDK 项目)- 是基于Mercurial的开源存储库,托管在 http://hg.openjdk.java.net上。Java 源代码。绝大多数 Java 功能(从 VM 和核心库到编译器)仅基于此源存储库。Oracle 有一个替代分支。

OpenJDK,发行版(见下面的供应商列表)——像啤酒一样免费,像语音一样免费,但是,如果你有问题,你不能打电话给 Oracle。没有支持合同。此外,如果 OpenJDK(发行版)版本是最新的 Java 版本,包括 LTS(长期支持)版本,Oracle 只会发布该版本的更新。Oracle 发布 OpenJDK(发行版)12.0 版的当天,即使 OpenJDK(发行版)11.0 版存在安全问题,Oracle 也不会发布 11.0 的更新。由 Oracle 单独维护。

一些 OpenJDK 项目(例如OpenJDK 8OpenJDK 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写道

理想情况下,根据您的情况,我们将根据 GPL 或商业许可将所有 Oracle JDK 构建简单地称为“Oracle JDK”。但是,由于历史原因,虽然存在细微的剩余差异,但我们将它们分别称为 Oracle 的 OpenJDK 版本和 Oracle JDK。


OpenJDK 提供程序和比较

-------------------------------------------------- --------------------------------------
| 提供者 | 免费构建 | 免费二进制 | 扩展 | 商业 | 许可 |
| | 来源 | 分布 | 更新 | 支持 | 许可证 |
|------------------------------------------------- --------------------------------------|
| 采用OpenJDK | 是 | 是 | 是 | 没有 | 是 |
| 亚马逊 – Corretto | 是 | 是 | 是 | 没有 | 是 |
| 阿祖尔祖鲁 | 没有 | 是 | 是 | 是 | 是 |
| BellSoft Liberica | 没有 | 是 | 是 | 是 | 是 |
| IBM | 没有 | 没有 | 是 | 是 | 是 |
| jClarity | 没有 | 没有 | 是 | 是 | 是 |
| OpenJDK | 是 | 是 | 是 | 没有 | 是 |
| 甲骨文JDK | 没有 | 是 | 没有** | 是 | 没有 |
| Oracle OpenJDK | 是 | 是 | 没有 | 没有 | 是 |
| ojdkbuild | 是 | 是 | 没有 | 没有 | 是 |
| 红帽 | 是 | 是 | 是 | 是 | 是 |
| 树液机 | 是 | 是 | 是 | 是 | 是 |
-------------------------------------------------- --------------------------------------

Free Builds from Source - 分发源代码是公开可用的,可以组装自己的构建

免费二进制发行版 - 发行版二进制文件可公开下载和使用

扩展更新- 又名 LTS(长期支持) - 超过 6 个月发布生命周期的公共更新

商业支持- 一些提供商向付费客户提供扩展更新和客户支持,例如 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。


附加信息

是时候超越 Oracle 的 JDK了,作者 Stephen Colebourne

Java 仍然免费由 Java Champions 社区(发布于 2018 年 9 月 17 日)

Java is Still Free 2.0.0由 Java Champions 社区(发布于 2019 年 3 月 3 日)

Aleksey Shipilev 关于 JDK 更新的 Opsian 采访(发布于 2019 年 6 月 27 日)

于 2018-09-20T19:10:58.573 回答
149

2021-09 更新

在我的第一次阅读中,似乎这个新许可证使生产使用免费(以及开发、测试和培训使用),但捆绑 Oracle JDK 产品时收费出售的产品除外。但我不是律师,因此请自行阅读条款并根据需要咨询法律建议。

请记住,许多其他供应商继续提供 Java 规范的实现,如下面的流程图所示。其中一些供应商出售支持计划,可选择或作为使用其产品的要求。永远不要假设,始终阅读您获得的任何发行版的详细要求。

2021 年的另一个更新:将 Microsoft 添加到下面的供应商列表中。


更新: AdoptOpenJDK已将其名称更改为Adoptium,作为其迁移到 Eclipse Foundation 的一部分。


OpenJDK ➙ 源代码
Adoptium/AdoptOpenJDK ➙ 构建

OpenJDK 和 AdoptOpenJDK 的区别

第一个提供源代码,另一个提供该源代码的构建

多家 Java & OpenJDK 供应商

Eclipse Foundation的Adoptium(以前称为AdoptOpenJDK)只是分发 Java 平台实现的几个供应商之一。这些包括:

  • Eclipse 基金会 (Adoptium/AdoptOpenJDK)
  • Azul 系统
  • 甲骨文
  • 红帽/IBM
  • 贝尔软件
  • 树液
  • 亚马逊AWS
  • … 和更多

请参阅我的此流程图,以帮助指导您为 Java 平台的实现选择供应商。单击/点击以缩放。

指导您为 Java 11 实施选择供应商的流程图

另一个资源: Azul Systems 的这个比较矩阵很有用,在我看来是真实和公平的。

以下是在选择供应商和实施时要考虑的注意事项和动机列表。

选择 Java 供应商的动机

一些供应商为您提供JIT技术的选择。

显示 HotSpot 和 JRockit 合并历史的图表,以及在 AdoptOpenJDK 中都可用的 OpenJ9

要了解有关此 Java 生态系统的更多信息,请阅读Java 仍然免费

于 2019-11-22T23:33:24.177 回答