OpenJDK与OracleJDK--不挣钱的永远是二等公民
众所周知,编程语言是的根是它的标准。标准和国际技术组织密切相关,比如
- c++标准,由国际标准化组织(ISO) 的 C++ 标准委员会ISO/IEC JTC1/SC22/WG21)维护更新,他们发布的标准称为ISO C++ ,比如c++17,c++24.
- golang 的维护组织称为 Go 核心团队 。
- java的标准由一个开放国际技术组织Java Community Process (JCP)专门维护更新。
这些组织严格来说都是独立的技术社区,不隶属任何公司。但每个语言的组织都很大公司有颇深渊源。
来看一看java的历史:
早在1991年,当时编程界还是C语言的天下,新秀c++也崭露头角。当时 Sun Microsystems 的工程师 James Gosling(詹姆斯·高斯林)等人开始开发一种出了java的原型。
1995 年 5 月 23 日:Sun 公司在 SunWorld 大会上正式发布了 Java 1.0。这是 Java 的第一个公开版本,标志着 Java 语言的正式诞生。此时的Java,JDK等工具,标准,实现完全属于Sun。持续到java1.3。
直到三年后的1998年,sun建立了JCP, Java 也从一个由单一公司主导的技术,逐步演进为一个由全球开发者和企业共同监督和发展的技术平台,我们熟知的javaSE便是其中的标准之一。但此时的java仍然属于sun的商业产品。
直到2006,此时java已经更新到1.6,sun公司在JavaOne大会上宣布将 Java 开源。次年2007,Sun 公司正式发布 OpenJDK,启动OpenJDK项目。这是 Java SE 的开源实现,使用GPL v2 许可证。第一个开源的java:Open JDK6,基于Sun公司的商业项目JDK6。
后来2010,Sun被Oracle收购。java的一切被Oracle接管,包括正在开发的JDK7。OpenJDK项目,JCP也都由Oracle参与主导,官方的JDK全名就是OracleJDK,开源版OpenJDK由于背靠Oracle,也算“官方”,这是java标准的官方开源实现。
那既然有官方JDK,也就有“野生”JDK,基于OpenJDK,许多科技公司会自己拿过来,强化一下,或者精简一下,更重要的是,自己造的不花钱,然后发布自己的各种JDK。比如我们在IDEA下载JDK时能看到各种供应商:

再往后的故事就很简单了:更新标准,发布JDK,发布OpenJDK,大家都有美好的未来。
但是,大家虽然都是JDK,但差距是客观存在的。比如java8的标准中有支持FX一条,而我用的CorretoJDK就不支持,调用FX类发现少了运行库。
这很正常,用开源就别怕折腾,别怕风险。想要稳定完整有售后,买OracleJDK就得了。
这也是本文的主题。开源的文化或者精神所在大致如此,商业公司在其中扮演的角色,在我看来是积极的。依靠热情,用爱发电的项目总归难以长久,而公司们依靠科技+服务的商业模式赚到钱,带动开源社区发展,这是长久可持续的。
最后再说说Orcale不干人事的地方:(Oracle)JDK的许可证即收费策略。科技产品的许可证都有一个通用大原则:你自己免费玩随便搞,毕竟他们不给大家也都能搞到,但你挣钱了,必须分我一份。
其中JDK8是一个分界线:JDK8u202及以前版本永久免费。之后从211开始则商业用途收费。在官网下JDK时也能看到从提示。
对于发布的普通更新版:比如JDK9,10,13,14,永久免费。但是,Oracle只负责维护6个月,因为6个月后要发布下一版咯。这些版本属于只生不养,我不要钱,出了问题也别找我。
每更新几次,Oracle会发布一个长期支持版LTS,在一段时间内(大约十几年,看心情和销量)Oracle会更新维护。比如:JDK8支到24年12月。JDK11支持到2032年1月。17,21也都是长期支持。LTS有自己的收费策略:一般自发布起3年免费使用,而后就要商业收费。
注意,不支持是说Oracle官方不再更新维护,但不意味着不能用。能用要考虑:许可证,要不要给Oracle交钱,已经:物理上能不能用,会不会出问题。
比如伟大的JDK8u202,即使不再支持,其也仍是未来10java开发界的主力。
对于个人用户来说,随便挑,java8也够用,看上那个新特性直接去官网下。
对于公司用哪个,取决于业务,或者说,那是老板考虑的事。
以上。
OpenJDK与OracleJDK--不挣钱的永远是二等公民的更多相关文章
- OpenJDK和OracleJDK的区别
在2006年11月13日的JavaOne大会上,Sun公司(当时还没被收购)宣布计划要把Java开源,在随后的一年多时间内,它陆续地将JDK的各个部分在GPL v2(GNU General Publi ...
- OpenJDK和OracleJDK的JVM性能有多大差距
首先要先明确OpenJDK和Sun/OracleJDK之间,以及OpenJDK 6.OpenJDK 7.OpenJDK 7u和OpenJDK 8等项目之间是什么关系,这有助于确定接下来编译要使用的JD ...
- CentOS 7 卸载 OpenJDK 安装 OracleJDK
查看 JDK 安装版本 java -version java version 1.7.0_51 OpenJDK Runtime Environment ( rhel-2.4.5.5.el7-x86_6 ...
- Oracle JDK与OpenJDK到底有什么不同?
不知道各位developer平时是否有过疑问,Oracle JDK是什么,OpenJDK又是什么? Oracle JDK便是平常我们在windows系统上做开发使用的JDK,又称作SUN JDK.O ...
- ZGC 最新一代垃圾回收器[NO]
ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,ZGC可以说源自于 Azul System 公司开发的C4收集器[基本不用调优]它的设计目标包括: ...
- 学习Linux系列--安装软件环境
本系列文章记录了个人学习过程的点点滴滴. 回到目录 10.安装Lamp套件. 最简单的方式,如下 sudo tasksel install lamp-server Apache 菜鸟教程 Ubuntu ...
- 为什么做java开发的公司需要那么多程序员?
注:文章转载自知乎 透过现象看本质. Java是企业应用市场的王者,如果一家非互联网公司用Java,那么十有八九是做企业应用的. 所以,这个问题本质上是:为什么做企业应用的公司需要那么多Java程序员 ...
- linux下切换python2和python3(转)
0x00 为什么需要有两个版本的Python Python2和Python3不兼容是每个接触过Python的开发者都知道的事,虽说Python3是未来,但是仍然有很多项目采用Python2开发.Lin ...
- Java第一周学习总结5311
20145311 <Java程序设计>第1周学习总结 教材学习内容总结 第一章1.1java的历史:总的来说,Java经历了许许多多版本的变迁,目前已经成为一种经常使用的计算机编程语言.J ...
- 《深入理解Java7核心技术与最佳实践》读书笔记(1.1)---Project Coin介绍
OpenJDK中的Coin项目(Project Coin)的目的就是为了收集对Java语言的语法进行增强的建议.在Coin项目开始之初,曾经广泛地向社区征求提议.在短短的一个月时间内就收到将近70条提 ...
随机推荐
- 一个 .NET 开源、免费、功能强大的Windows应用卸载神器
前言 今天大姚给大家分享一个基于 .NET 开源(Apache License).免费.功能强大的Windows应用卸载神器:Bulk Crap Uninstaller. 项目介绍 Bulk Crap ...
- [记录点滴]Redis实现简单消息队列
[记录点滴]Redis实现简单消息队列 目录 [记录点滴]Redis实现简单消息队列 0x00 摘要 0x01 缘由 0x02 背景概念 2.1 Redis是否适合做消息队列 2.1.1 Redis的 ...
- Struts2和Spring的区别
1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...
- nacos(三): 创建第一个生产者producer(单体)
因为springcloud各个版本之间适配非常神经质,所以事件明确,在本实验环节中:使用的是JDK8,选择的springboot版本是2.7.6. 可以借助阿里云的脚手架(点此进入)帮我们创建第一个s ...
- Git钩子-每次提交信息添加分支名称
Git钩子是一组脚本,这些脚本对应着Git仓库中的特定事件,每一次事件发生时,钩子会被触发.这允许你可以定制化Git的内部行为,在开发周期中的关键点上触发执行定制化的脚本. 钩子脚本文件通常放置于项目 ...
- Android:如何在后台启动Activity
通常我用这段代码开始一个活动: Intent i = new Intent(context, MyActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NE ...
- C# Lambda || Linq 效率问题
255条数据 static void Main() { List<IPEndPoint> list = new List<IPEndPoint>(); for (int i = ...
- Data Warehouse - [00] 参考文献
浪尖大数据:什么是数据仓库的架构?企业数据仓库架构如何建设? 浪尖大数据:元数据管理在数据仓库的实践应用 - 要养成终生学习的习惯 -
- 分布式锁—6.Redisson的同步器组件
大纲 1.Redisson的分布式锁简单总结 2.Redisson的Semaphore简介 3.Redisson的Semaphore源码剖析 4.Redisson的CountDownLatch简介 5 ...
- 【数值计算方法】数值积分&微分-python实现
目录 数值积分 1. 引言 2. 几个常用积分公式及其复合公式 2.1 求积公式 2.2 代数精度 2.3 复合积分 2.4 常用积分公式的python实现 3. 变步长方法与外推加速技术 4. 牛顿 ...