大家好,欢迎来到IT知识分享网。
什么是 OpenJDK?
- OpenJDK 初步探索
-
- 第 1 章 OpenJDK 介绍
- 第 2 章 OpenJDK 开源社区结构
- 第 3 章 OpenJDK 官网介绍
- 第 4 章 OpenJDK 源码下载
OpenJDK 初步探索
第 1 章 OpenJDK 介绍
1.1 什么是 OpenJDK ?
OpenJDK 是 JavaSE(Java Platform, Standard Edition)规范标准的开源实现。
OpenJDK 社区 是 Java SE(Java Platform, Standard Edition)的开源实现 和 相关项目开源实现 一起协作的地方,OpenJDK 社区 是一个地方,而不是一件事物。
Oracle JDK 是 JavaSE 规范的闭源实现。
在平时大家的习惯中,把 OpenJDK 社区 中的 jdk 项目源代码 直接称为 OpenJDK。日常中这样做的好处就是便于我们交流,但是要清楚对应的使用场景,不能搞混淆。
OpenJDK 社区 中的 jdk 项目源代码(在 GPL v2 + Classpath Exception 开源协议下开放源代码)
1.2 Oracle JDK、Oracle OpenJDK 和 OpenJDK 区别?
1)Oracle JDK
2009年 Oracle 收购 Sun 公司之后,原来的 Sun JDK 也变成了 Oracle JDK。Oracle JDK 是 Oracle 公司收购 Sun 公司后发行的 JDK(俗称官方 JDK),它是 Java SE 规范的闭源实现,Oracle JDK 参考实现完全基于 OpenJDK 社区中 JDK 项目提供的开源代码(参见:https://jdk.java.net/java-se-ri/7)。
2019年4月16日,Oracle JDK 12 发布后没多久,Oracle 宣布对后续更新发布的 JDK 版本进行 全部商业收费(在这之前只是部分商业特性收费,参见:https://www.oracle.com/java/technologies/se-products.html )。
2021年9月14日,Oracle JDK 17 发布时,Oracle 又更换了许可协议(估计是迫于竞争压力),Oracle 对 JDK 17 及 更高版本 使用 NFTC 协议。LTS 版本(如 JDK 17)将在后续 LTS 发布后的一年内根据此许可证接收更新。在免费使用许可证到期之后,Oracle 打算使用 OTN许可证(目前用于Java 8和11 LTS版本)进行后续更新。JDK 18 等 非 LTS 版本 将在其计划的整个六个月的支持期内可用。
参见:
1、https://www.oracle.com/java/technologies/faqs-jsp.html
2、https://www.oracle.com/java/technologies/javase/jdk-faqs.html
目前的 Oracle JDK 为了加快新功能的引入,跟 OpenJDK 保持一致, 每 6 个月更新一个大的版本,每 3 个月进行一次 维护/安全 补丁更新,目前每2年发布一个长期支持版本。
因此,从 Java 11 开始,Oracle JDK 和 Oracle OpenJDK 构建 将基本相同,进一步表明 Oracle JDK 和 OpenJDK 已经非常接近了。
…但有一些外观和包装差异
确实仍然存在少量差异,有些是有意的和装饰性的,有些只是因为需要更多时间与 OpenJDK 贡献者讨论。
具体差异细节参见:https://blogs.oracle.com/java/post/oracle-jdk-releases-for-java-11-and-later
2)Oracle OpenJDK
1.3 OpenJDK 发展简史
- 2004年9月30日 Sun(Stanford University Network Microsystems) 公司发布 Java SE 5.0 版本,代号Tiger(老虎)
Sun 公司自 JDK 5 时代起,就曾以 JRL(Java Research License)的形式公开过 Java 的源码,主要是开放给研究人员阅读使用,这种 JRL 许可证的开放源代码一直持续到 JDK 6 Update 23 才因 OpenJDK 项目日渐成熟而终止。 - 2006年11月13日,Java 技术的发明者 Sun 公司宣布,它将在 GNU 通用公共许可第二版,类路径例外(即 GNU General Public License, version 2, with the Classpath Exception)下,将Java技术作为免费开源软件对外发布,并陆续开放源代码。
Sun 公司正式发布的有 Java SE(Java Platform, Standard Edition) 的第一批源代码,以及 Java ME(Java Platform, Micro Edition) 的可执行源代码。
有些人认为 OpenJDK 中所有GPLv2许可的代码都包含CPE(Classpath Exception,类路径例外),但事实并非如此。 搜索 HotSpot 源代码目录(从jdk16u获取了该目录),在3291个文件中,只有5个文件包含 Classpath Exception。 相反,看看 java。 在基本源目录下,3351个文件中只有54个没有 Classpath Exception。 这是因为只有当应用程序代码直接接触 JDK 代码时才需要 Classpath Exception。
注意:开源不等于免费,有些厂商利用开源软件,提供维护支持,漏洞补丁更新等商业服务来赚钱
- 2006年11月,Sun 公司成立了 OpenJDK 开源组织,对这些源码进行独立管理
只有极少量的产权代码除外(Encumbered Code,这部分代码大多是Sun公司本身也无权进行开源处理的,后来被替换为功能相同的开源代码 ),从此 OpenJDK 诞生。2007年3月起,全世界所有的开发人员均可对 Java 源代码进行修改。
OpenJDK(Open Java Development Kit)是 Java SE(Java Platform,Standard Edition)的开源实现。
参见:https://openjdk.org/guide/#introduction - 2006年12月12日 Sun 公司发布 Java SE 6 版本(这个版本开始没有后缀.0),代号Mustang(野马)
Java SE 6 开始各种版本已经更名,已取消其中的数字2,如J2EE更名为JavaEE(Java Platform, Enterprise Edition),J2SE更名为JavaSE(Java Platform, Standard Edition),J2ME更名为JavaME(Java Platform, Micro Edition)。 - 2009年,Oracle 公司宣布收购 Sun(Stanford University Network Microsystems)公司
Oracle收购 Sun 公司之后,自然 OpenJDK 开源社区主要由 Oracle 领导,Sun JDK 也变成了 Oracle JDK,自然 Oracle JDK 就是 Java SE 的官方闭源实现。
之后OpenJDK 每六个月提供一次新功能发布,每三个月提供一次基于每个活动版本的维护/安全更新。安全更新发布日期通常是最接近1月,4月,7月和10月的第17天的星期二。
参考来源:
1、https://adoptium.net/zh-CN/support/
2、https://www.oracle.com/security-alerts/
1.4 OpenJDK 从哪个 JDK 版本开始开源的呢?
最先从 OpenJDK 7 开始开源,OpenJDK 6 后来是从 OpenJDK 7 build 20 分支基础上(删减了一些 OpenJDK 7 中特有的功能)开源的,如下图所示:
官方参考来源:https://openjdk.org/projects/jdk6/
The OpenJDK 6 code base is distinct from the code base for JDK 7 and the 6 update train. As shown in the diagram below, the original JDK 6 code base begat two lines of heirs: JDK 7 and the sequence of 6 update releases. The decision to open source the JDK code base came late in the life cycle of the development of JDK 6 so a build of JDK 7 was the first to be published as open source. By the time JDK 7 was published as OpenJDK 7, the first post-GA update to JDK 6, 6u1, had already shipped. Work continued in both the OpenJDK 7 and 6 update trains. However, an open source implementation of the Java SE 6 specification was needed as well. After considering the alternatives, OpenJDK 7 build 20 was chosen as the basis of a backward branch to create OpenJDK 6 by removing from the OpenJDK 7 sources changes inappropriate for a Java SE 6 implementation. Since then, all three trains, 6 update, OpenJDK 7, and OpenJDK 6, have continued evolving, with certain fixes being applied to or ported between the releases. Security fixes are applied to all release trains.
Oracle 的项目发布经理 Joe Darcy 在 OSCON 2011 大会上对两者关系的介绍,也证实了 Oracle JDK 7 和 OpenJDK 7 在程序上是非常接近的,两者共用了大量相同的代码,如图 1-6 所示。
1.5 OpenJDK 官方免费二进制构建版本有哪些?
- Oracle OpenJDK
自2017年9月 JDK 9 发布开始,Oracle在免费的开源许可证(GPL v2 + CPE)(类似于Linux)下提供 OpenJDK 二进制构建版本。Oracle 提供的 OpenJDK 版本的可用性和社区支持在 jdk.java.net 上单独列出。
从 Java 11 开始,Oracle JDK 构建 和 OpenJDK 构建 将基本相同。
Oracle 基于 OpenJDK 构建的免费可商用的 JDK,更新周期只有 6 个月,在这 6 个月更新期间,Oracle OpenJDK 和 Oracle JDK 几乎没什么区别。 6 个月之后,原来版本的 Oracle OpenJDK 不再维护更新,Oracle 会重新构建新版本的 Oracle OpenJDK,想要继续使用免费的 JDK ,则需要频繁的更换自己的 JDK 版本。
Oracle OpenJDK 可以理解为 Oracle JDK 的 试用版 或者 尝鲜版。 - AdoptOpenJDK
谁是 AdoptOpenJDK.net 社区的幕后推手?
就像官网所说那样,AdoptOpenJDK 是由 Java 用户组成员,Java 开发者 以及 供应商(有 Azul, Amazon, GoDaddy, IBM, jClarity (acquired by Microsoft), Microsoft, New Relic, Pivotal and Red Hat)组成的社区,可以看出AdoptOpenJDK 有 OpenJDK 社区 官方成员 和 供应商支持,属于半个官方的二进制构建
,可以说专门针对于 OpenJDK 社区 中 jdk 项目 进行构建二进制可执行文件,属于直接对 OpenJDK 的原始构建,不像其它下游 OpenJDK 以及各商业发行版 有各自的 争对性 和 定制化 的优化。
如何获得商业支持的 AdoptOpenJDK binaries(可执行的二进制文件)?
AdoptOpenJDK 不提供商业支持版,AdoptOpenJDK 中的 OpenJDK 代码本身 同样也是 GPL v2 + CPE 协议的。
AdoptOpenJDK使用 基础架构项目 ,构建项目 和 测试脚本 从OpenJDK™类库生成预构建的二进制文件,并且可以选择 OpenJDK 或 Eclipse OpenJ9 VM 虚拟机(现在的 OpenJ9 虚拟机 已被 IBM 收回,无法提供最新的版本)。所有AdoptOpenJDK二进制文件和脚本都是开源许可和免费提供的。
- Eclipse Temurin
Eclipse Temurin 是 Adoptium OpenJDK(由原来的 AdoptOpenJDK 迁移而来,2021 年 7 月 24 日,AdoptOpenJDK 加入了 Eclipse 基金会并重塑品牌)发行版的名称。
Eclipse Temurin 永远免费 提供可执行二进制文件,由于 IBM 收回了 OpenJ9 (最开始Open J9 是 IBM 免费开源贡献给 Eclipse 的,后来被收回了,命名为 IBM Semeru),所以不再继续分发 Eclispse OpenJ9 的构建。
Eclipse Temurin 的更新周期依然延续 AdoptOpenJDK 的。
Eclipse Temurin 的更新周期维护路线如下图所示,Eclipse Temurin 比 Oracle OpenJDK 维护更新的周期时间更长,针对于 Java长期支持版本 提供至少4年的更新维护 :
Eclipse Temurin 也与 部分供应商合作(目前有红帽、微软、Azul、IBM、华为、阿里巴巴),建立了 Adoptium™ Marketplace ,主要用来提供用户 免费下载 各厂商的符合标准的构建的 OpenJDK 免费二进制文件,如下图所示:
1.5 OpenJDK 下游衍生版本主要发行厂商
1.5.1 Alibaba Dragonwell
Alibaba Dragonwell 是一款免费的, 生产就绪型Open JDK 发行版,提供长期支持,包括性能增强和安全修复。阿里巴巴拥有最丰富的Java应用场景,覆盖电商,金融,物流等众多领域,世界上最大的Java用户之一。Alibaba Dragonwell作为Java应用的基石,支撑了阿里经济体内所有的Java业务。GitHub 地址:https://github.com/alibaba/dragonwell8
1.5.2 腾讯 Kona
腾讯 Kona(Tencent Kona,TK)是完全开源、生产环境就绪的 OpenJDK 发行版,完全兼容开源 OpenJDK8、OpenJDK11 及 OpenJDK17。腾讯 Kona 基于 TencentJDK 开发,支持多种运行平台,同时针对云应用场景定制新的功能及优化, 具备更快的云应用启动速度,更好的性能以及提供更为便捷的分析、诊断工具。此外,腾讯 Kona 服务于腾讯内部大量 Java 应用程序,提供稳定、高效的 Java 运行环境。
1.5.3 华为毕昇 JDK
毕昇 JDK 是华为基于 OpenJDK 优化后的开源版本,是一个高性能、可用于生产环境的OpenJDK发行版。毕昇JDK运行在华为内部多个产品上,积累了大量使用场景和Java开发者反馈的问题和诉求,解决了业务实际运行中遇到的多个问题,并在ARM架构上进行了性能优化。毕昇JDK运行在大数据等场景下可以获得更好的性能。毕昇JDK 8与Java SE标准兼容,目前支持Linux/AArch64和Linux/x86_64平台。毕昇JDK同时是OpenJDK的下游,会持续稳定为OpenJDK社区做出贡献。
1.5.4 Amazon Corretto
Amazon Corretto 是亚马逊开放 Java 开发工具包 (OpenJDK) 的免费、多平台、生产就绪型发行版。Corretto 提供长期支持,其中包括性能增强和安全修复。亚马逊在内部的数千种生产服务上运行 Corretto,并且 Corretto 已被证明能够兼容 Java SE 标准。借助 Corretto,您可以在常用操作系统(包括 Linux、Windows 和 macOS)上开发和运行 Java 应用程序。
1.5.5 Red Hat build of OpenJDK
OpenJDK 的 Red Hat 版本是 Java Platform,Standard Edition(Java SE)的免费开源实现。红帽现在又接管了 OpenJDK 8、OpenJDK 11 更新项目,负责领导 OpenJDK 8 和 11 的长期更新。红帽每年通过 rpm 和 zip 文件为 OpenJDK 8 和 11 发行版提供季度 JRE 和 JDK 更新。红帽后来被 IBM 收购。
参考网址:
1、红帽 与 OpenJDK 之间的历史关系
2、红帽 对 OpenJDK 支持的生命周期
1.5.6 Azul Zulu Builds of OpenJDK
1.5.7 LIBERICA JDK
1.5.9 SapMachine
SapMachine 是由德国软件公司SAP(思爱普)维护和支持的 OpenJDK 下游版本。它用于为SAP客户和希望使用OpenJDK运行应用程序的合作伙伴构建和维护一个SAP支持的OpenJDK版本。自2001年以来 SAP 一直是 JCP 执行委员会成员,是 OpenJDK 项目最大的外部贡献者之一。领导 OpenJDK 17更新项目,大力支持 OpenJDK 11更新项目。
1.5.10 OpenLogic OpenJDK
1.6 了解更多 OpenJDK 参考资源
了解更多 OpenJDK、OpenJDK 免费构建版 和 Oracle JDK 以及其它 商业发行版 区别,参考来源及下面介绍:
- 来自 腾源会 视频号的直播回放,有 OpenJDK 社区的 Committer(OpenJDK 开源社区角色,可以提交自己对 OpenJDK 的优化代码)和 Reviewer (比 Committer 权限更高,不但可以提交代码,还能进行审批代码)对 OpenJDK 开源版和商业发行版是否冲突 的一些看法和总结:OpenJDK 开源版 和商业版 是否冲突
- 这位博主总结的也不错,可以参考借鉴:码农飞升记-03-OpenJDK是什么?
1.7 了解 GraalVM
GraalVM 是一个在 HotSpot 虚拟机基础上增强而成的跨语言 全栈虚拟机,可以作为 “任何语言” 的运行平台使用 ,旨在加速用 Java 和其他 JVM 语言编写的应用程序的执行,同时还为 JavaScript、Python 和许多其他流行语言提供运行时。GraalVM 提供了两种运行 Java 应用程序的方法:在 HotSpot JVM 上使用 Graal 即时 (JIT) 编译器或作为提前 (AOT) 编译的本机可执行文件。GraalVM 的多语言功能可以在单个应用程序中混合多种编程语言,同时消除外语调用成本。
GraalVM 架构如下图所示:
第 2 章 OpenJDK 开源社区结构
2.1 JCP(Java Community Process)Java 技术标准规范组织
JCP 是一个制定 Java 标准技术规范 的国际组织。 Java Community Process (JCP) 是一个开放的、参与性的过程,用于开发和修改1998年引入的 Java™ 技术规范、参考实现和测试套件。 Java社区进程 (Java Community Process, JCP) 计划与国际 Java 开发人员社区合作,促进 Java 平台的发展。
2.1.1 JCP Member(Java 标准技术规范组织成员)
任何签署了 Java规范参与协议(JSPA)、关联会员协议(AMA) 或 合作伙伴会员协议(PMA) 的组织或个人都是 JCP成员。 签署 关联会员协议(AMA) 可以作为 JSR 的贡献者,并为执行委员会中的关联席位投票。 签署PMA授予合作伙伴成员资格; 合作伙伴成员可以在执行委员会任职,并为批准和选举席位投票。 签署JSPA授予正式会员资格; 正式成员可以提出新的 JSR,为专家组服务,在执行委员会选举中投票,并竞选执行委员会的一个席位。
2.1.2 PMO(Program Management Office)项目管理办公室
PMO(项目管理办公室) 是Oracle内部的一个小组,负责监督并管理 JCP 项目的日常运行。Java 规范的实际开发是在专家组内进行的。
2.1.3 JSR(Java Specification Request)Java 规范请求
JSR 是 Java 规范请求,这是一个或多个 JCP 成员提交给项目管理办公室(PMO)的文件,目的是建议开发一个新规范或对现有规范进行重大修订。
2.1.4 Specification Lead(规范主管)
A Specification Lead is a representative of a Full Member who leads a group of experts in developing a specification described in a Java Specification Request (JSR).
2.1.5 EC(Executive Committee)执行委员会
EC(Executive Committee)是执行委员会,在JCP 2.9及以后,JCP有一个执行委员会(EC)。 之前有两个执行委员会,按照平台划分(标准/企业版和微型版)。 选举委员会的投票成员任期两年。 Oracle 公司拥有14个批准席位,8个选举席位,2个副席位和1个永久席位。 两年的任期是交错的,因此每年通常有一半的席位等待批准或选举。
现任执行委员会及其代表如下,可以看到 阿里巴巴 是现任 EC 执行委员会成员之一,到今年2022年结束
2.1.1 EG(Expert Group )专家组
EG 是专家组,即通过 JSR 协作开发 Java 规范的 JCP 成员组。
2.2 一些名词解释
2.2.1 TCK(Technology Compatibility Kit)技术兼容套件
A Technology Compatibility Kit is another output of a JSR at Final and Maintenance Releases. The TCK is used to test implementations of the Final Specification to make sure that they are fully compatible.
2.1.2 RI(Reference Implementation)参考实现
A Reference Implementation is one of the outputs of a JSR at Final and Maintenance Releases. The RI is an implementation of the Final Specification that proves that the specification can be implemented. The Final Release (as well as any subsequent Maintenance Release) milestone page for any Final JSR should have a link to the Reference Implementation or an explanation on how to get it.
RI是最终规范的实现,它证明了规范是可以实现的。
2.2 OpenJDK 社区(OpenJDK Community)
The OpenJDK Community is an association of developers who collaborate upon open-source implementations of present and future versions of the Java Platform, Standard Edition, as defined by the Java Community Process, and upon closely-related projects. The goal of these Bylaws is to foster the long-term health and growth of the Community by enabling and encouraging its members to act in an open, transparent, and meritocratic manner.
参见:https://openjdk.org/bylaws
OpenJDK 社区 是一个由开发人员组成的协会(由 Oracle、IBM 公司主导),他们就 Java 平台当前和未来版本的开源实现(由JCP 定义规范)的标准版以及密切相关的项目进行协作。这些章程的目标是通过使和鼓励其成员以公开,透明和任人唯贤的方式行事,促进社区的长期健康和增长。
OpenJDK 社区的结构是由一系列 组(group) 和 一系列 项目(project) 组成,前者是参与关于共同兴趣的公开对话的个人的集合,后者是协作产生特定工件的项目。 有社区范围内的一般角色,也有特定于组和项目的角色。
理事会(Governing Board) 管理 OpenJDK 社区的 结构 和 运作,根据序言中提出的原则,监测 OpenJDK 社区的健康状况。 理事会 坚持和维护这些章程,解决程序争议,并确保有足够的基础设施可用。 理事会对技术或发布决定没有直接的权力。
2.2.1 一般角色(General Roles)
a、Participant (参与者)
Participant(参与者)是订阅了一个或多个OpenJDK邮件列表的个人。 参与者可以向列表发布消息,提交简单的补丁,或者做其他类型的小贡献。
b、Contributor (贡献者)
c、OpenJDK Member (OpenJDK 成员)
An OpenJDK Member is a Contributor who has demonstrated a history of significant contributions to the Community as recognized by a vote of the existing OpenJDK Members. An OpenJDK Member may propose new Groups, may lead a Group, and is eligible to vote on new Projects, new OpenJDK Members, and the selection of new At-Large Members of the Governing Board.
OpenJDK 成员 是指通过现有 OpenJDK 成员 投票认可的对社区做出重大贡献的贡献者。 OpenJDK成员可以提议新的组,可以领导一个组,并且有资格对新的项目、新的OpenJDK成员和管理委员会新成员的选择进行投票。
d、OpenJDK Lead (OpenJDK 负责人)
The OpenJDK Lead is an OpenJDK Member, appointed by Oracle, who directs the major efforts of the Community, which are new implementations of the Java SE Platform known as JDK Release Projects. The OpenJDK Lead is responsible for the openness and transparency of the development process used in those Projects and can also settle certain kinds of procedural disputes. The OpenJDK Lead sits on the Governing Board.
OpenJDK 负责人是由 Oracle 任命的 OpenJDK 成员,他指导社区的主要工作,即 Java SE 平台的新实现,称为JDK发布项目。 OpenJDK 负责人负责这些项目中使用的开发过程的公开性和透明度,也可以解决某些类型的程序争议。 OpenJDK 负责人 在管理委员会(Governing Board)任职。
2.2.2 组角色(Group Roles)
a、Group Member(组成员)
b、Group Lead(组领导)
A Group Lead is a Member of a Group and an OpenJDK Member who is responsible for directing and coordinating that Group’s activities
组领导是组的成员,也是负责指导和协调组活动的OpenJDK成员。
2.2.3 项目角色(Project Roles)
a、Author(作者)
An Author for a Project is a Contributor who has been granted the right to create changesets intended to be pushed into a specific Project’s code repositories, but does not have the right to push such changesets directly.
一个项目的作者是一个贡献者,他被授予了创建变更集的权利,这些变更集被推送到一个特定的项目的代码存储库中,但是他没有直接推送这样的变更集的权利。
b、Committer(提交者)
c、Reviewer(评审人)
d、Project Lead(项目负责人)
A Project Lead is a Committer to that Project who is responsible for directing and coordinating the Project’s activities.
项目负责人也是项目的提交者,负责指导和协调项目
2.2.4 OpenJDK 成员(OpenJDK Members)
任何 Group 组成员 或 Committer 提交者都可以由现有的 OpenJDK 成员提名为 OpenJDK 成员(OpenJDK Members)。 这样的提名必须得到 OpenJDK 成员 的三票一致通过。
OpenJDK成员组(OpenJDK Members Group) 由所有的 OpenJDK 成员 组成。
OpenJDK负责人(OpenJDK Lead) 是 OpenJDK成员组(OpenJDK Members Group) 的小组领导。 通常解散组、添加和删除组成员、选择和删除组领导的规则不适用于OpenJDK成员组。
2.2.5 管理委员会(Governing Board)
理事会(Governing Board,管理委员会) 管理 OpenJDK 社区的 结构 和 运行。
理事会(Governing Board,管理委员会) 由 5名 贡献者 组成:
a、1 名 主席(由 Oracle 任命)
b、1 名 副主席(由 IBM 任命)
c、1 名 OpenJDK 负责人(OpenJDK Lead 由 Oracle 任命)
d、2 名 一般会员(管理委员会的一般会员由 OpenJDK 成员投票选出。一般会员的任期为一个日历年,从每年 4 月的第一天开始。)
第 3 章 OpenJDK 官网介绍
3.1 首页
从上图,可以看到首页上有 4 段话,解释如下:
OpenJDK 开源社区 是 JavaSE(可以理解为 JCP 组织定义的 JavaSE 规范标准) 的 开源实现 以及 相关项目开源实现 协作的地方
Oracle JDK 是 JavaSE 的闭源实现。
可以下载和安装最新的 OpenJDK(指的是最新 GA 版本的,General Availability 的缩写,表示一般可用的意思,通常表示对应版本的发行版,而不是后续的维护更新的版本。当前最新 GA 版本是 JDK 18)
Oracle 基于 GPL v2 + Classpath Exception 协议,免费可供商用的,基于 OpenJDK 构建的 JDK(被称为 Oracle OpenJDK)二进制文件,在 Linux、macOS 和 Windows 上都有提供,对应网址:https://jdk.java.net/
Oracle 基于 OpenJDK 参考实现的商用收费版 JDK 二进制文件,网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
了解关于 OpenJDK 开源社区 活跃的项目,包含以下几个:
列举一些比较活跃的项目:参见:《深入理解 Java 虚拟机》-走进 Java 这章。
- 各 JDK 支持版本的项目
- 各 JDK Updates 支持版本的项目
- Amber,高生产力的语言特性,新的语言特性改进项目。
- Loom,轻量级的并发性,之前的 Java 做并发处理的最小调度单位是线程,Java 线程的调度是直接由操作系统内核提供的,会有核心态和用户态的切换开销。而很多其它语言都提供了更加轻量级的、由软件自身进行调度的用户线程(曾经非常早期的 Java 也有绿色线程),譬如 Golang 的 Groutine、D 语言的 Fiber 等。Loom 项目就准备提供一套与目前 Thread 类 API 非常接近的实现。
- Panama,目的是消弭 Java 虚拟机 与 本地代码之间的界限。现在 Java 代码可以通过 JNI 来调用本地代码,这点与硬件交互频繁的场合尤其常用(譬如 Android)。Panama 项目的目标就是提供更好地方式让 Java 代码与本地代码进行调用和传输数据。
- Valhalla,提供值类型和基本类型的泛型支持,并提供明确的不可变类型和非引用类型的声明。不可变类型在并发编程中能带来很多好处,没有数据竞争风险带来了更好地性能。
- Jigsaw 项目:虚拟机层面的模块化支持。
- … 等等
如果你想学习如何使用当前可用的 Java,可以尝试从 Oracle JDK 开始学习,Oracle 提供了学习网站:https://dev.java/
在 OpenJDK 开源社区,你可以探索 JDK 本身,为社区做出贡献:
- 可以在OpenJDK 开源社区 web 网站上浏览源代码
- 可以从OpenJDK 开源社区 克隆一个仓库到本地,拉取线上源代码,创建一个本地副本
- 可以贡献一个补丁到 OpenJDK 开源社区 来修复 bug
- 可以增强完善一个现有的组件,提交给 OpenJDK 开源社区
- 可以定义一个新的特性,提交给 OpenJDK 开源社区
3.2 左侧列表
大致可以分为四大类:
3.2.1 网站章程概述性内容
- Installing
这个页面主要介绍各版本 Linux 系统中,OpenJDK 的下载和安装
如何下载和安装预构建的 OpenJDK 软件包?
JDK 9 以及 更高的版本,这里暂时没有给出方法。
不过有 Oracle 构建的 OpenJDK 各版本 二进制文件(Oracle OpenJDK),参见:http://jdk.java.net/
- Contributing
本页介绍 JDK 和 JDK 更新项目 的赞助贡献流程。其它 项目 可以遵循这些惯例,也可以建立自己的公约;有关详细信息,请参阅相应的项目页面。
此过程适用于已经具备在 JDK 上工作所需的技能但尚未拥有完全 提交者 权限的开发人员。它允许这些开发人员通过以补丁的形式提交有意义的贡献并将其与 赞助商 配对来展示他们的能力,即项目的现有 提交者,他们可以提供建议,帮助他们熟悉JDK开发过程,并最终将他们的补丁推送到适当的 Mercurial 存储库 中。随着时间的推移,预计熟练的 贡献者 最终将获得自己的完全 提交 权限。
本页重点介绍该过程的贡献方;配套页面描述了 如何赞助贡献 。
- Sponsoring
本页介绍 JDK 和 JDK 更新项目的赞助贡献过程的赞助部分。其他 项目 可以遵循这些惯例,也可以建立自己的公约;有关详细信息,请参阅项目的页面。
此过程适用于对 JDK 或 JDK 更新项目具有 提交者 权限的开发人员。它为提交者提供了指南,以帮助尚未拥有“推送”权限的开发人员(即 贡献者 或 作者 )熟悉开发过程的期望,标准和机制。发起人的角色是提供建设性的建议,并最终将赞助的贡献推送到相应的 Mercurial 存储库 中。
由于本文档侧重于赞助部分,为了获得全貌,请查看 “如何贡献” 文档。
- Developers’ Guide
这个页面主要介绍 OpenJDK 开发者指南,还同时介绍了 OpenJDK 的结构(由 Groups 和 Projects 构成)和 角色
OpenJDK 社区 是协作实现 JavaSE 和 相关项目 的开源实现的地方。它创建于2006年11月,当时 JDK 源代码的初始部分在 GPLv2 许可证下发布。
为了有效地协同工作,有时需要明确的方向来避免误解,并使开发人员对术语和流程的看法保持一致。OpenJDK 社区 是一个相当务实的地方。“做正确的事”通常是正确的行动方案。尽管如此,如果人们以同样正确的方式做事,那么每个人的工作都会变得更加透明,更容易被其他人遵循。因此,开发过程的大多数部分都有标准流程,这些流程是推荐的做事方式。
本指南的目标是回答 JDK 开发人员在开发过程、工具、标准等方面可能遇到的问题。其他文档中描述了正式的规则和流程,例如 JDK 增强提案和路线图流程的 JEP 1 和 JDK 发布流程的 JEP 3。本指南旨在补充此类文档,其中包含有关如何遵循这些规则以及如何与OpenJDK社区的其余部分协同工作的教程和示例。
有许多常见用例在正式流程中没有详细说明。本指南建议在这种情况下如何工作。
- Vulnerabilities
这个页面主要介绍了 如何报告 OpenJDK 的 漏洞 以及 相关 公告
OpenJDK 源代码中的漏洞由 OpenJDK 漏洞组处理,该小组负责协调修复和发布。
Oracle 重视独立安全研究社区的成员,他们发现安全漏洞并与 Oracle 合作,以便向所有客户发布安全修复程序。Oracle 的政策是在发布针对所报告的安全漏洞的修复程序时,在“关键补丁更新通报”文档中向所有研究人员致敬。为了获得信誉,安全研究人员必须遵循负责任的披露实践,包括:
1、在Oracle发布漏洞修复程序之前,他们不会发布该漏洞
2、他们不会泄露问题的确切细节,例如,通过漏洞利用或概念验证代码
这里需要注意的是,Oracle 一直直接掌控着 OpenJDK 的漏洞管理, 专门成立了一个 漏洞修复组,并且要求在 Oracle 发布漏洞修复程序之前,他们不会发布该漏洞。 由此可见,Oracle 公司自己家的护城河挖得很深,只有等 Oralce 内部修复之后,开源社区才会发布该漏洞。 参考来源:https://openjdk.org/groups/vulnerability/report
当前和以前的公告,如下图所示,参见:https://openjdk.org/groups/vulnerability/advisories。
我们每年四次发布 OpenJDK 源代码中的漏洞修复程序,分别在 1 月、4 月、7 月和 10 月,在最接近当月 17 日的星期二发布。我们会将描述每个修复程序的严重性、区域和受影响版本的公告发布到 vuln-declare 邮件列表中,并使用 公告密钥 进行签名以确保完整性。
我们鼓励您尽快更新到首选 JDK 发行版的最新版本。
可以在 OpenJDK 左侧列表 Wiki(是 OpenJDK 官网 的补充)中,找到对应 JDK 更新项目 的漏洞修复 二进制构建,根据下方红框下载即可,下图以 OpenJDK 8 Updates 为例:
- JDK GA/EA Builds
GA :General availability is the phase of the software release life cycle where the software is made available for sale.
一般可用性是软件发布生命周期的一个阶段,在这个阶段,软件可供销售。
GA Release :General Availability Release
可供使用的发行版本
EA Release:Early-Access Release
最近发布的版本
BPR :Bundled Patch Release
补丁版本
- Mailing lists
这里是 OpenJDK 的邮件列表,一些重要的通知、技术讨论、公告等都在邮件列表这里查看
- Wiki
这里是对 OpenJDK 官网的补充,特别针对于 OpenJDK Updates 项目的维护,可以在这里面下载到 最新漏洞维护升级更新的 OpenJDK Update 版本,当然还有一些其它的 项目,其中 JDK 漏洞系统 也在这里维护。
- IRC
IRC(Internet Relay Chat,互联网中继聊天)是一个多用户,多渠道的聊天系统。想象一下,坐在电脑前,通过键入的消息与来自互联网上的一个人或许多其他人“交谈”,所有这些都是实时的!最重要的是,一旦你设置好了,在IRC上聊天是完全免费的!
- Bylaws
这里介绍了 OpenJDK 社区 结构组成(主要由 Groups 组 和 Projects 项目 组成)以及 各级成员角色,根据这些章程,OpenJDK 社区保持在良好的发展中。
- Census
这里主要收录统计了 OpenJDK 社区的人员名单,以及各 Group 组 和 Project 项目的详细负责人和负责的任务。
下图以 JDK 8 Updates Project 为例:
- Legal
3.2.2 JEP、JSR、源码、相关工具
- JEP Process
这里是所有的 JDK 增强提案(JDK Enhancement Proposals)
JSR 和 JEP 之间的联系
JEP(JDK Enhancement Proposals),JDK 改进提案,每当需要有新的设想时候, JEP 可以在 JCP (Java Community Process)之前 或者 同时 提出非正式的规范(specification),被正式认可的 JEP 正式写进 JDK的发展路线图并分配版本号。
JSR(Java Specification Requests),Java 规范提案,新特性的规范出现在这一阶段,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。JSR 请求可以来自于 Group 小组/Project 项目、JEP、JCP 成员或者Java社区(Java Community)成员的提案,每个 Java 版本都由相应的 JSR 支持。
- Source code
- Mercurial
OpenJDK Mercurial Repositories (源码仓库)最先用作 OpenJDK 开源社区 项目源码托管的仓库。
2020年9月5日开始, OpenJDK 开源社区 项目源码仓库 同时迁移到了GitHub上。OpenJDK Mercurial Repositories 仓库上下载的源码可能并不是最新的,推荐在 GitHub 下载拉取最新的 OpenJDK 开源社区的 JDK 项目源码。
参见:https://mail.openjdk.org/pipermail/jdk-dev/2020-August/004681.html
- GitHub
OpenJDK 社区 开源项目源码托管的新地方,让 OpenJDK 开发人员更加方便地对开源项目进行开发维护,我们也可以在 GitHub 方便地拉取源代码。
- Tools
- Git
项目源码版本管理工具 - jtreg harness
jtreg是 JDK 测试框架使用的测试工具。此框架主要用于回归测试。它还可以用于单元测试,功能测试,甚至简单的产品测试 – 换句话说,除了属于TCK的一致性测试之外,几乎包括任何类型的测试。
3.2.3 Groups
3.2.4 Projects
OpenJDK 社区 有很多 开源项目,每个项目由 作者、提交者、审阅者、项目领导 构成。
列举一些比较活跃的项目:参见:《深入理解 Java 虚拟机》走进 Java 这章。
- 各 JDK 支持版本的项目
- 各 JDK Updates 支持版本的项目
- Amber,高生产力的语言特性,新的语言特性改进项目
- Loom,轻量级的并发性,之前的 Java 做并发处理的最小调度单位是线程,Java 线程的调度是直接由操作系统内核提供的,会有核心态和用户态的切换开销。而很多其它语言都提供了更加轻量级的、由软件自身进行调度的用户线程(曾经非常早期的 Java 也有绿色线程),譬如 Golang 的 Groutine、D 语言的 Fiber 等。Loom 项目就准备提供一套与目前 Thread 类 API 非常接近的实现。
- Panama,目的是消弭 Java 虚拟机 与 本地代码之间的界限。现在 Java 代码可以通过 JNI 来调用本地代码,这点与硬件交互频繁的场合尤其常用(譬如 Android)。Panama 项目的目标就是提供更好地方式让 Java 代码与本地代码进行调用和传输数据。
- Valhalla,提供值类型和基本类型的泛型支持,并提供明确的不可变类型和非引用类型的声明。不可变类型在并发编程中能带来很多好处,没有数据竞争风险带来了更好地性能。
- Jigsaw 项目:虚拟机层面的模块化支持。
- … 等等
第 4 章 OpenJDK 源码下载
OpenJDK 社区 中 JDK 项目 源码下载,有以下几种方式:
4.1 从 Mercurial 仓库下载
4.1 从 GitHub 上下载
4.3 从 Oracle OpenJDK 构建官网上下载
注意:从这里下载 JDK 源码,只有 6 个月的更新版本可供下载,并不是最新更新版本的 JDK 源码
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136768.html