
人必须要保持成长性,明白以前囫囵吞枣接受的观念,有其局限性——而输入在很大程度上决定了输出,要不停地锻炼认识和思辨能力,并在两者不断发展的过程中,结合事实、常识和逻辑对旧有观念进行重新审视和扬弃,才能摆脱局限、拓宽精神世界。
Mark Reinhold(Java 平台首席架构师),2017 :Moving Java Forward Faster
二十多年来,Java SE Platform 和 JDK 以巨大、无规律,甚至是无法预料的方式在演进。每一次特性发版都由一个或多个重要特性驱动,为了迁就这些特性的实际进展,新版本的发布时间经常需要做出调整,有时甚至需要调整多次。
这种方法通过早期采用者全面的审查和测试,保障了新推出的重大特性的高质量。缺点是较小的 API、语言、JVM 特性调整需要等到重大特性准备就绪,才能跟着一起推出。
在世纪之交的几十年里,当和 Java 竞争的其余平台也以同样缓慢的方式演进时,这是一种可以接受的折衷方案。但今非昔比,当前 Java 的竞争对手正以更快的频率发布更新。
为了保持竞争力,Java 不能再仅仅满足于往前走,而需要往前赶。
Back on the train
5 年前,我开始思考一种张力——开发者更喜欢快速创新、企业更喜欢保持稳定、大家都喜欢有规律、可预测的发版计划。
为了应对不同的诉求,我建议从历史沿革下来 基于特性的发版模式 转换到 基于时间的列车模式 ——具体可以是每两年推出一个特性版本。在这种模式下,开发流程就是一个持续的创新管道,和实际的发版流程是松耦合关系——发版流程有自己的固有频率。任何特性,不管大小,当且仅当接近完成的时候才进行合并。如果一个特性错过了当前这班列车,只能表示遗憾,并等待搭乘下一班列车。
两年制列车在理论上很吸引人,但实际证明行不通。我们额外花了 8 个月来处理 Java 8 中关键的安全问题和完成 Lambda 项目,这比再延迟两年推出 Lamdba 更好。在开发 Java 9 的时候,为了包含 Jigsaw 项目,一开始的版本规划是两年半,这比再延迟 18 个月才推出 Jigsaw 更好,但在最后,我们又焦躁不安地多花了一年,所以 Java 9 在 Java 8 发布 3 年半之后才推出。
回顾过去,两年发一次版实在太慢了。为了保持一个持续稳定的步调,必须以更快的频率发版。推迟一个特性到下一个版本再发布,应该是一个带来少量不便的战术决定,而非一个带来重大后果的战略决策。
那么,我们就每 6 个月推出一个特性版本。
这样最小化了等待下一班列车的痛苦,并且足够慢以保障交付质量。
Proposal
其他平台和很多操作系统发行版都采用了这种发布模式,这让我备受鼓舞,所以提议在 Java 9 之后就采用一种严格的、基于时间的发布模式——每 6 个月发布一个 Feature 版本,每个季度发布一个 Update 版本,每 3 年发布一个 LTS 版本。
- Feature release,可以包含任意特性,不只是新增和改善 API 的特性,也可以是语言和 JVM 特性。当新特性接近完成时,才被合入,这样保证了待发布版本总是处于特性就绪状态。从 2018 年 3 月起,每年的 3 月和 9 月推出 Feature 版本。
- Update release,仅用于修复安全漏洞、回退、bug 修复。两个 Feature 版本之间包含两个 Update 版本。Update 版本将在每个季度的首月推出:1 月、4 月、7 月、10 月。
- LTS release,提供长期支持,从 2018 年 9 月开始,每 3 年推出一个 LTS 版本,针对 LTS 版本的 Update 版本至少会持续 3 年,并可能更长——取决于你的支持厂商。
这种模式下,整体变更率和当前差不多,区别在于有更多的机会推出创新。每 6 个月的特性发版比之前的基于几年的特性发版要小,更易于采用。6 个月的发版周期也减小了将新特性移植到旧版本的压力,因为下一个特性版本的内容不会超过 6 个月。
偏爱快速创新的开发人员可以采用最新的 Feature 版本或者 Update 版本并在新版本推出后迅速迁移过去,以尽快将新特性运用到生产上。现在可以基于 Docker 镜像或者其他容器打包类型来发布应用,并配套指定的 Java 发行版。在现代持续集成、持续部署流水线中,应用和 Java 发行版总是结合在一起进行测试,使得从一个 Java 发行版迁移到下一个版本变得更简单。
偏爱稳定的企业可以选择 LTS 版本,使得可以将若干大型应用运行在同样的 Java 发行版上(博主:归约技术栈)。同时可以提前做好规划,每 3 年从一个 LTS 版本迁移到下一个。
具体点说,这些都是基于时间的版本,可以方便地计算出任意特定版本下一次发版日期,版本号由 年.月 组成。这样,明年 3 月份的版本就是 18.3,9 月份的 LTS 版本就是 18.9。
Implications
如果被采纳,这项提议将对 OpenJDK 社区的贡献者如何生产 JDK 产生重大影响。我已经就该事项提交了一些初步想法。如果能减轻 JCP(负责 Java SE Platform 的演进) 的工作负荷,将使得事情更容易推进。我的同事 Brian Goetz 和 Georges Saab 已经在 JCP 执行委员会里发起了议题。
这项提议最终将影响到依赖 Java 平台的每个开发人员、用户和企业。如果顺利,将在保有 Java 平台核心价值 —— 兼容性、可靠性、深思熟虑的演进 —— 的基础上,让 Java 在后续的许多年里继续保持竞争力。
The End
2021:Moving Java Forward Even Faster,提议将 3 年一个 LTS 版本缩短为 2 年一个 LTS 版本。

0 条评论