Oracle JDK开始收费后,我们还能用什么?
本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏
你好,我是方向盘(YourBatman)
📚前言
随着Oracle宣布“Oracle JDK商用收费”,Red Hat、AWS、Alibaba、Tencent宣布加入开源OpenJDK阵营,结果是:Java生态圈日趋碎片化,越来越明显。而再此之前,官方的Oracle JDK呈现近乎垄断趋势。如下图所示
这是2018年的JVM生态报告数据:Oracle JDK占超7成市场份额
这是2021年的JVM生态报告数据:Oracle JDK市场份额萎缩了非常非常多
国际不少主流厂商都在使用OpenJDK,比如 Google、Twitter、Amazon 和阿里巴巴,并研发了基于此构建的 JDK 版本。选择多了,生态似乎更“碎”了,为了减少对碎片化问题的潜在担忧,AdoptOpenJDK曾强烈鼓励所有OpenJDK提供商将补丁提交给 OpenJDK统一管理,但很明显这没有能成为现实。
Java 这么多年发展过来,大多数开发者已经习惯信任官方Oracle JDK,对社区OpenJDK 版本关注不够,所以从 Oracle JDK 到 OpenJDK 的切换需要一个过程。随着这些国际科技大厂的努力,OpenJDK的生态一定会越来越完善。
站在2022年档口看这个问题,作为一名Java开发者,有必要且必须对OpenJDK有所了解和熟悉了,毕竟你的公司可能大概率不愿意为Oracle JDK而付费,公司越大越是如此。
🚩所属专栏
🚩相关下载
- 【技术专栏源代码大本营】:https://github.com/yourbatman/tech-column-learning
- 【女娲Knife-Initializr工程】访问地址:http://152.136.106.14:8761
- 【程序员专用网盘】公益上线啦,注册送1G超小容量,帮你实践做减法:https://wangpan.yourbatman.cn
- 【Java开发软件包(Mac)】:https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit
🚩版本约定
- JDK 8/11/17
- Open JDK 8/11/17
✍正文
随着Oracle JDK市场份额越来越低,OpenJDK的重要性日趋凸显。但是不同于Oracle JDK那么“单纯好理解”,OpenJDK生态可谓丰富多彩非常热闹,自然也增加了我们的理解成本。
一会微软加入OpenJDK阵营,一会Alibaba的“龙井JDK”开源,一会AWS宣布免费支持JDK 8至少5年... 这都什么意思?和OpenJDK有什么关系?本文就来帮你解答这些疑问
🌈基础知识
在详细介绍各种OpenJDK之前,首先当然是要做些基础知识的普及,即使这些知识你已知晓。
🚀什么是JDK
JDK(Java Development Kit) 是Java语言的软件开发工具包(SDK)。JDK是整个java开发的核心,它包含了Java的运行环境(JRE = JVM + Java核心类库)和Java工具。
没有JVM,Java程序无法运行;
没有Java核心类库,Java就是无根之木,无源之水;
没有Java开发/运维/监控工具,Java源码就无法编译成字节码、没法监控。
🚀什么是Oracle JDK
Java毫无疑问是IT行业最重要的发明之一。1996年1月,Sun公司发布了Java的第一个开发工具包,我们称它为Sun JDK。2009年,甲骨文(Oracle)公司宣布收购Sun公司,从此更名为Oracle JDK。
Oracle JDK就是Sun JDK,持有Java商标,代表着Java官方。
https://www.oracle.com/java/technologies/downloads 这个下载页面,也被称作官方下载页面,Java开发者一定不陌生:
关于Oracle JDK开始收费:从2009年Oracle收购Sun公司,当时就有不少人开始担心Java收费的问题了。果不其然,这一天来了:时隔10年,Oracle于2019年4月16号宣布JDK开始商用收费,JDK从8u211版本开始。
Tips:8u211以下版本(比如JDK 8u210)不升级就不收费,升级但不商用也不收费
2021年9月,Oracle在发布Java 17时,开始提供一个不收费的许可模式(NFTC协议地址:https://www.oracle.com/downloads/licenses/no-fee-license.html),该许可会在三年内免费提供季度更新。但该模式只限于该版本的迭代,允许用户免费使用,甚至包括商业用途(不能与付费产品捆绑在一起),而不适用于 Java 7、8和11等早期版本,这就是口口相传的Java 17开始“免费”了。
Tips:好好阅读Oracle的收费规则、条款,会发现真tm套路多
市场上对 Java使用有很多混乱的地方,Oracle JDK收费还是不收费,几句话没法说清楚。总而言之,言而总之,不管你使用的是哪一个版本,只要你是从Oracle的网站上下载补丁和更新,那就得需要一个支持许可证,就(可能)需要收费。
Oracle号称是一个律师公司,在收费、打官司这一块,还没怕过谁。谨慎使用,特别对于大公司
🚀什么是OpenJDK
官方地址:http://openjdk.java.net;
OpenJDK是开源协议,拥有自由的再分发权,可以在发行的软件中直接内置一份OpenJDK,比如Intellij IDEA,以及JetBrain全家桶等软件都是内置OpenJDK的,而Oracle JDK是不能再分发和内置的,必须去单独下载。
OpenJDK根据许可证GPL v2发布;Oracle JDK根据Oracle二进制代码许可协议获得许可
2006年Sun公司在JavaOne大会上宣布将Java开源,并于2009年4月15日正式发布OpenJDK,这就是OpenJDK。从Java 7开始,OpenJDK就是Java SE的开源实现,他由SUN和Java社区提供支持,2009年Oracle收购了Sun公司,自此Oracle成为OpenJDK最主要的管理者之一。
所以,OpenJDK其实也叫做
Oracle OpenJDK
OpenJDK是由OpenJDK Community 、Oracle、IBM领导,连同 Alibaba,Amazon,Ampere,Azul,BellSoft,Canonical,Fujitsu,Google,Huawei,Intel,Java Community,JetBrains,London Java Community,Microsoft,Red Hat,SAP,SouJava,SUSE,Tencent,Twitter ,VMWare 等第三方共同开发、维护的 Java SE 开源参考实现。
OpenJDK Community领导的OpenJDK Project是Java SE 的官方参考实现(也就是Oracle OpenJDK),只产生 OpenJDK源码,并不提供可以直接使用的二进制文件格式。现在能直接使用的二进制文件格式的JDK都是被编译之后的程序。OpenJDK 官网指向的可下载二进制文件的地址,实际是Oracle’s OpenJDK下载的地址,它也是被 Oracle 编译后的版本。
在代码管理上,OpenJDK从2008年起一直使用Mercurial作为源代码管理解决方案,于2020年9月全部迁移至GitHub,地址为:https://github.com/openjdk/jdk。切换至Git代码版本控制系统的部分预期目的是提升性能和对代码审查的更好支持。
🚀Oracle JDK和OpenJDK的区别?
Open JDK和Oracle JDK都来自Sun公司,JVM都是HotSpot VM,从源码层面说,两者基本上是同一个东西。只有非常非常少量的功能在Oracle JDK里有二Open JDK没有,且这些不涉及JVM的核心(比如Java Flight Recorder)。
简单理解:OpenJDK是开源的,Oracle JDK是官方的。另外,Oracle JDK只发布二进制安装包,而OpenJDK只发布源码。自Java SE 7开始往后的版本,所有的JDK都源自于OpenJDK。所以严格意义上来说Oracle JDK也是Open JDK 的一个发行版而已。
Oracle JDK持有Java商标,可以使用它以及宣传它,而OpenJDK不能使用Java商标(关键字)。这一点从java -version
里能看出来:
对于OpenJDK,听过阿里JDK、腾讯JDK、IBM JDK、微软JDK,这些都是啥啥啥呢?
🌈OpenJDK发行版
OpenJDK builds,也叫OpenJDK发行版。“发行版”这三个字咱熟悉啊,是的,它与其它JDK的关系就和Linux与它的众多发行版(如CentOS、Ubuntu等)是一样一样的。所有的JDK都源自于OpenJDK。所以严格意义上来说Oracle JDK也是Open JDK 的一个发行版而已。
目前而言,所有的OpenJDK发行版都是OpenJDK的下游
OpenJDK是开源的,任何人都可以获取该源码,并通过源码构建一个变种发布到网络上。当然喽,为了避免乱象、误导人,发布前需要一个独特的认证程序来确保这个“变种”是靠谱的,它就是JCP的技术兼容性工具包,也就是大名鼎鼎的TCK。
关于JCP,笔者前面写的这篇文章非常赞:阿里巴巴入选的JCP最高执行委员会,何方神圣?
如果“变种”通过了TCK的兼容性测试,那么可以认为它是兼容Java SE的JDK,可用于生产环境商用。注意:只是兼容Java SE,但不能使用Java商标哦。至于“变种”的取名,随意~
制作“变种”的过程中,可以添加一些额外的标记或实用程序。但特别注意不要影响TCK测试以及JCP的认证程序。例如,“变种”不能为API添加新的公共方法,或者其它语言级别的特性。
就开发者而言,目前OpenJDK的选择越来越多,这不见得一定是件坏事。并且,不同版本之间的兼容性其实非常高,迁移成本几乎为零,这不会给用户使用造成额外负担。不同的版本在性能优化、平台支持等方面确实存在些许差异,开发者可以根据需要进行选择。
🚀OpenJDK发行版概览
笔者这里以2021年JVM生态报告中的JDK部分为例,了解下比较常见的OpenJDK发行版。
发行版 | LTS | 未改上游的构建 | TCK测试 | 宽松式许可证 | 商业支持 |
---|---|---|---|---|---|
AdoptOpenJDK | 是 | 可选 | 通过 | 是 | 可选(IBM) |
Eclipse Temurin | 是 | 可选 | 通过 | 是 | 可选(IBM) |
Oracle OpenJDK | 否 |
是 |
通过 | 是 | 否 |
Oracle Java SE | 是 | 否 | 通过 | 否 |
是 |
Azul Zulu | 是 | 否 | 通过 | 是 | 可选 |
Amazon Corretto | 是 | 否 | 通过 | 是 | 可选(AWS) |
Linux发行版捆绑的 | 是 | 否 | 通过 | 是 | 否 |
Red Hat OpenJDK | 是 | 否 | 通过 | 是 | 是 |
Oracle GraalVM CE | 否 |
否 | 通过 | 是 | 否 |
IBM Java SDK | 是 | 否 | 通过 | 否 |
是 |
Alibaba Dragonwell | 是 | 否 | 通过 | 是 | 否 |
Tencent Kona | 是 | 否 | 通过 | 是 | 否 |
Huawei Bisheng | 是 | 否 | 通过 | 是 | 否 |
Tips:商业支持表示可由公司提供商业付费服务
可以看到发行版的OpenJDK大部分都是可以免费商用的,商用付费的代表是Oracle JDK和IBM、RedHat的OpenJDK。
接下来,详细的了解下这些发行版OpenJDK。
🚀AdoptOpenJDK / Eclipse Temurin
官网:https://adoptopenjdk.net
AdoptOpenJDK是一个开放的,完全无品牌的,社区主导的OpenJDK,它提供了来自OpenJDK的Java平台参考实现的免费、预构建的二进制文件。AdoptOpenJDK的发展方向由个人开发者主导,保持中立,不受制于商业公司,由专门的技术指导委员会来确保这一点,从而确保定期更新可供所有人跨平台免费使用。
它的特点是涵盖了最全面的操作系统和体系结构,使用AdoptOpenJDK二进制文件可以确信它在所有环境中的构建和测试都完全相同。
AdoptOpenJDK社区非常活跃,有大量不同的测试可供使用,以验证每个构建的质量,从而确保应用程序按预期运行和运行。很多世界财富500强公司的JVM应用都构建在AdoptOpenJDK之上,足矣见得其可靠性
除此之外,它还提供了两种虚拟机实现:HotSpot(基于标准OpenJDK构建)和OpenJ9(支持IBM的J9 JVM虚拟机),前者更成熟稳定,后者占用资源更少、启动更快,更适合容器化。
🚩下载量
AdoptOpenJDK 已经取得了巨大成功,得到了广大开发者的青睐,特别是Oracle JDK 更改商业授权协议以后。
🚩加入Eclipse基金会
每一个开源项目发展的过程中都会做出一些抉择和判断,以保证项目的独立性和长寿性。随着AdoptOpenJDK成了规模,需要管理、后勤、法律合规性都得跟进,经研究后, 2020年6月19日最终选择了加入Eclipse基金会。Eclipse 基金会对Java 生态中有着悠久的历史和丰富的经验,成功的管理了很多知名项目,可以提供专业营销,品牌保护和法律支持。
加入Eclipse基金会后,就得有品牌喽,这才好宣传。因此启用了新的名称:Eclipse Adoptium,同时官网也从https://adoptopenjdk.net 迁移到 https://adoptium.net。
🚀Oracle OpenJDK
它就是OpenJDK本K。
🚀Azul Zulu
Zulu是OpenJDK的免费版本,但同时提供商业付费支持。当然,即使不付费,也可以得到免费的社区支持。Azul为此有一个广泛的计划以支持Zullu的商业化,所以还是比较靠谱的,更新也很快很及时。
🚀Amazon Corretto
官网:https://aws.amazon.com/cn/corretto
Amazon Corretto 是OpenJDK的免费、多平台、生产就绪型发行版。Corretto 提供长期支持,其中包括性能增强和安全修复。Amazon在内部的数千种生产服务上运行 Corretto,并且 Corretto 已被证明能够兼容 Java SE 标准。借助 Corretto,您可以在常用操作系统(包括 Linux、Windows 和 macOS)上开发和运行 Java 应用程序。
🚀Linux发行版捆绑的
也就是在Linux操作系统里,可通过内置的yum源/apt源直接安装的OpenJDK,不太建议直接运用在生产环境。
原生Linux系统,CentOS 7.8 64位捆绑的OpenJDK:
Alibaba Cloud Linux 3.2104 64位捆绑的OpenJDK:dragonwell是阿里夹带的私货,可以免费商用
🚀Red Hat OpenJDK
官网:https://developers.redhat.com/products/openjdk/download
一句“红帽出品,必属精品”就能感受到此JDK的实力。仅支持Linux和Windows版本安装。
🚀Oracle GraalVM CE
GraalVM被称作下一代虚拟机,也是一个通用的虚拟机,可以运行用JavaScript、Pytho n、Ruby、R、JVM等语言编写的应用程序,GraalVM消除了编程语言之间的隔离,并在共享运行时启用互操作性。它可以独立运行,也可以在OpenJDK、Node.js或Oracle数据库的上下文中运行。
GraalVM技术值得关注,云原生时代,Native技术越来越火热,GraalVM可能会逐渐走向舞台中央。云原生框架Quarkus和Micronaut都很有潜力,当然Spring也不示弱:Spring Native + GraalVM
可以让一个普通的Spring Boot应用在100ms内启动,并且还节约内存。
🚀IBM Java SDK
官网:https://www.ibm.com/support/pages/java-sdk
IBM为Java 8及更早版本提供并支持 JDK。他们还使用 OpenJ9 为 Adopt Open JDK 构建提供商业付费支持。
🚀Microsoft Build of OpenJDK™
官网:https://www.microsoft.com/openjdk
代码库地址:https://github.com/microsoft/openjdk
微软做(任何)软件,都是一股不可忽视的力量。它是开源免费的,可以用在任何地方。支持Windows、macOS、Linux三大平台,同时还支持arm架构(如苹果的M1处理器)。
🚀国产OpenJDK
2019年3月:阿里巴巴宣布重磅开源OpenJDK长期支持版本Alibaba Dragonwell;
2019年11月:腾讯宣布开源OpenJDK长期支持版本Tencent Kona;
2020 年9月:华为宣布开源OpenJDK长期支持版本Huawei Bisheng。
一下子,国产OpenJDK好似热闹。这三个大厂开源的OpenJDK各具特点:
- Alibaba Dragonwell:针对在线电子商务、金融和物流应用程序进行了优化
- Tencent Kona:在云场景的支撑及特性进行了开发及优化,使其更加适合云场景下的 Java 业务
- Huawei Bisheng:做了大量稳定性增强功能,并针对ARM架构做了大幅性能优化
目前,三者的start数量为(只统计8版本):
- Alibaba Dragonwell:3.5k
- Tencent Kona:765
- Huawei Bisheng:419
“用脚”投票,在Java领域,开发者严重的权威还是阿里巴巴。还有个小细节,只有Alibaba Dragonwell拥有专属域名的官网以及Logo,其它哥俩只有Github/Gitee。
🚩Alibaba Dragonwell
官网:https://dragonwell-jdk.io
“Dragonwell”中文译为龙井,象征着中国的茶文化,又恰好是杭州特色(阿里巴巴总部所在地);“well”一词通常被描述为水源汇聚在一起供大家享用,希望可以集合所有开发者的力量不断完善该项目并最终贡献给所有用户。
支持的版本、平台如下图所示:
Alibaba Dragonwell是OpenJDK在生产环境的可靠替代品,是一款免费的, 生产就绪型Open JDK 发行版,提供长期支持,包括性能增强和安全修复。阿里巴巴拥有最丰富的Java应用场景,覆盖电商,金融,物流等众多领域,世界上最大的Java用户之一。Alibaba Dragonwell作为Java应用的基石,支撑了阿里经济体内所有的Java业务。
🚩Tencent Kona
官网:https://github.com/Tencent/TencentKona-8
腾讯Kona是Open Java Development Kit (OpenJDK)的无成本、可生产的发行版,长期支持(LTS),每季度更新一次。腾讯公司不以Java著称,但没想到对OpenJDK的贡献却国内第一:
Kona是腾讯内部默认的JDK,为极端规模的大数据、机器学习和云计算工作负载而优化。它还被用来构建和维护腾讯支持的OpenJDK版本,供希望使用OpenJDK运行其应用程序的腾讯客户和合作伙伴使用。
目前仅支持Linux/x86_64平台。
🚩Huawei Bisheng
官网:https://gitee.com/openeuler/bishengjdk-8
“毕昇”的源码托管在国产的Gitee里,Github上只做镜像定期同步,华为不愧为国产拥护者呀。
毕昇JDK是华为内部OpenJDK定制版Huawei JDK的开源版本,是一个高性能、可用于生产环境的OpenJDK发行版。Huawei JDK运行在华为内部500多个产品上,积累了大量使用场景和java开发者反馈的问题和诉求,解决了业务实际运行中遇到的多个问题,并在ARM架构上进行了性能优化,毕昇JDK运行在大数据等场景下可以获得更好的性能。毕昇JDK 8与Java SE标准兼容,
目前支持Linux/AArch64、Linux/x86_64平台。毕昇JDK同时是OpenJDK的下游,现在和未来也会持续稳定为OpenJDK社区做出贡献。
🍞总结
本篇文章是不是能让你长见识?毕竟,“龙井”和“毕昇”在本文有了联系,竟然是因为JDK。
2021年JVM生态技术报告可以发现趋势:OpenJDK 越来越多地被使用,开始成为主流选择。目前国际、国内各大互联网公司纷纷都开源了自己的JDK,趋势不可挡,不付费就必须拥抱OpenJDK。
推荐阅读
- 【方向盘】2021年JVM生态报告:Java 11使用率超Java 8
- 【方向盘】Spring Boot 2.7.0正式发布,弃用OkHttp 3、弃用spring.factories机制
- 【方向盘】YourBatman表白了,在Java 27岁生日这天
- 【方向盘】工具提效:Sublime Text 4的常用快捷键合集
- 【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(Git&Other&完结篇)
我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖...是我不可抹灭的黑标签
- 🎓2013.07 清考、毕业答辩3次未通过、延期毕业
- 🏷2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作
- ️️🏷2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作
- 🏷2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人
- 🏷2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer
- 🙅🏻♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委
- 📚高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍
《Spring奇淫巧技》
序号 | 专栏名称 | 简介
-------- | ----- | -----
01 | 【方向盘】-程序人生 | 程序人生,人生程序
02 | 【方向盘】-资讯/新特性 | IDEA、JDK、Spring技术栈......新特性
03 | 【方向盘】-IntelliJ IDEA | 熟练使用IDEA就相当拥有物理外挂,助你高效编码
04 | 【方向盘】-Bean Validation | 熟练掌握数据校验,减少90%的垃圾代码
05 | 【方向盘】-日期时间 | 帮你解决JDK Date、JSR 310日期/其实 的一切问题
06 | 【方向盘】-Spring类型转换 | Spring类型转换-框架设计的基石
07 | 【方向盘】-Spring static | static关键字在Spring里的应用
08 | 【方向盘】-Cors跨域 | 关于跨域请求问题,本专栏足矣
09 | 【方向盘】-Jackson | Almost Maybe是最好的Jackson专栏
10 | 【方向盘】-Spring配置类 | 专讲@Configuration配置类,你懂的
11 | 【方向盘】-Spring技术栈 | 暂无所属小分类的,Spring技术栈大分类
12 | 【方向盘】-JDK | 暂无所属小分类的,JDK技术栈大分类
13 | 【方向盘】-Servlet | Servlet规范、Web相关内容专题
14 | 【方向盘】-Java EE | 从Java EE到Jakarta EE,30年弹指一挥间
15 | 【方向盘】-工具/提效 | 开发工具、软件工具,目标是提效
16 | 【方向盘】-Spring技术栈新特性 | Spring Framework、Spring Boot、Spring Cloud、Spring其它技术
17 | 【方向盘】-基本功 | 每个Javaer,都需要有扎实的基本功
... | ... | ...
99 | 源代码库 | 大多数专栏均配有源代码,都在这里