使用OpenJDK的原因是什么?

27

我大致了解了Oracle JDKOpen JDK之间的区别。
但我找不到使用Open JDK的原因。
因为Oracle JDK已经拥有一个人需要的一切,并且有时比Open JDK更快。

在什么情况下应该使用Open JDK
只是出于法律问题吗?
如果是,那么问题是什么?
因为我一直使用Oracle JDK开发我的所有项目。


1
自Java 9 GA以来,OpenJDK是OracleJDK,它们之间已经没有区别了。 - Boris the Spider
@BoristheSpider,非常感谢您的文章。我明白Oracle试图消除技术差异。但我仍然不明白有哪些情况会阻止我使用Oracle JDK?或者使用Open JDK而不是Oracle JDK的原因。如果它们提供相同的功能并且完全相同,那么分离实现的原因是什么?Oracle可以只需使其代码开放和可用。 - Turkhan Badalov
他们确实做到了。这就是文章所说的。 - Boris the Spider
2
@BoristheSpider,你在哪里看到的?这篇文章仅说明:“从JDK 9 GA开始,Oracle计划在GPL下发布OpenJDK构建版本”,并且“Oracle还将开源商业功能,例如以前只能在Oracle JDK中使用的Java Flight Recorder”。但它并没有说明Oracle JDK现在是开源的。我错过了什么吗? - Turkhan Badalov
@TurkhanBadalov Oracle发布了两款产品,都基于OpenJDK源代码:(a) 商业产品Oracle JDK,可能与OpenJDK不同,例如具有快速更新的补丁,以及(b) 直接从OpenJDK代码库构建的免费版本。有关更多详细信息,请参见我的答案 - Basil Bourque
4个回答

46

其他答案都是正确的。以下是一些其他信息,包括2021年初的重要更改。

源代码与二进制文件/安装程序

了解Oracle JDK和OpenJDK之间的区别。

总的来说:源代码二进制文件/安装程序

  • OpenJDK是一个开源项目,实现了定义Java平台Java规范, JSRsJEPs。该项目仅发布源代码,而不是二进制文件或安装程序(除了一些早期访问版本)。Oracle是OpenJDK项目的主要参与者,还有IBM&Red Hat、Apple、SAP、Azul Systems、Microsoft等公司。
  • 许多公司提供OpenJDK的发行版作为二进制文件或安装程序进行安装。Oracle就是其中之一。

实际上,Oracle提供了两种产品:

  • Oracle JDK
    一种商业产品,提供付费支持计划。(仅限于开发和测试免费,不包括部署。请阅读他们的条款)
  • jdk.java.net
    OpenJDK源代码的构建版本,免费提供,但不提供技术支持。

Oracle已经宣布他们的商业产品Oracle JDK将保持与OpenJDK相同的功能。Oracle甚至开源并无偿提供了他们曾经的商业工具Mission ControlFlight Recorder,现在都是OpenJDK的一部分。因此,几乎没有实际区别。一个重要的区别是,Oracle公司有权为他们的付费支持客户快速提供OpenJDK中目前没有的紧急补丁。同样适用于其他销售支持服务的供应商。

[值得注意的是,Oracle还提供了另一种Java实现GraalVM,这是一种非常专业化的产品。]

这是我制作的流程图,以帮助您选择Java实现的提供商。

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

以下是选择发行版时可以考虑的动机列表。

Motivations in choosing a vendor for Java


8
太棒了,这个图表值得大量点赞。源代码和安装程序之间的区别让我一切恍然大悟。 - RTHarston
1
很棒的回答!顺便说一下,微软现在也维护了一个OpenJDK版本:https://devblogs.microsoft.com/java/announcing-preview-of-microsoft-build-of-openjdk/ - Sachin Joseph

14

2017年11月: 当时提出这个问题时,选择OpenJDK和Oracle JDK的原因包括:

  • 针对特定平台的构建/安装程序的可用性。例如,上次我检查时,在Debian / Ubuntu中没有“.deb”格式的Oracle JDK发行版,也没有Windows上的OpenJDK构建。

  • Oracle JDK具有一些商业功能,可以由支付费用的人启用。它们在OpenJDK上不存在。

  • Oracle JDK有一个让人恼火的点击许可证。如果你尝试自动化部署,例如到云VM,则会很痛苦。相比之下,至少在Linux上,可以使用平台的软件包管理器安装和更新OpenJDK。

  • 如果您想要OpenJDK的商业支持,则可能会遇到问题。

如果您只打算使用软件,那么Oracle JDK和OpenJDK之间就没有实质性的许可差异。(对于Oracle JDK的二进制重新分发存在一些限制,但它们是关于发布Java平台的非标准或剥离版本的。)

根据这个博客页面,在未来,其中一些差异将消失:


2018年12月更新:

  • 从2019年1月起,Oracle JDK Java 8将停止商业用途。 (但个人使用的免费支持将继续到2020年1月。) 1

  • Java 9和Java 10已经停止维护。

  • 商业使用Oracle JDK Java 11及以上版本需要来自Oracle的支持合同或订阅。OpenJDK Java构建不需要此要求。

  • Oracle不提供对OpenJDK Java构建的支持,但第三方可以提供支持。第三方还会将Oracle的安全修复程序移植到OpenJDK构建中。

  • 进一步阅读:


    1 EOL代表终止生命周期。 终止生命周期(EOL)产品是指不再获得继续支持的产品,原因是由于现有的市场营销、支持和其他流程被终止,或者已经到了其有用寿命的末期。


    关于Java 8的OpenJDK不完全正确/不是最新的。目前(2020年7月),Oracle为Java 8提供更新的Oracle JDK免费向公众提供非生产使用。这将无限期地继续下去,至少到2021年。Oracle承诺会提前18个月通知停止这些更新。付费客户继续获得相同产品的支持。请参阅官方Oracle页面《Oracle Java SE Support Roadmap》(https://www.oracle.com/java/technologies/java-se-support-roadmap.html)。Java 8给“长期支持(LTS)”这一短语赋予了新的含义。 - Basil Bourque

    2

    OpenJDK与发行版更新过程紧密集成。例如,在Fedora上,这意味着您只需运行以下命令:

    dnf update
    

    不激活第三方存储库,您将获得最新的OpenJDK版本以及所有相关修复。

    在这个特定的发行版上,分发商对OpenJDK进行了测试。Oracle有不同的参考平台用于测试OpenJDK。在Fedora的情况下,使用Java编写的软件与由发行版提供的OpenJDK版本一起进行测试,而该软件与Oracle JDK的组合接受的测试要少得多。

    Oracle还捆绑了他们的Java下载与其他软件,如浏览器工具栏、性能测量和监控工具。


    1
    抱歉,也许对于其他人来说这些问题很明显。但是你所说的“分发更新过程”是什么意思?你指的是哪个发行版?而你所说的“分发供应商”又是什么意思?所有在Open JDK上工作的人都包括吗? - Turkhan Badalov
    人们通常使用Debian/Red Hat/SuSE/Ubuntu提供的OpenJDK。如果你在Windows上,这一切可能没有太多意义。(您的问题没有说明这一点。) - Florian Weimer
    我使用Fedora。为什么Windows不适用呢?难道Windows有特殊权限吗?我甚至不知道我缺少了什么。 - Turkhan Badalov
    Windows和MacOS是唯二的主要操作系统,供应商不分发OpenJDK,因此权衡是不同的。 - Florian Weimer

    1

    对于2019年阅读此文的人们:

    Java SE 8是最后一个针对桌面部署(例如,Java Web Start和独立系统JRE)的Java SE版本。 Java SE 8将在2019年1月结束公共更新,此后商业用户需要转向其他技术或购买Java SE订阅

    因此,使用OpenJDK的另一个原因(除了Stephen C 所说的之外)是:它可以免费用于所有目的。


    1
    OpenJDK只是源代码,不是产品,也不是二进制文件或安装程序。因此,除非您自己构建,否则无法实际使用OpenJDK。 - Basil Bourque
    没错。因此,您可以支付Oracle获取二进制文件和支持,或选择一个OpenJDK版本并使用它。它可以是操作系统提供的软件包(例如在Linux中),也可以是预构建的二进制文件,例如[Amazon Coretto](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html),您可以下载并使用。或者自己构建。在所有情况下,您都没有Oracle支持,因此不需要为此付费。 - madhead
    你没有理解我的观点。你的回答是不正确的。(A) 你不能“使用OpenJDK”,你只能使用由OpenJDK项目提供的源代码构建的产品。(B) 你声称任何完全或部分基于OpenJDK源代码构建的产品都是免费的,这是不正确的。一些供应商提供免费产品,而一些则收取费用,如我的回答中的流程图所示。Oracle并不是唯一收费的公司。 - Basil Bourque
    我从未声称“任何完全或部分基于OpenJDK源代码构建的产品都是免费的不正确”。Oracle的构建确实使用了OpenJDK代码库,而它们并不是免费的。我的观点是,在过去的某个时刻,Oracle开始向客户收取使用其专有构建的费用。这是另一个从Oracle转向一些OpenJDK版本的原因。此外,正如我在之前的命令中所说,Oracle确实提供了自己的免费OpenJDK构建,但它们缺乏支持。 - madhead
    “Oracle Java SE Support Roadmap”清楚地指出了“Oracle JDK”和“OpenJDK builds from Oracle”的区别。 - madhead
    显示剩余2条评论

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