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条提 ...
随机推荐
- ORM(Object Relational Mapping:对象关系映射)
了解orm,先了解以下概念: 什么是"持久化" 持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘).持久化的主要应用是将内存中的数据存 ...
- 滑动窗口模板在字符串中的巧妙应用|LeetCode 76 最小覆盖子串
LeetCode 76 最小覆盖子串 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 更多干货,请关注公众号[忍者算法],回复[刷题清单]获取完整题解目录- ...
- CSP 考前注意事项
考试策略 J组 争取在 \(10:00\) 之前把所有题目稳定拿下.如果有题目没有思路.比较难写还没调出来或者想不出来,那么可以先放着,跳题.把其他所有题打完之后写个对拍,挂后台一直拍着. 然后剩下的 ...
- kvm virtio window server2003
https://www.linux-kvm.org/page/Downloads 这是kvm官网对virtio讲解 http://www.linux-kvm.org/images/d/dd/KvmFo ...
- 泰山派(Linux)播放音乐
泰山派(Linux)录音/播放音乐 alsamixer 声卡: 播放:play(较详细),aplay 录音:arecord 麦克风可用: Main_mic可用 录音(wav/mp3) ar ...
- Arduino部分C语言含义之--“::”
"::"在C++中表示作用域,和所属关系."::"是运算符中等级最高的.有三种作用. 1.作用域符号例如:A,B表示两个类,在A,B中都有成员member.那么 ...
- 安装mysql报错5.7.13-Table 'mysql.user' doesn't existFor more information
临时写的一个小系统客户要求用mysql,所以下载一个来研究下.解压后开始配置my.ini 配置my.ini [mysql]# 设置mysql客户端默认字符集default-character-set= ...
- C# Lambda || Linq 效率问题
255条数据 static void Main() { List<IPEndPoint> list = new List<IPEndPoint>(); for (int i = ...
- FishSpeech应用篇——专属朗读人
背景 FishSpeech部署教程参见:使用FishSpeech进行语音合成推理 - 天命小猪 - 博客园 部署好之后,就能够基于推理来定制自己专属朗读人.编程能力强的小伙伴可以结合AI定制一个自己的 ...
- WPF .Net Core 3.1遇到Satellite Assemblies无法正常加载的处理
1.原因 加载的时候没有调取 AssemblyLoadContext.Default 2.解决方案: 在程序启动的时候,手动调用 /// <summary> /// Interaction ...