OpenJDK 和 Adoptium/AdoptOpenJDK 之间的区别

2023-12-15

由于最近Oracle Java SE 支持路线图由于政策更新(特别是 2019 年 3 月之后 Oracle 的 $free 版本更新结束),我一直在寻找 Oracle Java 的替代方案。我发现 OpenJDK 是一个开源替代品。我发现采用OpenJDK, 现在已知作为 Adoptium,这是一个预构建的二进制文件。令人困惑。

OpenJDK 和 Adoptium/AdoptOpenJDK 有什么区别?


简而言之:

  • OpenJDK has multiple meanings and can refer to:
    • Java 平台标准版 (Java SE) 的免费开源实现
    • 开源存储库— Java 源代码又名 OpenJDK 项目
    • 由 Oracle 维护的预构建 OpenJDK 二进制文件
    • 由 OpenJDK 社区维护的预构建 OpenJDK 二进制文件
  • 采用OpenJDK— 由社区维护的预构建 OpenJDK 二进制文件 (开源许可)

解释:

预构建的 OpenJDK(或发行版) — 二进制文件,由https://hg.openjdk.java.net/,作为存档或安装程序提供,适用于各种平台,并可能包含支持合同。

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

OpenJDK,发行版(请参阅下面的提供商列表) - 是像啤酒一样免费和某种言论自由,但是,如果您遇到问题,您无法致电 Oracle。没有支持合同。此外,Oracle 只会发布任何 OpenJDK(发行版)版本的更新(如果该版本是最新的 Java 版本),包括 LTS(长期支持)版本。 Oracle 发布 OpenJDK(发行版)12.0 版当天,即使 OpenJDK(发行版)11.0 版存在安全问题,Oracle 也不会发布 11.0 的更新。由 Oracle 单独维护。

一些 OpenJDK 项目 - 例如OpenJDK 8 and OpenJDK 11- 由 OpenJDK 社区维护,并为某些平台提供某些 OpenJDK 版本的版本。社区成员有责任发布针对这些 OpenJDK 版本中的安全漏洞的修复程序。

采用OpenJDK,发行版与 Oracle 的 OpenJDK 发行版非常相似(因为它是免费的,并且是通过编译 OpenJDK 源代码存储库中的源代码生成的版本)。 AdoptOpenJDK 作为一个实体不会向后移植补丁,即不会有与上游有本质不同的 AdoptOpenJDK“分支/版本”(除了一些用于 Win32 支持等的构建脚本补丁)。这意味着,如果社区成员(Oracle 或其他人,但不是 AdoptOpenJDK 作为实体)向后移植 OpenJDK LTS 版本更新的安全修复程序,那么 AdoptOpenJDK 将为这些成员提供构建。由 OpenJDK 社区维护。

甲骨文JDK- 是另一个发行版。从 JDK12 开始,将不再有免费版本的 OracleJDK。 Oracle 的 JDK 发行版旨在提供商业支持。您为此付费,但随后您可以依赖 Oracle 的支持。与 Oracle 的 OpenJDK 产品不同,OracleJDK 为 LTS 版本提供更长的支持。作为开发人员,您可以获得仅此特定 JDK 的个人/开发使用的免费许可证,但这主要是转移注意力,因为“只是二进制文件”基本上与 OpenJDK 二进制文件相同。我想这意味着你可以从 Oracle 网站下载 LTS JDK 的安全补丁版本,只要你保证不将它们用于商业用途。

Note。最好将 Oracle 的 OpenJDK 构建称为“Oracle OpenJDK 构建”。

Donald Smith,Oracle Java 产品经理writes:

理想情况下,我们将所有 Oracle JDK 版本简单地称为“Oracle JDK”, 根据 GPL 或商业许可,具体取决于您的 情况。然而,由于历史原因,仅存的少数 存在差异,我们将它们单独称为 Oracle 的 OpenJDK 构建和 Oracle JDK。


OpenJDK 提供程序和比较

Provider Free Builds
from Source
Free Binary
Distributions
Extended
Updates
Commercial
Support
Permissive
License
Website
AdoptOpenJDK Yes Yes Yes No Yes https://adoptopenjdk.net
Amazon – Corretto Yes Yes Yes No Yes https://aws.amazon.com/corretto
Azul Zulu No Yes Yes Yes Yes https://www.azul.com/downloads/zulu/
BellSoft Liberica No Yes Yes Yes Yes https://bell-sw.com/java.html
IBM No No Yes Yes Yes https://www.ibm.com/developerworks/java/jdk
jClarity No No Yes Yes Yes https://www.jclarity.com/adoptopenjdk-support/
OpenJDK Yes Yes Yes No Yes https://adoptopenjdk.net/upstream.html
Oracle JDK No Yes No** Yes No https://www.oracle.com/technetwork/java/javase/downloads
Oracle OpenJDK Yes Yes No No Yes https://jdk.java.net
ojdkbuild Yes Yes No No Yes https://github.com/ojdkbuild/ojdkbuild
RedHat Yes Yes Yes Yes Yes https://developers.redhat.com/products/openjdk/overview
SapMachine Yes Yes Yes Yes Yes https://sap.github.io/SapMachine

Free Builds from Source - the distribution source code is publicly available and one can assemble its own build

Free Binary Distributions - the distribution binaries are publicly available for download and usage

Extended Updates - aka LTS (long-term support) - Public Updates beyond the 6-month release lifecycle

Commercial Support - some providers offer extended updates and customer support to paying customers, e.g. Oracle JDK (support details)

Permissive License - the distribution license is non-protective, e.g. Apache 2.0


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

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

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

OpenJDK 的每个版本通常都是从相同的原始上游源存储库(OpenJDK“项目”)制作的。然而,每个版本都是非常独特的 - 免费或商业、品牌或无品牌、纯或捆绑(例如,BellSoft Liberica JDK 提供捆绑的 JavaFX,从 JDK 11 开始,它已从 Oracle 版本中删除)。

如果没有环境(例如 Linux)和/或许可证要求定义特定的发行版,并且如果您想要最standardJDK 构建,那么最好的选择可能是使用 Oracle 的 OpenJDK 或 AdoptOpenJDK。


附加信息

是时候超越 Oracle 的 JDK 了斯蒂芬·科尔伯恩

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

Java 仍然免费 2.0.0作者:Java Champions 社区(2019 年 3 月 3 日发布)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenJDK 和 Adoptium/AdoptOpenJDK 之间的区别 的相关文章

随机推荐

  • 如何在 Visual Basic 2010 中为运行时创建的控件创建单击事件?

    我在运行时向表单添加了一些控件 我需要它们在单击时调用函数 我不知道将添加多少个控件 但它们都需要运行相同的功能 我如何定义该事件 我可以根据给定类的所有控件定义事件吗 一个简单的例子 Public Class Form1 Private
  • 使用量词进行前瞻有什么作用?

    只是想把我的注意力集中在这个问题上 当我在积极的前瞻中胡思乱想时 我就想到了这个问题 这个正则表达式有意义吗 foo bar re match 不会返回错误 但如果有任何意义 量词 我不知道它会是什么 FWIW regex101 com 给
  • PATH 应该包含目录或二进制文件的完整路径吗?

    我正在尝试设置一个正确的PATH 但我想知道它应该包含什么 如果我有 usr bin ls usr local bin ls 我想要更喜欢其中的一个 usr local bin 我应该使用以下哪一个 PATH usr local bin l
  • tvOS:焦点移动不正确

    我有一个 UIView 上面有两个按钮 在里面MyView类我有这个代码 BOOL canBecomeFocused return YES NSArray
  • 从其他窗口刷新组合框列表,MVVM

    我正在开发一些应用程序 但遇到一个问题 我有两个窗口 预订 父母和客人 儿童 在父窗口中 我有一个包含客人列表的组合框和一个用于添加新客人的按钮 当我单击该按钮时 客人 窗口 子窗口 打开 在子窗口中 我将新来宾添加到数据库中 效果很好 我
  • DO 脚本中的 PSQL 命令行参数

    我有一个脚本NewSchemaSafe sql根据项目目录创建一个新模式 它是从 Windows 命令行调用的 如下所示 for a in do set this na other stuff here psql U postgres d
  • R - 在每个数据帧行上应用 lm

    我正在尝试在数据框的两列之间对每一行应用简单的线性回归 经过一番研究 我觉得我已经差不多了 但我的功能仍然不起作用 请看一下 set seed 1 DF lt data frame A rnorm 50 100 3 B rnorm 50 1
  • 仅在运行测试时出现 DexIndexOverflowException

    我可以在调试和发布变体中成功构建并运行我的 Android 应用程序 没有任何问题 然而 当我尝试运行新的单元测试 我以前从未进行过 时 我得到了可怕的结果DexIndexOverflowException 我猜测ProGuard没有与我的
  • 如何将这个elasticsearch函数分数查询转换为java API

    如何将下面的ES查询转换为Java API 我正在使用弹性搜索2 3 3 GET schema name search from 0 size 200 query function score query match all boost 5
  • 如何使用 boost::property_tree 解析带有数组根的 JSON

    如何使用 Boost PropertyTree 从以数组为根节点的 JSON 中获取数据 ID cc7c3e83 9b94 4fb2 aaa3 9da458c976f7 Type VM 数组元素只是属性树中带有名为 的键的值 for aut
  • 在Java中显示数字的前n位

    当用户确定 n 时 我很难创建一种显示数字前 n 位的方法 例如 用户输入整数 1234567 和若干位数以显示 3 然后该方法输出 123 我有一个想法如何显示第一个数字 long number 52345678 long prefix
  • C# - 使用 webbrowser 控件将字符串传递到网页中的文本框

    有没有办法在使用网络浏览器控件时获取字符串的值并将其传递到网页内的文本框 HtmlDocument doc this webBrowser1 Document doc GetElementById myId SetAttribute Val
  • ImageIO.read 返回 NULL,没有错误

    尽管文件看起来很好找到 但以下代码似乎不起作用 images new BufferedImage 32 FileInputStream fis null for int i 0 i lt 32 i File file new File ti
  • Rscript 在本地构建中指向不正确的 R 版本

    我最近在Linux Redhat服务器上安装了本地版本的R 3 1 0 如下 from R 3 1 0 directory configure prefix pwd make make install 此外 我还更新了 bashrc 中的
  • 简单的喜欢/不喜欢文本按钮 - 添加 ajax 等

    我正在尝试用 PHP 制作一个非常简单的 Like Unlike 按钮 页面不刷新 我知道有无数关于这方面的教程 但因为我对 ajax 和 jquery 完全陌生 所以我不知道如何实现它们 代码的哪一部分在哪个文件中执行等 我有一个用户 I
  • 正则表达式防止尾随空格和额外空格

    现在我有一个正则表达式可以防止用户输入任何特殊字符 唯一允许的字符是 A 到 Z 0 到 9 或空格 我想改进这个正则表达式以防止出现以下情况 无前导 训练空格 如果用户在条目之前或之后键入一个或多个空格 则不允许 不允许使用双空格 如果用
  • 将 Yaml 中的列表映射到 Spring Boot 中的对象列表

    在我的 Spring Boot 应用程序中 我有 application yaml 配置文件 其中包含以下内容 我想将其作为带有通道配置列表的配置对象注入 available payment channels list xyz 123 ch
  • 在 Xdebug v3 中,如果我在单步调试时更改断点,我会得到 nginx 502 Bad Gateway

    我在 Docker 中运行 PHP 7 4 我能够很好地进行单步调试 但是 与 Xdebug v2 不同 如果我在单步调试时添加断点或删除断点 我会从 nginx 收到 502 Bad Gateway 消息 并且单步调试会话就会终止 我是否
  • 给定一组区间,找出有多少个区间包含一个点

    假设给你一组 N 个区间 表示为左右坐标 和 M 个点 对于每个点 P 算法应该找到 P 所属的区间数 这是我的算法 1 将区间的左 右坐标分别放入 left 和 right 数组中 2 左 排序 与 右 同时交换条目 3 给定一个点 P
  • OpenJDK 和 Adoptium/AdoptOpenJDK 之间的区别

    由于最近Oracle Java SE 支持路线图由于政策更新 特别是 2019 年 3 月之后 Oracle 的 free 版本更新结束 我一直在寻找 Oracle Java 的替代方案 我发现 OpenJDK 是一个开源替代品 我发现采用