亚马逊AWS官方博客

请你喝一杯 Corretto?谈一谈 JDK 的新选择

前言

如果以20年的时间为限,让我们选出一个影响力最大的程序语言,我的答案应该只有一个 – 那就是Java。这个1995年诞生的全新的计算机语言,以“一次编写,到处运行”的跨平台特性以及面向对象、泛型编程等现代语言的特性迅速成为了企业级应用乃至移动应用开发的首选。伴随着Java的普及,用以开发并提供JVM支持的Java Development Kit (JDK) 就成为了最重要的一个开发工具包。历史上曾经出现过许多JDK的发行版,例如IceTea、Blackdown、JRockit、Apache Harmony 等等至今都已成为历史。今天,当我们面对OpenJDK、Azul、Oracle Java SE 等许多JDK 的选项的时候,我们又该如何取舍呢?

什么是Amazon Corretto ?

咖啡爱好者都知道,Correto是一种意大利浓缩咖啡掺入类似白兰地的烈酒调和而成的咖啡。抿上一口,酒与咖啡共饮带来的刺激口感和浓郁气氛使人沉醉。但我这里谈到的 Amazon Corretto 可不是亚马逊出产的咖啡,按照官方的说法它是这样的 –

Amazon Corretto 是开放 Java 开发工具包 (OpenJDK) 的免费、多平台、生产就绪型发行版。Corretto 提供长期支持,其中包括性能增强和安全修复。亚马逊在内部的数千种生产服务上运行 Corretto,并且 Corretto 已被证明能够兼容 Java SE 标准。借助 Corretto,您可以在常用操作系统(包括 Linux、Windows 和 macOS)上开发和运行 Java 应用程序。

来源 – https://aws.amazon.com/cn/corretto/

 

Amazon Corretto 支持多种平台,使您能够在云计算环境、私有数据中心、本地的机器或者容器中运行。与OpenJDK 相对应的Corretto 现在可以用于Linux x64Linux aarch64Windows x64Windows x86macOS x64Amazon Linux 2 x64Amazon Linux 2 aarch64 等多个平台或者操作系统以及云计算环境之上。目前发布的版本有与Open JDK 8相对应的 Corretto 8以及与OpenJDK 11 对应的 Corretto 11。

 

为确保与Java SE 平台的兼容性,对于每个Corretto版本上运行技术兼容性工具包(TCK),以确保Corretto可作为所有Java SE 发行版的完全替代,除非您使用的是 OpenJDK 中不可用的特性 (例如,Java Flight Recorder)。Corretto 安装完毕以运行Java应用程序现有的 Java 命令行选项、调优参数、监控和其他任操作都将可以继续工作。

 

作为一家成功的以技术驱动的企业,Amazon 在其25年的历史中构建起来了一套庞大的IT系统。数以千计的生产服务都是基于Java语言而开发的,而运行这些应用的基础就是JDK。这个过程,使得Amazon 积累了丰富的JDK 应用的经验。在知识问答网站Quora 曾经有这样一个问题,

我统计了一下答案,被提到的最多的开发语言大概就是Java了。在这里我想引用James Gosling的一句评价。众所周知,James Gosling是 Java 语言的奠基人,也是我非常尊敬的前辈。他目前在AWS 担任Distinguished Engineer ,因工作之便我得以有幸曾与他共进晚餐,听他聊起当年的八卦,这大概也算是一种福利吧。

“Amazon has a long and deep history with Java. I’m thrilled to see the work of our internal mission-critical Java team being made available to the rest of the world”

— James Gosling

这句话翻译出来就是“亚马逊在Java方面有着悠久而深厚的历史。我很高兴看到我们的内部关键任务Java团队的工作可以提供给世界其他地方。

为什么需要 Amazon Corretto ?

回答这个问题需要回顾过去几年围绕着Java发生的一系列动荡。熟悉Java 的开发者都应该知道Java SE。我们熟悉的Java SE 定义了一系列通用的Java API,还包括了Java语言的规范和 Java 虚拟机 (JVM) 的规范。Java SE最著名的实现之一就是Oracle Corporation’s Java Development Kit (JDK)。以往,Java SE规范受 JCP(Java Community Process, https://jcp.org/ )管理。 JCP 决定了哪些新的规范可以加入,哪些需要删除。 原则上任何人都可以去实现Java的语言规范。 如果这个实现通过了TCK(测试兼容性套件),则通常被认为是兼容的JDK。但是,因为两件事的发生,围绕着JDK 的争吵与混乱开始了 –

  • Java开始每六个月发布一个新的主要版本
  • Oracle更改了其对Java的支持模型。简单说来,Oracle现在分发两个JDK构建:Oracle JDK和Oracle OpenJDK。Oracle JDK免费提供开发和测试,但如果在生产中使用它,则必须付费。Oracle的OpenJDK在任何环境下都是免费的。

为了给这个混乱火上浇油,Oracle 宣布Java SE 8将在2019年1月结束Java SE 8的公共更新 (https://blogs.oracle.com/java-platform-group/end-of-public-updates-is-a-process%2c-not-an-event)。

 

 

按照我的理解,这个变化很大程度上与Oracle 的商业策略有关。但是,每个Java用户、社区、企业等都对未来Java 是否免费使用感到困惑。我相信,大部分Java 的用户都没有打算为此而付费。此外,尽管JDK 11 已日趋成熟,JDK 12 正紧锣密鼓的开发中。但现实世界中的大部分Java 应用,尤其是强调稳定性、可靠性的企业应用目前还是建立在JDK 8 之山。更有许多企业,至今仍将JDK 8 作为首选的Java 环境。

这张图是2019年初的一个统计数据,让我们得以了解市场中各个不同版本的现状,由其凸显了当下Java 8 的重要性。

来源:https://aspiresoftware.in/blog/wp-content/uploads/2019/01/10824654-screen-shot-2018-12-05-at-91642-am.png

尽管OpenJDK将保持免费状态并且可以在生产中使用,但是Oracle仅承诺在发行后六个月内支持和更新Oracle Java 11 OpenJDK。所有后续支持和更新都归于开源社区。但众所周知,OpenJDK 社区的响应速度、更新频度等并不能够很好的满足企业关键业务支持的需要。关于这个看法,我想引用Micah Silverman ,一个拥有24年Java开发经验的Java 老兵的一段话 –

 

OpenJDK构建给我带来的最大痛苦是,他们悲惨地落后于Oracle JDKTLS密码套件和TLS版本(1.11.2)的实现。但是,我从事的开源项目有一个大量暴露于各种加密算法和反向代理类型的工作负载,这些工作负载充分利用了这些东西,因此很可能无法代表其他人在尝试OpenJDK时可能遇到的标准Web应用程序或微服务所遇到的问题类型,尤其是在OpenJDK 11和后来的版本更符合Oracle JDK版本。”

来源:https://developer.okta.com/blog/2019/01/16/which-java-sdk

于是,在这样的局面之下Amazon Corretto 应需而生。一方面是Amazon 自身对于数量巨大的Java 应用的需要。在Amazon的系统框架之下,数千种生产服务上运行着Corretto。 这就要求Corretto的补丁程序和改进功能够满足Amazon解决大规模的、现实环境中的服务问题,从而满足强大的性能和可扩展性的需求。

此外也可以通过这个开源项目回馈给开源社区以及为数众多的Java开发者。Amazon通过免费且长期的支持为用户提供这些功能,并每个季度更新一次,包括了错误修复和安全补丁。 AWS甚至还承诺在季度计划之外向客户提供紧急的修复。需要强调的是,Correto承诺是长期支持(Long-term support,LTS)。 这个长期支持包括了Amazon承诺至少在相关发行版本的指定日期(例如Corretto 8的承诺是2023年6月)之前免费提供性能增强和安全更新。

 

许多Java的用户已经表示出了对Corretto的极大兴趣,并有许多已经开始了迁移之旅。例如FICO,这是一家位于加州圣何塞的数据分析公司,专注于信用评分服务。它的FICO score,衡量消费者信贷风险的指标,已经成为美国消费者贷款的一个固定指标。他的的工程副总裁Jeet Kaul就这样表示过 –

 

“在FICO,我们已经在很多服务中使用了OpenJDK。有了Amazon Corretto,我们不仅可以为云部署Java,还可以跨所有部署和多个操作系统部署Java,因为我们知道Amazon和社区支持OpenJDK。我们从预览版开始就一直在评估Corretto,并无缝地替换了我们的Java运行时。”

 

Amazon Corretto启动

启动Amazon Corretto的最简单方法是在选择所需要平台并下载安装软件包。要注意Java 的版本,Java 8 或者 Java 11:

Amazon Corretto 官网 – https://aws.amazon.com/cn/corretto/

Amazon Corretto 8 的下载 – https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-8-ug/downloads-list.html

Amazon Corretto 11 的下载 – https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-11-ug/downloads-list.html

Amazon Corretto 8 源代码 – https://github.com/corretto/corretto-8

Amazon Corretto 11 源代码 – https://github.com/corretto/corretto-11

java -version

openjdk version “11.0.3” 2019-04-16 LTS

OpenJDK Runtime Environment Corretto-11.0.3.7.1 (build 11.0.3+7-LTS)

OpenJDK 64-Bit Server VM Corretto-11.0.3.7.1 (build 11.0.3+7-LTS, mixed mode)

Amazon Corretto和Open JDK的合作

Amazon在以往已经为OpenJDK 8做出了许多贡献,并将在今后会与OpenJDK社区进行更紧密的合作,以实现OpenJDK 8和11的完善与增强。如果针对JDK的修补程序在上游项目不能获得批准、延迟或不适合于OpenJDK项目,Amazon将在提供增值服务的前提下将其提供给Corretto 的用户。如果在OpenJDK中以其他方式解决了此类问题,Amazon也将在安全的前提下尽快解决该问题。至于AWS,在2019年已经让Corretto成为Amazon Linux 上的默认 JDK。

 

结语

最后,总结一下 Amazon Corretto 的特性-

  • 免费,开源,多平台和可用于生产的JDK (GPL-2.0)
  • OpenJDK的下游发行版本
  • 免费长期支持 (LTS)
  • 至少每季度发布一次更新
  • 直接替换(直接替换现有的OpenJDK)
  • 多平台— Linux、Windows、macOS、Docker
  • 启用了技术兼容性套件(TCK),以确保与Java SE平台的兼容性

 

我们鼓励您使用Corretto来运行Java应用程序。预祝各位的Amazon Corretto体验愉快!

 

本篇作者

费良宏

费良宏,AWS Principal Developer Advocate。在过去的20多年一直从事软件架构、程序开发以及技术推广等领域的工作。他经常在各类技术会议上发表演讲进行分享,他还是多个技术社区的热心参与者。他擅长Web领域应用、移动应用以及机器学习等的开发,也从事过多个大型软件项目的设计、开发与项目管理。目前他专注与云计算以及互联网等技术领域,致力于帮助中国的 开发者构建基于云计算的新一代的互联网应用。