Java 平台组首席架构师谈 Java 的发展和迭代

发布于:2017 年 10 月 9 日 17:48

前阿里 P9 技术专家 李运华,正在传授十几年架构实战心法,超过 46000 人跟随学习,点击查看 >>

9 月 21 日 Oracle 发布了 Java 9.0 版本,同时 Oracle 宣布在 9.0 之后,会将 Java 的发布周期调整为每半年一次版本

针对这种变化,Java 平台组首席架构师Mark Reinhold 在其个人博客中阐述了他的观点

在过去的二十年间,Java SE 平台和JDK 经历了很大的变化,其中每个演变步骤都变更很大、不规则并且在一定程度上来讲很难预测。历史上,每个特性释放版本都是由一个或多个重要特性驱动的,所以为了适应这些特性的研发进度,发布日程也会按需进行调整,有时候甚至不止调整一次。

这样做的好处就是能够以非常高的质量交付大型的新特性,在这个过程中会经过早期采用者的全面审查和测试。但是,它所带来的不足就是小型的API、语言和平台的变更无法单独发布,只能等到大特性就绪之后才能交付。

在过去的二十年中,这种发布节奏还是可以的,因为当时与Java 竞争的只有几个平台,基本都是采用类似的发布节奏。但是,现在Java 要与很多的平台竞争,这些平台的演化节奏更快。Java 为了保持竞争力,必须要不断前进,而且要前进地更快。

“列车”模式的版本发布

五年前,Mark Reinhold 就曾经讨论过开发人员与企业之间不同的诉求,开发人员希望更快的革新,而企业更关注稳定性,但是每个人都希望规律且可预测的发布周期。

为了解决这个问题,当时Reinhold 提出了将特性驱动的发布模式改为时间驱动的“列车”模式。在这种模式下,开发进程是一个持续的革新过程,它与实际的发布进程是松耦合的。不管特性大小,只有在接近完成的时候才合并进来。如果某个特性非常遗憾地错过了当前的这趟“列车”,那么这也不是世界末日,因为下一趟“列车”已经在等待中并且会按照时间表发车。

两年为间隔的“列车”模式在理论上很吸引人,但是事实证明在实践中行不通。Java 8 为了解决关键的安全问题和完成Lambda 项目多耗费了八个月的时间,但是这要比让Lambda 项目再等两年更好一些。为了包含 Jigsaw 项目,Java 9 最初的发布周期是两年半,虽然超出了半年,但是这要比让 Jigsaw 项目多等 18 个月更好,不过最终 Java 9 多耗费了一年的时间,也就是会在本月发布,这样从 Java 8 发布到现在经历了三年半的时间。

Reinhold 认为,现在来看两年的发布周期太长了,交付特性的节奏应该更快一些。将某项特性推迟到下个版本发布,不应该是有重大影响的战略决策,而应该是影响不太大的战术性决策。因此,Reinhold 认为六个月是一个合适的发布周期。它比以前更快,会减少等待下一趟“列车”的痛苦,同时也有足够的时间保证每次发布的质量。

提议

根据其他平台和各种操作系统版本的发布模式,Reinhold 建议在 Java 9 之后,采用一种更严格基于时间模式,每六个月发布一个新特性释放版本,每季度发布一个更新释放版本,每三年发布一个长期支持的发布版本。

  • 特性发布版本可以包含任何类型的特性,不仅包括新的以及增强的 API,还包含语言和 JVM 的特性。特性只有在接近完成的时候,才会合并进来,所以当前要释放的版本始终都是特性已完成的状态。特性发布版本会在每年的三月和九月交付,从 2018 年的三月开始。
  • 更新释放版本会被严格限制,只能解决安全问题、回归测试中的问题和 bug。每个特性发布版本都会有两个更新版本,更新版本会按照季度发布,在每年的一月、四月、七月和十月交付。
  • 从 2018 年的九月开始,特性发布版本同时也会是一个长期支持版本。对这些发布版本,至少会支持三年,甚至更长时间。

每半年交付一次的发布版本会比多年才交付一次的版本体量更小,更易于采用,同时为旧释放版本打补丁也会更容易。

开发人员更喜欢快节奏的创新,那么他们可以使用最新的特性发布版本或特性更新版本,这样就能尽快在生产环境使用新特性。他们可以通过 Docker 镜像或其他类型的容器包交付应用,容器中会同时包含应用所要使用的 Java 发布版本。

企业会更加关注稳定性,那么可以让多个大型的应用使用相同的 Java 版本,他们可以使用长期支持的发布版。像常规工作一样,他们可以每三年规划一次长期维护版本的升级。

为了明确特定版本的发布时间,特性发布版的版本号格式为 YEAR.MONTH,因此明年三月份的发布版将会是 18.3,九月份的长期维护版将会是 18.9。

Reinhold 认为,如果采用这种模式的话,将会影响到 OpenJDK 社区的贡献者。这项提议会最终影响每个依赖 Java 的开发者、用户和企业。但是,如果成功的话,将会在未来的很多年内保持 Java 的竞争力,同时能维持它的核心价值,也就是兼容性、可靠性以及稳健的特性演化。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

阅读数:4000 发布于:2017 年 10 月 9 日 17:48

更多 Java、语言 & 开发、架构 相关课程,可下载【 极客时间 】App 免费领取 >

评论

发布
暂无评论
  • 75 | 软件版本迭代的规划

    在不同阶段,版本迭代的侧重点会有极大的不同。

    2020 年 1 月 21 日

  • JRuby:该不该转向 Java 5?

    在JRuby圈子中,关于项目是否应当转向Java 5的讨论又重新浮出水面。割断与Java 1.4的兼容性是否值得呢?使用诸如Annotation和Enum这样的语言特性是有好处的,同时也可以不必使用移植到早期Java版本的并发类库。到底该不该做这个决定呢?我们试分析一下其中的优缺点吧。

    2007 年 7 月 30 日

  • Java 8 新闻:发布候选版面世、新的原子数、放弃简易实现(Stripped Implementations)

    Java 8的第一个发布候选版(RC)已于2月初面世。第一个发布候选版b128是2月4日发布的,第二个版本则于一周后在OpenJDK邮件列表中宣告问世。Drew Stephens最近发布的数据表明,Java 8的原子数实现快了很多。因为法律方面的问题,Mark Reinhold最近提议从Java SE 8中去掉简易实现(Stripped implementations)。

    2014 年 2 月 18 日

  • Oracle 启动针对 Java 的 Valhalla 项目

    Oracle启动了Valhalla项目,用于实验JVM和Java语言的高级特性,其中包括对Java泛型实现方式的重大修改。

    2014 年 8 月 8 日

  • Ashton-Tate:桌面数据库王者的兴衰

    dBase这款产品现在对我们来说已经很陌生了,但是它曾经是一款非常著名的桌面数据库产品。它由已经不存在的Ashton-Tate公司推出。

    2018 年 9 月 17 日

  • 选择哪一个 Nginx 发行版本?

    2018 年 11 月 5 日

  • Java 将每半年发布一个版本

    Oracle宣布Java将改为每六个月发布一个版本,取代现在的2年一发布。他们还宣布OpenJDK将被作为面向开发者的主要版本,继续将Oracle JDK作为长期支持版本。

    2017 年 9 月 10 日

  • 解密 Java 增强的泛型

    尽管Java 8是2014年年初才发布的,而Java 9要等到2016年年中,但是预计会出现在Java 10中的一些特性的原型已经出现,其中就包括对泛型的大修。

    2015 年 1 月 6 日

  • DevCloud on DevCloud 从 1 月 1 次到 1 天 10 次发布的实践分享

    2018 年 12 月 18 日

  • Oracle 确认 Java 9 将推迟发布

    在最近的交流中,Oracle公司Java Platform Group的首席架构师Mark Reinhold提出Java 9的正式版本将延迟6个月发布,以此来给Project Jigsaw的完成争取更多的时间。经过审议后,这次延迟被采纳,将Java 9的正式版本发布时间定于2017年3月。

    2015 年 12 月 27 日