OpenJDK 初步探索

什么是 OpenJDK?

  • OpenJDK 初步探索
    • 第 1 章 OpenJDK 介绍
      • 1.1 什么是 OpenJDK ?
      • 1.2 Oracle JDK、Oracle OpenJDK 和 OpenJDK 区别?
      • 1.3 OpenJDK 发展简史
      • 1.4 OpenJDK 从哪个 JDK 版本开始开源的呢?
      • 1.5 OpenJDK 官方免费二进制构建版本有哪些?
      • 1.5 OpenJDK 下游衍生版本主要发行厂商
        • 1.5.1 Alibaba Dragonwell
        • 1.5.2 腾讯 Kona
        • 1.5.3 华为毕昇 JDK
        • 1.5.4 Amazon Corretto
        • 1.5.5 Red Hat build of OpenJDK
        • 1.5.6 Azul Zulu Builds of OpenJDK
        • 1.5.7 LIBERICA JDK
        • 1.5.9 SapMachine
        • 1.5.10 OpenLogic OpenJDK
      • 1.6 了解更多 OpenJDK 参考资源
      • 1.7 了解 GraalVM
    • 第 2 章 OpenJDK 开源社区结构
      • 2.1 JCP(Java Community Process)Java 技术标准规范组织
        • 2.1.1 JCP Member(Java 标准技术规范组织成员)
        • 2.1.2 PMO(Program Management Office)项目管理办公室
        • 2.1.3 JSR(Java Specification Request)Java 规范请求
        • 2.1.4 Specification Lead(规范主管)
        • 2.1.5 EC(Executive Committee)执行委员会
        • 2.1.1 EG(Expert Group )专家组
      • 2.2 一些名词解释
        • 2.2.1 TCK(Technology Compatibility Kit)技术兼容套件
        • 2.1.2 RI(Reference Implementation)参考实现
      • 2.2 OpenJDK 社区(OpenJDK Community)
        • 2.2.1 一般角色(General Roles)
          • a、Participant (参与者)
          • b、Contributor (贡献者)
          • c、OpenJDK Member (OpenJDK 成员)
          • d、OpenJDK Lead (OpenJDK 负责人)
        • 2.2.2 组角色(Group Roles)
          • a、Group Member(组成员)
          • b、Group Lead(组领导)
        • 2.2.3 项目角色(Project Roles)
          • a、Author(作者)
          • b、Committer(提交者)
          • c、Reviewer(评审人)
          • d、Project Lead(项目负责人)
        • 2.2.4 OpenJDK 成员(OpenJDK Members)
        • 2.2.5 管理委员会(Governing Board)
          • a、1 名 主席(由 Oracle 任命)
          • b、1 名 副主席(由 IBM 任命)
          • c、1 名 OpenJDK 负责人(OpenJDK Lead 由 Oracle 任命)
          • d、2 名 一般会员(管理委员会的一般会员由 OpenJDK 成员投票选出。一般会员的任期为一个日历年,从每年 4 月的第一天开始。)
    • 第 3 章 OpenJDK 官网介绍
      • 3.1 首页
      • 3.2 左侧列表
        • 3.2.1 网站章程概述性内容
        • 3.2.2 JEP、JSR、源码、相关工具
        • 3.2.3 Groups
        • 3.2.4 Projects
    • 第 4 章 OpenJDK 源码下载
      • 4.1 从 Mercurial 仓库下载
      • 4.1 从 GitHub 上下载
      • 4.3 从 Oracle 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 开源协议下开放源代码)

对于 OpenJDK 更多的理解,可参考以下链接:
1、什么是 OpenJDK ?
2、在 Oracle 内幕官网 https://inside.java/ 中的 Newscast (Java 内幕新闻)有提到,相关翻译之后的链接地址,这位Up主有许多系列的翻译,感觉特别给力:
Java内幕新闻28[熟肉]-究竟什么是 OpenJDK

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年发布一个长期支持版本。

Oracle JDK 从 2022 年 4 月开始,重要补丁更新将在 1 月、4 月、7 月和 10 月的第三个星期二发布(它们之前发布在最接近 1 月 、4 月、7 月和 10 月的第17天的星期二)
Oracle JDK 安全补丁更新周期,参见:https://www.oracle.com/security-alerts/
Oracle JDK 支持路线图,参见:https://www.oracle.com/java/technologies/java-se-support-roadmap.html
Oracle JDK 以及 Oracle OpenJDK 使用的许可证 常见问题,参见:https://www.oracle.com/java/technologies/javase/jdk-faqs.html
Oracle 为 OpenJDK 社区贡献了以下功能:
1、Java Flight Recorder
2、Java Mission Control
3、Application Class-Data Sharing
4、ZGC

因此,从 Java 11 开始,Oracle JDKOracle OpenJDK 构建 将基本相同,进一步表明 Oracle JDK 和 OpenJDK 已经非常接近了。
…但有一些外观和包装差异
确实仍然存在少量差异,有些是有意的和装饰性的,有些只是因为需要更多时间与 OpenJDK 贡献者讨论。
具体差异细节参见:https://blogs.oracle.com/java/post/oracle-jdk-releases-for-java-11-and-later

2)Oracle OpenJDK

自2017年9月 JDK 9 发布开始,Oracle在免费的开源许可证(GPL v2 + CPE)(类似于Linux)下提供 OpenJDK 二进制构建版本。Oracle 提供的 OpenJDK 版本的可用性和社区支持在 jdk.java.net 上单独列出。
Oracle 基于 OpenJDK 构建的 JDK,更新周期只有 6 个月(Oracle 目前每6个月发布一个版本)。从 Java 11 开始,在这 6 个月更新期间,Oracle JDKOracle OpenJDK 构建基本相同,进一步表明 Oracle JDK 和 OpenJDK 已经非常接近了。
参见:https://blogs.oracle.com/java/post/oracle-jdk-releases-for-java-11-and-later

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.

OpenJDK 6 代码库与 JDK 7 和 6 更新序列的代码库不同。如下图所示,原始的 JDK 6 代码库包含两行继承者:JDK 7 和 6 个更新版本序列。开源JDK代码库的决定是在 JDK 6 开发的生命周期后期做出的,因此 JDK 7 的构建是第一个作为开源发布的版本。当 JDK 7 作为 OpenJDK 7 发布时,对 JDK 6(6u1)的第一次 GA 后更新已经发布。OpenJDK 7和6更新列车的工作仍在继续。但是,还需要Java SE 6规范的开源实现。在考虑了替代方案之后,OpenJDK 7 build 20被选为向后分支的基础,通过从OpenJDK 7源代码中删除不适合Java SE 6实现的更改来创建OpenJDK 6。从那时起,所有三列火车,6 update,OpenJDK 7和OpenJDK 6都在不断发展,某些修复程序被应用到版本之间或在版本之间移植。安全修补程序适用于所有发布版本。

总结:
  可以看出,2006年11月13日 Sun 公司宣布将 Java 开源,2006年12 月12日 Sun 公司发布了 Java SE 6 版本。
  到2006年11月成立了 OpenJDK 开源组织,2007年3月起,全世界用户可以对 Java 源代码进行修改。
在这个时间节点上,可以看出,2006年11月13日 开源 JDK 代码库的决定是在 JDK 6 开发周期后期提出的(这个时候 JDK 6 开发快要结束了,同年12月12日发布了 JDK 6 可以看出),不可能立马把 JDK 6 构建成开源发布版本。而另一条 JDK 7 的研发线才刚刚开始,所以 JDK 7 的构建是第一个作为开源发布的版本。
  当 JDK 7 作为 OpenJDK 7 发布时,JDK 6 GA(一般可用版本,对应每个版本的发行版)版本 之后的 更新版本 JDK 6u1 也已经发布了,JDK 6 已经更新迭代了很多版本了。
  现在还差 JDK 6 的开源实现,考虑了替代方案之后,OpenJDK 7 build 20被选为向后分支的基础,通过从OpenJDK 7源代码中删除不适合Java SE 6实现的更改来创建OpenJDK 6。
  在 2009年 Oracle 收购 Sun 公司之后(在收购之前 2 年,OpenJDK 7 延续着 JDK 7 的开发路线,走在了JDK 7 前面),一直到2011年,Oracle 才发布 Oracle JDK 7 GA 版本。
  到 2009 年 Oracle 收购Sun 公司,此时的 JDK 7 还在 b10 版本,而 OpenJDK 已经延续迭代更新了多个版本,Oracle 收购 Sun 公司,获得了 Java 的 拥有权,明显是看中了 Java 的商业价值,奔着收费去的。当时停滞的 JDK 7 为了发行 GA 版本,只能参考 OpenJDK 的代码实现。而且大家还不太信任 Oracle,所以 Oracle 不能立马对 Java 收费,但是它可以暂时几乎大部分免费,只有少部分商业特性收费。
  后面一直持续到2019年4月16日,当大部分用户对Oracle JDK 产生了依赖时,特别是 中小企业,就开始收割韭菜要收费了。
  所以说 Oracle JDK 7 的参考实现 完全基于 OpenJDK 7 源代码,两者之间的代码功能几乎没什么区别,当然后面的 OpenJDK 社区 是由 Oracle 领导,成为社区的主要的贡献者,并且延续了 OpenJDK 快速迭代,Oracle JDK 稳定测试、吸收、优化发布 GA版本。
由于 OpenJDK 更新迭代的非常快,所以从 Oracle JDK 7 开始,后面 Oracle JDK 的参考实现 完全基于 OpenJDK 。

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

Azul 公司官网上宣传的说是业界支持 Java 最好的,达到或超过 Oracle 的产品版本,基于 8+2 年产品生命周期模型的长期支持 (LTS)。受到 27% 的财富 100 强企业信赖,1亿次安装。全球最大的 OpenJDK 提供商,作为世界上唯一一家专注于Java的公司。
关于 Azul Support for OpenJDK FAQ:https://www.azul.com/azul-support-for-openjdk-faq/

1.5.7 LIBERICA JDK

Liberica JDK 是由 BellSoft 公司开发的 Java™ 平台的免费开源实现,充满了有价值的功能和增强的支持。
BellSoft 公司由 Alex Belokrylov,Gregory Labzovsky和Alexei Voitylov 创立,他们之前曾在 Oracle 工作。他们聘请了Java平台的关键开发人员和从 1.5 开始的所有 Java 版本的贡献者。
BellSoft 公司被 Oracle 首席产品经理 Dalibor Topic 和 Java 开发人员关系总监 Sharat Chander 评为 Java 开发领域的领先公司之一。
2020年,BellSoft 公司 成为 OpenJDK 社区 的活跃成员,上游 Arm 端口的维护者和 OpenJDK 贡献者。该公司进入了前5名的 OpenJDK 贡献者。并且 BellSoft 公司 成为了 JCP 的成员。
关于 Liberica JDK 背景介绍:https://bell-sw.com/pages/about/

1.5.9 SapMachine

SapMachine 是由德国软件公司SAP(思爱普)维护和支持的 OpenJDK 下游版本。它用于为SAP客户和希望使用OpenJDK运行应用程序的合作伙伴构建和维护一个SAP支持的OpenJDK版本。自2001年以来 SAP 一直是 JCP 执行委员会成员,是 OpenJDK 项目最大的外部贡献者之一。领导 OpenJDK 17更新项目,大力支持 OpenJDK 11更新项目。

1.5.10 OpenLogic OpenJDK

OpenLogic 公司 也是 OpenJDK 开源社区贡献者之一,2019 年 8 月,OpenLogic 认识到 OpenJDK 中 Java WebStart 技术的当前状态不如 Oracle JDK 同等技术。该构建缺少关键功能,例如站点异常、jar 密钥匹配、Windows 代理设置和其他功能。
OpenLogic 为 IcedTea-Web 添加了功能,以实现与 Oracle 的 WebStart 发行版相同的功能。IcedTea-Web 2.0 接受了这些升级。
OpenLogic 提供并支持 OpenJDK 8 的免费发行版,以及适用于 Linux、Windows、MacOS 和 Docker 映像的免费、经过认证的 OpenJDK 11 发行版。OpenLogic 的认证 OpenJDK 版本每季度更新一次,并按需提供关键安全补丁。
OpenLogic 还为所有 Java 发行版提供商业支持,包括 Adopt OpenJDK、IBM 和 Oracle 的 Java。OpenLogic 的 Java 支持包括安全补丁和错误修复,以及 Java 和 JVM 的使用和管理指南。
OpenLogic 构建的 OpenJDK 是一种替代方案

1.6 了解更多 OpenJDK 参考资源

了解更多 OpenJDKOpenJDK 免费构建版Oracle JDK 以及其它 商业发行版 区别,参考来源及下面介绍:

  1. 来自 腾源会 视频号的直播回放,有 OpenJDK 社区的 Committer(OpenJDK 开源社区角色,可以提交自己对 OpenJDK 的优化代码)和 Reviewer (比 Committer 权限更高,不但可以提交代码,还能进行审批代码)对 OpenJDK 开源版和商业发行版是否冲突 的一些看法和总结:OpenJDK 开源版 和商业版 是否冲突
  2. 这位博主总结的也不错,可以参考借鉴:码农飞升记-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 技术标准规范组织

The Java Community Process (JCP) is the open, participative process to develop and revise the Java™ technology specifications, reference implementations, and test suites introduced in 1998. The Java Community Process (JCP) program fosters the evolution of the Java platform in cooperation with the international Java developer community.
参见:https://www.jcp.org/en/introduction/faq

JCP 是一个制定 Java 标准技术规范 的国际组织。 Java Community Process (JCP) 是一个开放的、参与性的过程,用于开发和修改1998年引入的 Java™ 技术规范、参考实现和测试套件。 Java社区进程 (Java Community Process, JCP) 计划与国际 Java 开发人员社区合作,促进 Java 平台的发展。

以下是 JSR Review(JSR 评审),Public Review(公共评审)和 Maintenance Review(维护评审)对应时间线:
在这里插入图片描述

2.1.1 JCP Member(Java 标准技术规范组织成员)

Any organization or individual which has signed a Java Specification Participation Agreement (JSPA), Associate Membership Agreement (AMA), or a Partner Membership Agreement (PMA) has become a JCP Member. Signing the AMA confers Associate Membership; Associate Members can serve as Contributors to a JSR and vote for the Associate seats on the Executive Committee. Signing the PMA grants Partner Membership; Partner Members can serve on the Executive Committee and vote for Ratified and Elected seats. Signing the JSPA grants Full Membership; Full Members can propose new JSRs, serve on Expert Groups, vote in the Executive Committee elections, and run for a seat on an Executive Committee.
参见:https://www.jcp.org/en/introduction/faq#member

任何签署了 Java规范参与协议(JSPA)关联会员协议(AMA)合作伙伴会员协议(PMA) 的组织或个人都是 JCP成员。 签署 关联会员协议(AMA) 可以作为 JSR 的贡献者,并为执行委员会中的关联席位投票。 签署PMA授予合作伙伴成员资格; 合作伙伴成员可以在执行委员会任职,并为批准和选举席位投票。 签署JSPA授予正式会员资格; 正式成员可以提出新的 JSR,为专家组服务,在执行委员会选举中投票,并竞选执行委员会的一个席位。

2.1.2 PMO(Program Management Office)项目管理办公室

The Program Management Office is the group within Oracle designated to oversee the Java Community Process and manage the daily running of the program. The actual development of the specification occurs within the Expert Groups. To contact the PMO, send email to pmo@jcp.org.
参见:https://www.jcp.org/en/introduction/faq#pmo

PMO(项目管理办公室) 是Oracle内部的一个小组,负责监督并管理 JCP 项目的日常运行。Java 规范的实际开发是在专家组内进行的。

2.1.3 JSR(Java Specification Request)Java 规范请求

A JSR is a Java Specification Request. This is the document submitted to the PMO by one or more members to propose the development of a new specification or significant revision to an existing specification. There are currently many Java technology specifications in development in the JCP program, including the next versions of Java™ Micro Edition (Java ME™), Java™ Platform Enterprise Edition (Java EE™), and Java™ Standard Edition (Java SE™). JSR also refers to the specification development efforts arising from these proposals. To see the JSRs, refer to the complete list of all JSRs.
参见:https://www.jcp.org/en/introduction/faq#jsr

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).

规范主管(Specification Lead)是一个 JCP 成员的代表,他领导一组专家开发Java规范请求(JSR)中描述的规范。
参见:https://www.jcp.org/en/introduction/faq#speclead

2.1.5 EC(Executive Committee)执行委员会

With JCP 2.9 and onward, the JCP has one Executive Committee (EC). Previously there were two Executive Committees, divided by platforms (Standard/Enterprise Edition, and Micro Edition). Voting Members on the EC serve two-year terms. There are fourteen ratified seats, eight elected seats, two associate seats, and the permanent seat held by Oracle America, Inc. The two-year terms are staggered so that half of the seats are normally up for ratification/election each year.
The EC members guide the evolution of Java technologies. The EC represents a cross-section of major stakeholders and other members of the Java Community. Duties are:
1、Select JSRs for development
2、Approve draft specifications for public review
3、Approve final specifications
4、Review Technology Compatibility Kit (TCK) appeals
5、Approve maintenance revisions and possibly defer some features to a new JSR
6、Approve transfer of maintenance duties between members
7、Provide guidance to the Process Management Office
For the list of current EC Members, please visit the Executive Committee info page.

EC(Executive Committee)是执行委员会,在JCP 2.9及以后,JCP有一个执行委员会(EC)。 之前有两个执行委员会,按照平台划分(标准/企业版和微型版)。 选举委员会的投票成员任期两年。 Oracle 公司拥有14个批准席位,8个选举席位,2个副席位和1个永久席位。 两年的任期是交错的,因此每年通常有一半的席位等待批准或选举。

EC成员指导Java技术的发展。 EC代表了Java Community 的主要涉众和其他成员的截面。
职责是:
1、选择jsr进行开发
2、批准 Java 规范草案供公众审查
3、批准最终的 Java 规范
4、回顾技术兼容性套件(TCK)呼吁
5、批准维护修订,并可能将某些功能交付给新的 JSR
6、批准成员之间的维修责任转移
7、为 PMO 提供指导

现任执行委员会及其代表如下,可以看到 阿里巴巴 是现任 EC 执行委员会成员之一,到今年2022年结束
在这里插入图片描述

具体可参见相关博主文章:https://www.cnblogs.com/HeavenZhi/p/14748206.html
官网参见,https://www.jcp.org/en/introduction/faq#ec
https://www.jcp.org/en/participation/committee

2.1.1 EG(Expert Group )专家组

The group of JCP Members who collaborate on developing a Java Specification through a JSR. The members of an Expert Group are listed on each JSR’s summary page.
参见:https://www.jcp.org/en/introduction/faq#eg

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.

技术兼容套件是JSR在最终和维护发布会上的另一个输出。 TCK用于测试最终规范的实现,以确保它们完全兼容。
参见:https://www.jcp.org/en/introduction/faq#tck

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 定义规范)的标准版以及密切相关的项目进行协作。这些章程的目标是通过使和鼓励其成员以公开,透明和任人唯贤的方式行事,促进社区的长期健康和增长。

The OpenJDK Community is structured as a set of Groups, which are collections of individuals who engage in open conversation about a common interest, and a set of Projects, which are collaborative efforts to produce specific artifacts. There are Community-wide general roles as well as roles specific to Groups and to Projects.

The Governing Board manages the structure and operation of the Community, monitoring its health relative to the principles set forth in the Preamble. It upholds and maintains these Bylaws, resolves procedural disputes, and ensures that sufficient infrastructure is available. The Governing Board has no direct authority over technical or release decisions.
参见:https://openjdk.org/bylaws

OpenJDK 社区的结构是由一系列 组(group) 和 一系列 项目(project) 组成,前者是参与关于共同兴趣的公开对话的个人的集合,后者是协作产生特定工件的项目。 有社区范围内的一般角色,也有特定于组和项目的角色。
理事会(Governing Board) 管理 OpenJDK 社区的 结构 和 运作,根据序言中提出的原则,监测 OpenJDK 社区的健康状况。 理事会 坚持和维护这些章程,解决程序争议,并确保有足够的基础设施可用。 理事会对技术或发布决定没有直接的权力。

2.2.1 一般角色(General Roles)

a、Participant (参与者)

A Participant is an individual who has subscribed to one or more OpenJDK mailing lists. A Participant may post messages to a list, submit simple patches, and make other kinds of small contributions.
参见:https://openjdk.org/bylaws#participant

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

b、Contributor (贡献者)

A Contributor is a Participant who has signed the Oracle Contributor Agreement (OCA), or who works for an organization that has signed that agreement or its equivalent and makes contributions within the scope of that work and subject to that agreement. A Contributor may submit changes larger than a simple patch, may propose new Projects, and may take on various roles within Groups and Projects.

If a Contributor’s employment situation changes such that contributions would no longer be covered by the OCA or its equivalent then the Contributor must relinquish that role by notifying the OpenJDK Lead.

贡献者是签署了Oracle贡献者协议(OCA)的参与者,或者是为签署了该协议的组织工作的参与者,或者是在该工作范围内做出贡献并受该协议约束的参与者。 一个贡献者可以提交比简单补丁更大的变更,可以提出新的项目,可以在组和项目中担任各种角色。
如果贡献者的就业情况发生变化,其贡献将不再被OCA或其同等物所覆盖,那么贡献者必须通过通知OpenJDK领导来放弃这个角色。

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(组成员)

A Group Member is a Contributor who has demonstrated a history of significant contributions to a Group and, as a result, has been granted Membership in that Group. A Member of a Group has write access to the Group’s web content and file repositories.

A Member of a Group may nominate any Contributor to be a new Member of that Group. Such nominations are approved by a Lazy Consensus of the Group’s Members.

A Member of a Group may raise a motion to remove another of that Group’s Members. Such a motion must be approved by a Two-Thirds Majority of the Group’s Members, with the Member who is the subject of the motion abstaining.

Group 成员是指对 Group 有重大贡献的贡献者。 Group 的成员对 Group 的 web 内容和文件存储库具有写访问权。
一个 Group 小组的成员可以提名任何贡献者成为该 Group 小组的新成员。 这样的提名是由 Group 共同批准的。
某一小组的成员可提议删除该小组的另一成员。 这样的动议必须得到工作组成员三分之二多数的批准,而作为动议主题的成员弃权。

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(提交者)

A Committer to a Project is an Author who has been granted direct push access to the Project’s code repositories.

A Committer to a Project may nominate any Contributor to be a new Committer to that Project. Such nominations are approved by a Lazy Consensus of the Project’s Committers.

A Committer to a Project may raise a motion to remove another of that Project’s Committers. Such a motion must be approved by a Two-Thirds Majority of the Project’s Committers, with the Committer who is the subject of the motion abstaining.

项目的提交者是被授予对项目代码存储库的直接推送访问权的作者。
项目的提交人可以提名任何贡献者成为该项目的新提交人。 这样的提名是由项目提交人的共识批准的。
项目的提交人可以提出动议,删除该项目的另一个提交人。 这样的动议必须得到项目委员会三分之二多数的批准,而作为动议主体的委员会弃权。

c、Reviewer(评审人)

A Reviewer for a Project is an experienced Committer who has the authority to approve changesets destined for code repositories designated by the Project Lead as requiring formal change review. Projects that do not require any formal change review will not have any Reviewers.

A Reviewer for a Project may nominate any of that Project’s Committers to be a new Reviewer for that Project. Such nominations are approved by a Three-Vote Consensus of the Project’s Reviewers.

A Reviewer for a Project may raise a motion to revoke the Reviewer role of another of that Project’s Committers, unless that Reviewer is the Project’s Lead. Such a motion must be approved by a Two-Thirds Majority of the Project’s Reviewers, with the Reviewer who is the subject of the motion abstaining.

项目的评审人员是一个有经验的提交者,他有权批准由项目领导指定的需要正式变更评审的代码存储库的变更集。 不需要任何正式变更评审的项目将不会有任何评审人员。
项目的审稿人可以提名该项目的任何提交者为该项目的新审稿人。 此类提名由项目审查人员三票一致通过。
项目的审稿人可以提出动议,撤销该项目另一个提交者的审稿人角色,除非这个审稿人是项目的领导。 这样的动议必须得到项目审稿人三分之二多数的批准,而作为动议主体的审稿人弃权。

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)

Any Group Member or Committer may be nominated to be an OpenJDK Member by an existing OpenJDK Member. Such a nomination must be approved by a Three-Vote Consensus of the OpenJDK Members.

The OpenJDK Members Group consists of all OpenJDK Members. The OpenJDK Lead is its Group Lead. The usual rules for dissolving Groups, adding and removing Group Members, and selecting and removing Group Leads do not apply to the OpenJDK Members Group.

任何 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)

The Governing Board manages the structure and operation of the OpenJDK Community.

The Governing Board consists of five Contributors:
1、The Chair, appointed by Oracle;
2、The Vice-Chair, appointed by IBM;
3、The OpenJDK Lead, appointed by Oracle; and
4、Two At-Large Members, nominated and elected as described below.

理事会(Governing Board,管理委员会) 管理 OpenJDK 社区的 结构 和 运行。
理事会(Governing Board,管理委员会) 由 5名 贡献者 组成:

a、1 名 主席(由 Oracle 任命)
b、1 名 副主席(由 IBM 任命)
c、1 名 OpenJDK 负责人(OpenJDK Lead 由 Oracle 任命)
d、2 名 一般会员(管理委员会的一般会员由 OpenJDK 成员投票选出。一般会员的任期为一个日历年,从每年 4 月的第一天开始。)

第 3 章 OpenJDK 官网介绍

OpenJDK 官网地址:https://openjdk.org/,首页如下图所示:
在这里插入图片描述

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 这章。

  1. 各 JDK 支持版本的项目
  2. 各 JDK Updates 支持版本的项目
  3. Amber,高生产力的语言特性,新的语言特性改进项目。
  4. Loom,轻量级的并发性,之前的 Java 做并发处理的最小调度单位是线程,Java 线程的调度是直接由操作系统内核提供的,会有核心态和用户态的切换开销。而很多其它语言都提供了更加轻量级的、由软件自身进行调度的用户线程(曾经非常早期的 Java 也有绿色线程),譬如 Golang 的 Groutine、D 语言的 Fiber 等。Loom 项目就准备提供一套与目前 Thread 类 API 非常接近的实现。
  5. Panama,目的是消弭 Java 虚拟机 与 本地代码之间的界限。现在 Java 代码可以通过 JNI 来调用本地代码,这点与硬件交互频繁的场合尤其常用(譬如 Android)。Panama 项目的目标就是提供更好地方式让 Java 代码与本地代码进行调用和传输数据。
  6. Valhalla,提供值类型和基本类型的泛型支持,并提供明确的不可变类型和非引用类型的声明。不可变类型在并发编程中能带来很多好处,没有数据竞争风险带来了更好地性能。
  7. Jigsaw 项目:虚拟机层面的模块化支持。
  8. … 等等

如果你想学习如何使用当前可用的 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/

JDK 8 及早期版本,参见下图给出的各平台的安装命令,特别是对于各版本 Linux 系统,都内置了 OpenJDK 安装包,
直接使用命令解压安装即可。

在这里插入图片描述

  • 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
补丁版本

这个是 Oracle 基于 OpenJDK 进行构建 的 二进制文件(Oracle OpenJDK) 和 OpenJDK 源码 下载页面:
在这里插入图片描述

  • Mailing lists

这里是 OpenJDK 的邮件列表,一些重要的通知、技术讨论、公告等都在邮件列表这里查看

在这里插入图片描述

  • Wiki

这里是对 OpenJDK 官网的补充,特别针对于 OpenJDK Updates 项目的维护,可以在这里面下载到 最新漏洞维护升级更新的 OpenJDK Update 版本,当然还有一些其它的 项目,其中 JDK 漏洞系统 也在这里维护。

这里主要是 OpenJDK 开发人员 来维护。
更多 FAQ,参见:https://wiki.openjdk.org/display/general/FAQ
在这里插入图片描述

  • IRC

IRC(Internet Relay Chat,互联网中继聊天)是一个多用户,多渠道的聊天系统。想象一下,坐在电脑前,通过键入的消息与来自互联网上的一个人或许多其他人“交谈”,所有这些都是实时的!最重要的是,一旦你设置好了,在IRC上聊天是完全免费的!

使用这个可以和社区成员聊天和技术讨论,
具体使用教程,参见:http://www.irchelp.org/faq/irctutorial.html

在这里插入图片描述

  • Bylaws

这里介绍了 OpenJDK 社区 结构组成(主要由 Groups 组 和 Projects 项目 组成)以及 各级成员角色,根据这些章程,OpenJDK 社区保持在良好的发展中。在这里插入图片描述

  • Census

这里主要收录统计了 OpenJDK 社区的人员名单,以及各 Group 组 和 Project 项目的详细负责人和负责的任务。

下图以 JDK 8 Updates Project 为例:

在这里插入图片描述

  • Legal

这里主要介绍了 OpenJDK 的 OCA 协议(Oracle 贡献者协议)、OCTLA(OpenJDK 社区的 TCK 许可协议)、
OpenJDK 的 GPL v2 + Classpath Exception 开源协议。涉及的都是法律条款性的内容

在这里插入图片描述

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 支持。

博主参考链接:https://juejin.cn/post/6967184619460362247
官网参见:https://openjdk.org/jeps/1
在这里插入图片描述

  • Source code
  1. 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
    在这里插入图片描述

  2. GitHub
    OpenJDK 社区 开源项目源码托管的新地方,让 OpenJDK 开发人员更加方便地对开源项目进行开发维护,我们也可以在 GitHub 方便地拉取源代码。
    在这里插入图片描述

  • Tools
  1. Git
    项目源码版本管理工具
  2. jtreg harness
    jtreg是 JDK 测试框架使用的测试工具。此框架主要用于回归测试。它还可以用于单元测试,功能测试,甚至简单的产品测试 – 换句话说,除了属于TCK的一致性测试之外,几乎包括任何类型的测试。

3.2.3 Groups

OpenJDK 社区 有很多 Group 组,如下图所示:
在这里插入图片描述
每个组包含着一个或多个 Project 项目,每个组都由 组成员组领导 构成。

3.2.4 Projects

OpenJDK 社区 有很多 开源项目,每个项目由 作者、提交者、审阅者、项目领导 构成。

在这里插入图片描述插入图片描述
在这里插入图片描述
列举一些比较活跃的项目:参见:《深入理解 Java 虚拟机》走进 Java 这章。

  1. 各 JDK 支持版本的项目
  2. 各 JDK Updates 支持版本的项目
  3. Amber,高生产力的语言特性,新的语言特性改进项目
  4. Loom,轻量级的并发性,之前的 Java 做并发处理的最小调度单位是线程,Java 线程的调度是直接由操作系统内核提供的,会有核心态和用户态的切换开销。而很多其它语言都提供了更加轻量级的、由软件自身进行调度的用户线程(曾经非常早期的 Java 也有绿色线程),譬如 Golang 的 Groutine、D 语言的 Fiber 等。Loom 项目就准备提供一套与目前 Thread 类 API 非常接近的实现。
  5. Panama,目的是消弭 Java 虚拟机 与 本地代码之间的界限。现在 Java 代码可以通过 JNI 来调用本地代码,这点与硬件交互频繁的场合尤其常用(譬如 Android)。Panama 项目的目标就是提供更好地方式让 Java 代码与本地代码进行调用和传输数据。
  6. Valhalla,提供值类型和基本类型的泛型支持,并提供明确的不可变类型和非引用类型的声明。不可变类型在并发编程中能带来很多好处,没有数据竞争风险带来了更好地性能。
  7. Jigsaw 项目:虚拟机层面的模块化支持。
  8. … 等等

第 4 章 OpenJDK 源码下载

OpenJDK 社区 中 JDK 项目 源码下载,有以下几种方式:

4.1 从 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

在 OpenJDK 社区 官网 左侧列表上,找到 Mercurial ,如下图所示:
在这里插入图片描述
点击进去之后,可以看到 OpenJDK 社区 项目列表,例如选择 下载 JDK 8u(表示 JDK 8 Updates 项目,在这里对 JDK 8 后续的更新维护提供支持) ,如下图所示:
在这里插入图片描述
点击 jdk8u 项目,进去之后,选择 jdk8u 下面的 jdk 源码,
其中 jdk8u-dev 是 OpenJDK 8 Updates 更新项目的开发分支,开发维护更新完成之后,经过检测无误,最终 jdk8u-dev 分支更新的代码会合并到 jdk8u 主分支上。
当然你也可以下载 jdk8u 中的 hotspot 虚拟机源代码。
在这里插入图片描述
点击进去之后,可以看到左侧,有 zip 和 gz 格式的源码压缩包,对应 windows 和 linux 平台。这里是windows 平台,所以选择 zip,会直接开始下载 jdk 源码压缩包,如下图所示。
在这里插入图片描述

4.1 从 GitHub 上下载

在 OpenJDK 社区 官网 左侧列表中,选择 GitHub,如下图所示:
在这里插入图片描述
进入 OpenJDK 社区 GitHub 源码 管理仓库,可以看到有很多项目,一目了然,比 Mercurial 仓库上查找下载方便得多,就是网速有时候会很慢,至于从 GitHub 上如何拉取代码,这里不再赘述,可自行百度。
在这里插入图片描述

4.3 从 Oracle OpenJDK 构建官网上下载

注意:从这里下载 JDK 源码,只有 6 个月的更新版本可供下载,并不是最新更新版本的 JDK 源码

进入到 Oracle OpenJDK 构建官网:https://jdk.java.net/,点击最新构建版本的 JDK,如下图所示:
在这里插入图片描述
点击进去之后,选择左侧列表的 JavaSE 8,找到 RI Source Code,点击选择 zip file,即可下载 windows 版本的源码压缩包。
在这里插入图片描述

Published by

风君子

独自遨游何稽首 揭天掀地慰生平