学妹问我:OpenJDK是什么?作为师哥,必须万字详解屁颠屁颠奉上

  • Post author:
  • Post category:其他


上一篇是分享的是《JVM虚拟机-了解Java堆中对象分配、布局和访问的全过程》,这篇给大家分享《OpenJDK》。

1.OpenJDK 概述

OpenJDK 是 Java 平台标准版 (Java SE) 的免费开源实现。这是 Sun Microsystems (以下简称:Sun) 于2006年开始努力的结果。该实现已获得 GNU通用公共许可证(GNU GPL)版本2的许可。但有链接例外。除 GPL 特例链接之外,链接到 Java 类库的组件将受到 GPL 许可条款的约束。

OpenJDK Project 产生了许多组件:最重要的是虚拟机( HotSpot ),Java类库和Java编译器( javac )。

从 Java SE 7 开始,OpenJDK Project 成为了 Java SE 的官方参考实现。

从 Java SE 10 开始,JDK Project( OpenJDK Community 的下属项目) 成为了 Java SE 的官方参考实现。

没错,

从 Java SE 7开始往后的版本,连大名鼎鼎的 Oracle JDK 都是根据 Open JDK 做出来的

(修改了一些功能的实现方式,再打上自己的商标并提供配套服务)。或者应该说

自 Java SE 7开始往后的版本,所有的 JDK 都源自于 Open JDK

(OpenJDK 与 其他 JDK 的关系就和 Linux 与它的众多发行版是一样一样的)。

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 具体版本的开发标准是 Java Community Process(JCP,Java 社区进程) 发布的 Java Specification Requests(JSR,Java规范请求)。


OpenJDK Community 领导的 OpenJDK Project 是 Java SE 的官方参考实现,只产生 OpenJDK 源码,并不提供可以直接使用的二进制文件格式。现在能直接使用的二进制文件格式的 JDK 都是被编译之后的程序。

OpenJDK 官网指向的可下载二进制文件的地址,实际是 Oracle’s OpenJDK builds 下载的地址。没错,这也是被 Oracle 编译后的版本。

OpenJDK 使用 Git 在GitHub 的开源地址,OpenJDK 使用 Mercurial 在 OpenJDK 的开源地址

2.OpenJDK 的发展史

1995年3月23日,Sun 公司在 Sun world 会议上正式发布 Java。

1996年1月23日,Sun 公司发布了 Java 的第一个开发工具*。

Sun 在 JavaOne 2006 中宣布 Java 将成为开源软件并建立了 Open JDK 社区。

2006年11月13日 Sun 根据 GNU 通用公共许可证 将 Java HotSpot 虚拟机和编译器作为免费软件发布,并承诺将在2007年3月之前将其余的 JDK(*括Java运行时环境)置于 GPL 之下。

Sun 承诺在2007年上半年发布几乎完全基于免费和开源代码的 Java 开发工具*(JDK)。

2007年5月8日 Sun 在 GPL 下发布了 Java 类库的完整源代码。

2007年,除了一些被第三方授权给 Sun 且 Sun 无法根据 GPL 重新授权的受限部分之外,被限制的部分列表中还*括 Java 图形用户界面(GUI)的几个*要组件。Sun 表示计划用替代的实现方式替换其余的私有组件,并使类库完全免费。

在最初2007年5月发布时,OpenJDK 类库仍然有4%是私有的。到2008年5月OpenJDK 6出现时,只剩下不到1%(SNMP 实现,它不是 Java 规范的一部分)是私有的,使得无需任何二进制插件即可构建 OpenJDK。二进制插件要求后来在2009年4月将 b53 从 OpenJDK 7 中删除。

OpenJDK 6 Project,基于JDK 7,但经过修改(删除 Java 7 的特性)后提供了Java 6的开源版本。

OpenJDK 7 Project,于2011年7月28日发布GA(General Availability,一般可用性)版本。

OpenJDK 7 Update Releases Project,该项目在 OpenJDK 7 初代GA版本的基础上提供更新。

OpenJDK 8 Project,于2014年3月18日发布GA版本。

OpenJDK 8 Update Releases Project,该项目在 OpenJDK 8 初代GA版本的基础上提供更新。

OpenJDK 9 Project,于2017年9月21日发布GA版本。

JDK Project( OpenJDK Community 下属项目):

(

这个长期运行的项目的目标是生成一系列 Java SE 平台的开源参考实现

,正如 Java Community Process 中的 JSR 所指定的那样。根据一个严格的、基于时间的模型,该项目每六个月发布一个特性版本)

OpenJDK 10,于2018年3月20日发布GA版本。

OpenJDK 11,于2018年9月25日发布GA版本。

OpenJDK 12,于2019年3月19日发布GA版本。

OpenJDK 13,于2019年9月17日发布GA版本。

OpenJDK 14,于2020年3月17日发布GA版本。

OpenJDK 15,于2020年9月15日发布GA版本。

OpenJDK 16,于2021年3月16日发布GA版本。

OpenJDK 17,目前正在开发中,预计于2021年9月14日发布GA版本。

JDK Update Releases Project( OpenJDK Community 下属项目):

(

该项目的目标是为 JDK Project 开发更新



OpenJDK 11 Update Releases,在 OpenJDK 11 初代GA版本的基础上提供更新。

OpenJDK 12 Update Releases,在 OpenJDK 12 初代GA版本的基础上提供更新。

OpenJDK 13 Update Releases,在 OpenJDK 13 初代GA版本的基础上提供更新。

OpenJDK 14 Update Releases,在 OpenJDK 14 初代GA版本的基础上提供更新。

OpenJDK 15 Update Releases,在 OpenJDK 15 初代GA版本的基础上提供更新。

OpenJDK 16 Update Releases,在 OpenJDK 16 初代GA版本的基础上提供更新。

3.OpenJDK Community

OpenJDK Community 是一个开发人员协会,他们在 Java Community Process 定义的Java平台标准版(Java SE)的当前版本和未来版本的开源实现以及密切相关的项目上进行协作。这些规章制度的目标是通过允许和鼓励社区成员以公开、透明和精英的方式行事,促进社区的长期健康和发展。

OpenJDK Community 由一组团体和一组项目组成,这些团体是一组就共同兴趣进行公开对话的个人的集合,而这些项目是共同努力以产生特定工件的。 有社区范围的一般角色,以及特定于组和项目的角色。

理事会管理社区的结构和运作,根据序言中规定的原则监控社区的健康。 它坚持并维护这些章程,解决程序纠纷,并确保有足够的基础结构可用。 理事会对技术或发布决策没有直接权力。

1.角色定义


Participant(参与者)

参与者是订阅了一个或多个 OpenJDK 邮件列表的个人。参与者可以将消息发布到列表中,提交简单的补丁,以及做出其他类型的小贡献。


Contributor(贡献者)

贡献者是签署了甲骨文贡献者协议 (Oracle Contributor Agreement,OCA) 的参与者,或者为签署了该协议或同等协议的组织工作,并在该工作范围内根据该协议做出贡献。贡献者可以提交比一个简单的补丁更大的更改,可以提出新的项目,可以在组和项目中担任不同的角色。

如果贡献者的就业情况发生了变化,使得贡献者不再被OCA或其同等产品覆盖,那么贡献者必须通知 OpenJDK *管,从而放弃这个角色。


OpenJDK 成员

任何集团成员或提交者都可被现有的 OpenJDK 成员提名为 OpenJDK 的成员。这样的提名必须得到 OpenJDK 成员至少三票同意。

任何 OpenJDK 成员都可以提出删除另一个 OpenJDK 成员的动议。这样的动议必须由 OpenJDK 成员的三分之二多数票(赞成票至少是否票的两倍)批准,而作为动议*题的成员弃权。

在特殊情况下,理事会可以以三分之二多数票(赞成票至少是否票的两倍)罢免 OpenJDK 成员。

每一个 OpenJDK 成员资格在一年后会自动到期,但会根据要求续订。续展申请必须在期满一年内收到。除非需要 OpenJDK 成员资格的角色可以保留,否则成员资格已过期且尚未续期的 OpenJDK 成员不能行使成员资格特权。

如果一个 OpenJDK 成员的就业情况发生了变化,这样的贡献将不再被 OCA 或它的同等物覆盖,那么成员必须通过通知 OpenJDK *管放弃贡献者角色。此时,成员资格将被视为已过期。

The OpenJDK Members Group 由所有 OpenJDK 成员组成。OpenJDK 负责人是其组织的负责人。解散组,添加和删除组成员以及选择和删除组负责人的通常规则不适用于 OpenJDK Members Group 。


OpenJDK *管

OpenJDK *这是一个 OpenJDK 成员,由 Oracle 任命,他指导社区的*要工作,这些工作是 Java SE 平台的新实现,称为 JDK Release Projects。OpenJDK *管负责这些项目中使用的开发过程的公开性和透明性&#x



版权声明:本文为vip0809原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。