OpenJDK和Adoptium/AdoptOpenJDK之间的区别

374
由于最近Oracle Java SE Support Roadmap政策更新(特别是在2019年3月之后,Oracle不再提供免费发布更新),我一直在寻找替代Oracle Java的方案。我发现OpenJDK是一个开源替代品。而我还发现AdoptOpenJDK现在已被称为Adoptium,这是一个预构建二进制文件。这令人困惑。
OpenJDK和Adoptium/AdoptOpenJDK有什么区别?

4
更新:AdoptOpenJDK 更名为 Adoptium,作为其加入Eclipse基金会的一部分。 - Basil Bourque
2个回答

498
简而言之:
  • OpenJDK有多重含义,可以指:
    • Java平台标准版(Java SE)的免费开源实现
    • 开源代码库 —— Java源代码,即OpenJDK项目
    • 由Oracle维护的预构建OpenJDK二进制文件
    • 由OpenJDK社区维护的预构建OpenJDK二进制文件
  • AdoptOpenJDK —— 由社区维护的预构建OpenJDK二进制文件(开源许可证

说明:

预构建的OpenJDK(或分发)——从https://hg.openjdk.java.net/构建的二进制文件,以存档或安装程序的形式提供,针对多种平台提供,并提供可能的支持合同。

OpenJDK源代码库(也称为OpenJDK项目)——基于Mercurial的开源代码库,托管在https://hg.openjdk.java.net。Java源代码。绝大部分Java功能(从VM和核心库到编译器)仅基于此源代码库。Oracle有这个源代码库的替代派生。

OpenJDK发行版(见下面的提供者列表)-是免费的啤酒,有点言论自由的意思,但是如果您在使用过程中遇到问题,您不能联系Oracle。没有支持合同。此外,Oracle仅会针对最新的Java发行版本(包括长期支持(LTS)版本),发布任何OpenJDK(分发版)版本的更新。即使OpenJDK(发行版)版本11.0存在安全问题,当Oracle发布OpenJDK(分发版)版本12.0时,Oracle也不会为11.0发布更新。仅由Oracle维护。

一些OpenJDK项目-例如OpenJDK 8OpenJDK 11-由OpenJDK社区维护,并为某些平台的某些OpenJDK版本提供发布。社区成员已经承担起发布这些OpenJDK版本中安全漏洞修复的责任。

AdoptOpenJDK是一个发行版,与Oracle的OpenJDK分发非常相似(免费,并且是通过编译OpenJDK源代码库中的源代码生成的构建)。AdoptOpenJDK将不会回溯补丁,即除了一些用于Win32支持的构建脚本修补程序外,将不会有实质上不同于上游的AdoptOpenJDK“分叉/版本”。这意味着,如果社区成员(Oracle或其他人,但不包括AdoptOpenJDK作为一个实体)对OpenJDK LTS版本的更新版本进行后置安全修复,那么AdoptOpenJDK将为这些修复提供构建。由OpenJDK社区维护。
OracleJDK是另一个JDK分发版。从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。{{}}

OpenJDK提供商和比较

供应商 源代码构建免费 二进制发行版免费 扩展更新 商业支持 宽松许可证 网址
AdoptOpenJDK https://adoptopenjdk.net
Amazon – Corretto https://aws.amazon.com/corretto
Azul Zulu https://www.azul.com/downloads/zulu/
BellSoft Liberica https://bell-sw.com/java.html
IBM https://www.ibm.com/developerworks/java/jdk
jClarity https://www.jclarity.com/adoptopenjdk-support/
OpenJDK https://adoptopenjdk.net/upstream.html
Oracle JDK 否** https://www.oracle.com/technetwork/java/javase/downloads
Oracle OpenJDK https://jdk.java.net
ojdkbuild https://github.com/ojdkbuild/ojdkbuild
RedHat https://developers.redhat.com/products/openjdk/overview
SapMachine https://sap.github.io/SapMachine

从源代码构建免费版本 - 发行版源代码公开可用,用户可以自己组装构建

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

扩展更新 - 也称为LTS(长期支持)- 在6个月的发布生命周期之外提供公共更新

商业支持 - 一些提供者为付费客户提供扩展更新和客户支持,例如Oracle JDK(support details

宽松许可证 - 发行版许可证是非保护性的,例如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或AdoptOpenJDK的OpenJDK版本。


附加信息

时候超越Oracle的JDK by Stephen Colebourne

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

Java仍然免费2.0.0 由Java Champions社区发布(于2019年3月3日发布)

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


10
您可以补充一下提到其他供应商提供基于OpenJDK的Java实现,例如[Azul Systems](http://www.Azul.com/)的* Zulu Zing *产品。另一个是[Eclipse OpenJ9](https://developer.ibm.com/code/open/projects/eclipse-openj9/)项目。 - Basil Bourque
2
@DmitriyPopov 它是宽容的 - https://github.com/AdoptOpenJDK/openjdk-build/blob/master/LICENSE - Mikhail Kholodkov
1
@MikhailKholodkov关于Apache许可证的说法是错误的。您提供的AdoptOpenJDK链接仅适用于他们编写的构建脚本,以帮助生成其二进制文件。这些二进制文件是使用GPL与链接例外许可证从OpenJDK项目获取的源代码构建的。 - Basil Bourque
3
AdoptOpenJDK只做两件事情:(a)使用由OpenJDK提供的源代码构建二进制文件和安装程序,以及(b)对这些二进制文件运行测试。AdoptOpenJDK 维护用于实现Java平台的源代码库。因此:OpenJDK只是源代码,AdoptOpenJDK只是二进制文件+安装程序。AdoptOpenJDK的作者仅为其构建工具和测试套件编写代码。除了AdoptOpenJDK,还有其他几家公司基于OpenJDK项目提供构建服务,包括Azul Systems、Oracle、BellSoft、Amazon AWS、RedHat/IBM、SAP等。 - Basil Bourque
2
@GarretWilson 我应该补充一点,AdoptOpenJDK 还有第三个作用:(c) 创建和维护工具 来支持我之前评论中提到的构建和测试。 - Basil Bourque
显示剩余7条评论

192

2021年9月更新

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

请记住,许多其他供应商继续提供Java规范的实现,如下面的流程图所示。这些供应商中有些出售支持计划,可以选择购买或作为使用其产品的要求。永远不要假设,总是阅读您获取的任何分发的详细要求。
另一个2021年的更新:将Microsoft添加到下面的供应商列表中。
更新:AdoptOpenJDK已更名为Adoptium,作为其加入Eclipse基金会的一部分

OpenJDK ➙ 源代码
Adoptium/AdoptOpenJDK ➙ 构建版本

OpenJDK和AdoptOpenJDK之间的区别

前者提供源代码,后者提供该源代码的构建版本。

Java和OpenJDK的几个供应商

AdoptiumEclipse Foundation(前身为AdoptOpenJDK)的其中一个分发Java平台实现的供应商。其他供应商包括:

  • Eclipse Foundation(Adoptium/AdoptOpenJDK)
  • Azul Systems
  • Oracle
  • Red Hat / IBM
  • BellSoft
  • SAP
  • Amazon AWS
  • …等等

请参考我的这份流程图,以帮助您选择Java平台实现的供应商。点击/轻触可放大。

Flowchart guiding you in choosing a vendor for a Java 11 implementation

另一个资源:Azul Systems的此比较矩阵非常有用,我认为它很真实公正。

以下是在选择供应商和实施方案时需要考虑的因素和动机列表。

Motivations in choosing a vendor for Java

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

Diagram showing history of HotSpot & JRockit merging, and OpenJ9 both available in AdoptOpenJDK

要更好地了解这个Java生态系统,请阅读Java仍然是免费的


1
如果“OpenJDK”指的是源代码,那么https://hub.docker.com/_/openjdk和https://hub.docker.com/_/adoptopenjdk之间有什么区别? - bcoughlan
3
您需要向这两个产品的出版商Docker,Inc.咨询。您提供的链接网页称第二个产品由AdoptOpenJDK项目维护,而第一个由“Docker社区”维护。第一个在使用标志和名称方面存在误导性,可能让您误以为是OpenJDK项目创建的,但实际情况并非如此。第一个甚至可能违反了OpenJDK所给出的商标声明中的第2项,但我不是律师,无法确定。 - Basil Bourque
1
@SanderVerhagen 我怀疑你被产品命名所困惑了。单词“Java”是Oracle的商标,只能在他们的许可下使用。因此,大多数供应商都没有使用该商标。相反,大多数供应商在其命名中使用术语“OpenJDK”,而不是“Java”。这些供应商从OpenJDK项目获得源代码来制作他们的构建版本。OpenJDK项目仅提供源代码,没有构建版本,也没有安装程序。要进行构建/安装,您必须自己制作或从供应商那里获取。我建议阅读Java Is Still Free - Basil Bourque
1
@SanderVerhagen 《OpenJDK商标声明》第1(a)节允许第三方(例如apt-get)在一定条件下使用由OpenJDK项目提供的源代码构建的二进制文件中的“名称和版本字符串”。如果您所说的“免费”是指免费,那么当您在名称中看到“openjdk”一词时,并不一定意味着它是免费的。我认为对于任何获取软件(如Java实现)的人来说,非常重要的是要清楚其来源、许可证和条款。 - Basil Bourque
1
当我看到你在 SO 页面的评论时,我知道事情即将变得严肃。 - chill appreciator
显示剩余10条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接