我可以为生产环境和商业用途使用哪个免费版本的Java?

118

当我在我的当前工作中进行docker化项目时,我有一个疑问:我可以使用哪个Java版本?

这个疑问是由于以下原因:

java download alert

所以经过一些研究,我得出了以下结论:

  • 自2019年4月16日的Java 8更新8u221以来,所有版本和更新(Java 8、9、10、11和13)仅适用于个人使用和开发目的没有费用。任何其他用途都需要商业许可证
  • 早于7的旧版没有并且不会有任何更新。如果需要更新这些版本以支持Legacy Systems,则可能需要销售联系。
  • 如果我想要使用Java 8 Oracle版本进行商业目的免费,我需要使用2019年4月16日8u221更新之前的旧版本

问题

根据我的结论:

  • 如果我的开发严格需要或是使用了JDK 8,那么我只能使用Oracle Java SE 8 JDK 8u202及之前的版本用于免费的商业用途,但需接受问题和安全性问题?

  • 如果我可以更改我的开发,并且仍然希望免费并且希望得到改进和安全更新,我必须使用这些Java开放实现之一吗?


参考资料


3
这里有一个很不错的视频讲解:https://www.youtube.com/watch?v=eBuFzQeiGe0 - antikbd
感谢您提供JDK 8下载链接(不受支持但免费版本)。这正是我所需要的。 - Jarekczek
1
Oracle提供JDK 17版本的构建,使用另一种许可证:oracle.com/downloads/licenses/no-fee-license.html。这会有实质性的变化吗?这可能是Oracle客户的游戏规则改变者。我将坚持使用https://adoptium.net/(adoptjdk新家)。 - Jayan
@joachim-sauer,oracle.com/downloads/licenses/no-fee-license.html中有太多的律师术语:S。我认为这些是理解这个新的Oracle广告的一些关键部分:仅限于内部业务操作,只有在Oracle明确授权的情况下才能使用。另一方面,根据#sunny的回答,只有17版本可以用于生产。 - JRichardsz
2
@JRichardsz:是的,这也是我的问题。这就是为什么我不会轻易相信“现在免费”的消息,并希望得到一个真正了解许可证并能将其解释为简单英语的答案。暂时我肯定会将该许可证视为“有污点的”,即不会使用Oracle JDK。 - Joachim Sauer
你唯一应该依赖的正确解释法律术语的人是一个合格的律师。在这里你很可能找不到这样的人,也很可能找不到愿意免费提供许可证解释的人。如果这对你很重要,那就付费寻求适当的法律建议吧。 - Stephen C
5个回答

95

更新 2021-09

  • 对于8到16版本,如果生产环境中使用他们自己的 Oracle JDK 产品,Oracle需要收取一定费用,但在开发、测试和培训使用方面则不需要。
  • 对于Java 17,Oracle JDK 产品可以根据新的无费条款和条件许可证进行获取,详情请参阅Oracle公司博客上的介绍

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

请记住,许多其他供应商仍然提供Java规范的实现,如下图所示。其中一些供应商出售支持计划,或作为必需品。永远不要假设,始终阅读获取的任何发行版的详细要求。

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


几个供应商提供Java实现的选择

Speakjava的回答是正确且信息量丰富的。

此外,我制作了一个流程图,以指导您选择Java实现的供应商。

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

或者另一种查看方式:您特定的动机或情况。

选择Java供应商的动机


1
@JRichardsz 一般建议:当您没有特定的选择Java供应商的标准,并且确定不想购买支持时,➠只需使用https://AdoptOpenJDK.net。如果您知道将部署到Amazon Web Services云,则使用Corretto。如果您想购买支持,请从蓝色桶的左侧选择。如果您需要特殊的JVM,请使用Zing - Basil Bourque
所以根据这个图表,我可以在我的工作笔记本电脑上使用任何版本的JDK进行开发,只要我不将其用于生产部署,是这样吗? - Yar
3
不,不正确。请仔细阅读流程图。蓝桶右侧的产品是免费的。蓝桶左侧的产品在条款方面有所不同,可能会有限制,也可能需要收费或不需要收费。例如:我相信Azul Systems要求用户为其Zulu产品的开发和部署付费,但他们的Zing产品则不需要(顺便说一下,该产品的名称最近已更改)。重要提示:最终,您必须自己调查产品的许可条款,而不能信任互联网上用流程图绘图工具的某个傻瓜。 - Basil Bourque
1
只是强调Basil所说的:重要提示:最终,您必须自己调查产品的(当前)许可条款,而不是相信互联网上的某个流程图绘制工具。 - Stephen C
2
@JoachimSauer 是的,确实如此。已经在答案前加了一条更新注释。谢谢。 - Basil Bourque
显示剩余8条评论

54

摘要

如果你需要在你的生产服务器上免费使用Java,你有两个选择。

#1 OpenJdk

OpenJDK是Java SE规范的开源参考实现,但它只是源代码https://github.com/openjdk

不同供应商为多个支持的平台提供二进制发行版。

其中一个是由Oracle维护的https://jdk.java.net/java-se-ri/19

来源:https://whichjdk.com

#2 第三方定制的JDK

亚马逊 Corretto Zulu

OTN许可证与BCL许可证

Oracle JDK 8(又称1.8版)不再使用BCL(二进制代码许可证)。从2019年4月16日起,Oracle JDK 8使用OTN(Oracle技术网络)许可证,您需要创建一个Oracle账户来下载JDK 8并支付费用!

BCL = Oracle二进制代码许可证

  • 您可以使用它,但不能修改它
  • 如果出现任何问题,您同意不起诉Oracle
  • 您可以重新分发/发布它(以便您可以销售嵌入Java的产品),但如果这样做,您同意赔偿Oracle;因此,如果有人起诉您,您不能牵涉Oracle进来。

它实际上只是用来保护Oracle的知识产权,并在发现错误时保护他们免受诉讼的影响。

来源:https://www.quora.com/In-short-what-does-the-Oracle-Binary-Code-License-Agreement-for-Java-SE-actually-say-or-prohibit/answer/Jon-Harley

总结一下:免费但存在风险,且不承担任何责任

OTN = Oracle Technology Network License

总结一下:与BCL相反,只允许在您的笔记本电脑上进行开发,免费使用。对于企业来说,必须付费

OpenJDK和Oracle JDK

目前,OpenJDK和Oracle JDK都是由Oracle创建和维护的。

OpenJDK和Oracle JDK都是基于相同的Java规范通过TCK(Java技术认证套件)的实现。

大多数JDK供应商都是在OpenJDK的基础上进行了一些调整(主要是替换有许可的专有部分/替换为仅适用于特定操作系统的更高性能组件),以确保与TCK的兼容性。

源码:Oracle JDK和OpenJDK之间的区别

免费官方选项

在这里,我将列出并保持更新官方链接,以便下载最常用的Java版本

Oracle Java 1.4、5、6和7(已弃用)

Oracle在Java 1.4、5、6和7的下载页面上没有显示任何与许可证变更相关的消息。因此,我们可以将它们用于开发和生产部署,但需要接受由于这些版本过于古老而带来的问题和安全隐患。

Oracle下载链接: - [链接1](https://www.oracle.com/java/technologies/java-archive-javase-v14-downloads.html) - [链接2](https://www.oracle.com/java/technologies/java-archive-javase5-downloads.html) - [链接3](https://www.oracle.com/java/technologies/javase-java-archive-javase6-downloads.html) - [链接4](https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html)
旧版本7之前的遗留版本将不再提供更新。如果您的遗留系统仍在使用这些旧版本的Java,您可能需要联系销售部门寻求解决方案。
Oracle Java 8更新202版。
只有Java SE 8 JDK 8u202及更早版本是免费供开发和生产部署使用的。您可以从以下链接下载:

Openjdk 8(已弃用)

OpenJDK是ORACLE的一个倡议。更多详情请参见:https://adoptopenjdk.net/

压缩模式

您可以从这里下载最新的v8版本。最新版本:

点击这里使用curl下载

安装模式

apt-get install openjdk-8-jre (just run apps)
apt-get install openjdk-8-jdk (develop and run)

https://openjdk.java.net/install/开始

Openjdk 11

apt-get update
apt-get install openjdk-11-jdk

Openjdk 17

Openjdk 19

Openjdk 21



免受可信第三方的限制

Zulu社区(Java 6,7,8,11,13,14,15)

Amazon Corretto(Java 11) Eclipse OpenJ9

更多第三方实现

以下实现按字母顺序排列,是开源且免费使用的:

  • AdoptOpenJDK
  • Azul Zulu
  • Bck2Brwsr
  • CACAO
  • Codename One
  • DoppioJVM
  • GraalVM CE
  • HaikuVM
  • HotSpot
  • Jamiga
  • JamVM
  • Jelatine JVM
  • Jikes RVM (Jikes Research Virtual Machine)
  • JVM.go
  • leJOS
  • Maxine
  • Multi-OS Engine
  • RopeVM
  • uJVM


非免费选项

您需要为这些版本付费,但作为回报,您将获得由Oracle或其他第三方支持的许多功能。

Oracle Java

https://www.oracle.com/java/technologies/downloads/

Oracle Java 8 update 221

自2019年4月16日发布的Java 8更新版本8u221起,所有版本和更新(包括Java 8、9、10、11、14)仅适用于个人使用和开发目的,无需费用。任何其他用途都需要商业许可证。

来源:https://www.baeldung.com/oracle-jdk-vs-openjdk

专有实现

还有其他私有或商业实现:

  • Azul Zing JVM
  • CEE-J
  • Excelsior JET (已停产)
  • GraalVM EE
  • Imsys AB
  • JamaicaVM (aicas)
  • JBlend (Aplix)
  • MicroJvm (IS2T – Industrial Smart Software Technology)
  • OJVM
  • PTC Perc
  • SAP JVM
  • Waratek CloudVM for Java

来源:https://www.baeldung.com/oracle-jdk-vs-openjdk



注意事项



更多参考资料

48

随着JDK 9的推出,Oracle对Java平台的开发、分发和更新进行了一些重大变化。

回答您问题的关键事实如下:

  1. Oracle使用Oracle Binary Code License(OBCL)许可证来提供Java。这个许可证有使用范围限制(嵌入式使用需要商业许可证),但为普通开发和部署授予Oracle JDK的免费使用权。
  2. 从JDK 11开始,许可证已更改为Oracle Technology Network License Agreement(OTNLA),要在商业生产中使用,你需要购买Java SE订阅。 自4月份(更新211/212)以来,此许可证也已应用于JDK 8的更新。
  3. 从JDK 11开始,Oracle消除了Oracle JDK与仅基于OpenJDK源代码构建的二进制版本之间的所有功能差异。 Oracle JDK 11中不再包含浏览器插件、Java Web Start和JavaFX等重要组件。
  4. 您可以继续在生产中使用任何公共的Oracle JDK 7(及更早版本)的二进制版,而无需Java SE订阅,因为许可证仍然是OBCL(尚未追溯更改)。 您还可以如您所述,在OBCL的免费许可下使用JDK 8的202个更新。
  • 有几种选项可以继续免费使用带更新的JDK 8。其中之一是来自Azul的Zulu Community(我为该公司工作)。这是一个经过TCK测试的免费二进制文件,具有一些额外的后移功能(TLS 1.3和Java Flight Recorder)。由于此文件通过了TCK测试,从功能上看,它与Oracle JDK相同。除非您在使用Applets或Web Start,否则您的应用程序将与使用Oracle JDK时完全相同。
  • 如果您想升级到JDK 11(目前长期支持版本,由Oracle定义,但所有其他JDK提供商都遵循),那么您需要选择其中一个免费分发版(例如Zulu Community)。
  • 强烈建议确保您的JDK已经更新并包含所有相关的安全补丁。继续使用旧版本可能会使您面临重大安全漏洞。


    3
    抱歉我的回复有些迟了。总结一下,我们可以这样说:#1 从2019年4月16日8u221更新开始,由Oracle提供的JDK需要付费。#2 如果我们需要永久免费和免费更新,那么Oracle JDK不是选择,只有OpenJDK、Zulu、Azul和Corretto才是解决方案。 - JRichardsz
    2
    @JRichardsz 为澄清起见:Oracle 提供了两个Java实现:(A) Oracle JDK 是他们支持的产品,现在需要购买才能在生产中使用,在非开源许可下提供。您可以在https://www.oracle.com/technetwork/java/javase/downloads/index.html上找到它。(B) 另一个产品没有正式名称。您可以在https://jdk.java.net/上找到它。这个产品是免费的,并且是在 GNU General Public License, version 2 和 Classpath Exception 下发布的。显然,这是OpenJDK源代码的直接构建。其他供应商也提供Java。 - Basil Bourque

    6

    JDK 17开始(2021年9月)

    Oracle JDK 17及以后版本提供免费使用许可证,有效期至下一个LTS发布的一年后。此后,Oracle JDK将受OTN许可证约束。

    这里有一个相关的FAQs页面,其中包含更多解释,以下是从该页面提取的摘要:

    "Oracle将在JDK 17及以后的版本中使用NTFC。像JDK 17这样的LTS版本将在随后LTS版本发布一年后在此许可下接收更新。免费使用许可期过后,Oracle打算使用OTN License,这与Java 8和11 LTS版本目前使用的许可相同,用于随后的更新。非LTS版本(如JDK 18)将在其整个计划支持生命周期内都可在NFTC下使用。"

    来源:

    https://blogs.oracle.com/java/post/free-java-license

    https://www.oracle.com/uk/java/technologies/javase/jdk-faqs.html


    Spring、Mule和其他框架需要Java 8版本或更高版本:https://start.spring.io/。您的回答如何帮助选择生产环境中的**免费版本**Java?我认为这是您回答的主要部分:**在免费使用许可期限后,Oracle打算使用OTN许可证**。谢谢。 - JRichardsz
    1
    @JRichardsz 我的回答只是对现有答案的补充,但从2021年9月开始,随着JDK 17版本的发布,旧版本将不再受到免费使用许可证的覆盖,正如你所暗示的那样。 - M A
    请更新您的引用来源为 https://www.oracle.com/uk/java/technologies/javase/jdk-faqs.html 以提高清晰度。 - Tom Gregory

    1
    现在,您可以使用JDK/Java 17,在JDK/java7下载页面(https://www.oracle.com/java/technologies/downloads/),您可以看到以下评论:
    Java 17 LTS是Java SE平台的最新长期支持版本。 JDK 17二进制文件可免费在生产中使用和免费重新分发,在Oracle无费条款和条件许可下,不收取任何费用。
    JDK 17将根据这些条款接收更新,至少持续到2024年9月。

    Spring、Mule和其他框架需要Java 8版本或更高版本:start.spring.io。根据您提供的链接,只有17版本可以用于生产环境。 - JRichardsz

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