上世纪 90 年代,一杯来自爪哇岛的咖啡,漂洋过海到了 Sun 公司的会议室,会议室里的工程师正在为一门新的编程语言命名。此时,桌上冒着热气的咖啡给了他们灵感:如果程序员在用这门语言编程时,能像喝了咖啡一样充满活力该多好。要不,就叫它爪哇(Java)?
二十多年过去,Java 这杯咖啡不仅为程序员,还为整个计算机世界注入了无限活力与灵感。从 JVM 到 JDK 再到琳琅满目的第三方 Java 开发库,Java 的开源生态触角也越来越深。
而作为整个 Java 生态的基石,OpenJDK 自开源以来就受到了广泛关注,在 Java 社区中的受欢迎程度也在不断提高,国内外诸多企业都竞相基于 OpenJDK 自研下游发行版。
OpenJDK 是什么?OpenJDK 的开源版和商业版有何不同?开发者怎么挑选适合自己的版本?又如何参与到 OpenJDK 社区的建设中?Kona JDK 连续四年蝉联中国贡献第一的背后,有怎样的故事?
为了解答这些问题,本月的「WeOpen Talk」直播栏目,邀请了数位在 Java 开源生态和 OpenJDK 社区的资深专家,进行实时连线交流,带大家一起走进 Java 的开源世界,细细品尝这杯愈久弥香的咖啡。以下为直播精彩内容的整理。
代码语言:javascript复制本期对话嘉宾:
杨晓峰——腾讯专家工程师、OpenJDK Committer、腾源会导师 傅杰——腾讯高级工程师、中科院计算机技术研究生博士、OpenJDK Reviewer 范学雷——腾讯专家工程师、OpenJDK Reviewer、Java SE 安全组成员 臧琳——OpenJDK Committer
1
Java 开源的价值是什么?
Java 从诞生到今天,已经快 30 年了,对于一个编程语言来说已经步入中年。如果要用一句话来形容 Java 的开源生态,那就是「挑战与机遇并存」。
在企业软件和互联网中间件开发等方面,包括消息中间件、大数据和微服务等,主流大多是建立在 Java 基础之上,以 Spring 框架、Hadoop等为代表的技术栈,这也构成了 Java 生态的基本盘。在这些强项上,Java 并没有掉队。
回顾 2000 年左右,每年举办的 JavaOne 都是全球最大的技术峰会之一,JCP(Java Community Process)也在持续引领 Java 平台的潮流,推动技术标准化。但如今,除了 Java SE 还在稳步向前迭代,周边的 Java ME、Java EE 的发展基本处于相对停滞的状态,被 Spring 这样事实性的标准取代了,Java的生态越来越大,创新的核心两极化,一方面是内聚的 Java 语言和 JVM,而另一方面则是外围生态发展。
Java 受到的挑战更多来自于新技术浪潮兴起,在 AI 等领域,Python 在算法应用方面得天独厚, 在云计算方面,Java 仍然是最主要的应用开发语言,但 Golang 则在云基础设施领域广泛使用。Java 在新领域虽然有扎实存在感,但确实进入了一个相对稳定的平台期。从整体上看,Java 生态依旧非常繁荣。
在 Java 拥抱开源,推出 OpenJDK 后,Java SE 始终得到了坚定的发展,最近几年,每半年就会推出一个 Release,每个版本平均 10 个以上特性,解决了一些 Java 语言和 JVM 核心痛点。同时,根据对 GitHub 上新增的开源项目进行的统计,其中使用 Java 的项目数量依然保持在前三,且最近两年依然在上升,占总数的 10% 以上。
但很多社区里的人也会疑问:当下亚马逊、微软、红帽、IBM、腾讯、华为等一批国内外顶尖的科技企业都在竞逐自研 OpenJDK 商业版市场,那 OpenJDK 开源社区还有没有价值?
目前,OpenJDK 发行版数量众多,很多科技公司纷纷参与投入。其实,通过投入资金和人才的方式,已经证明了 OpenJDK 开源社区的价值。其中部分企业直接从JDK产品获得商业收入,免费提供 JDK 产品,提供商业订阅服务收费,这种模式也得到了资本的认可。
更多科技企业看中的是编程语言、编译器这些基础软件的影响力,这其中包括很多芯片厂商都在持续投入,Java、C 一直是头部芯片厂商投入的第一梯队编程语言。还有一个最重要的原因:编程语言和编译器可以影响甚至主导一个软件行业的发展。
在早期中间件的时代,像 IBM、Oracle 等大厂通过制定 Java EE 等规范,影响并占领中间件市场。到了移动互联网时代,Android 编程采用 Java ,让其免费获得了上千万工程师的检验,对 Android 的成功起到了非常关键的作用。
深入参与 OpenJDK 开源社区,能在吸引开发者和教育市场方面占据更大优势。引领编程语言和开发工具,也就间接掌握了技术趋势,这背后是数千亿美元的市场,甚至远比直接卖 JDK 产品更有价值。这也是每一个科技企业,从跟随者成为引领者的必经之路。
2
OpenJDK 发展的 3 个阶段
访谈中,杨晓峰把 OpenJDK 社区的发展比喻成三个阶段:上古时代、中古时代和动车时代。对应的时间点分别是 2006~2010 年、2010~2017 年,以及 2017 年到今天。
2006 年,OpenJDK 正式开源, 2010 年 Sun 公司被 Oracle 收购,使用 OpenJDK 的开发者都有一个担心,就是 Oracle 可能会减少对 Java 开源生态的投入,影响之后 OpenJDK 的发展。
上古时代是 OpenJDK 最百花齐放的「众神」年代,虽然从名字上看起来是「古早」的。当时,IBM 为了取代 OpenJDK ,主导了一个叫 Harmony 的开源项目,Apple 等大厂也几乎都有自身的 Java 项目,整个业界都在推进 Java 标准和主要路径的增长。
2010 年后,随着 IBM 抛弃了 Harmony,Apple 加入 OpenJDK 社区,大家都开始在 OpenJDK 主分支上工作。OpenJDK 进入了一个新的阶段——中古时代。
中古时代最值得纪念的就是 JDK 8,JDK 8 划时代地引入了 Lambda 表达式、函数式接口等特性,短短一年,业界就有 70% 的开发者升级到了 JDK 8,JDK 8 也成为了目前为止最成功的一个版本。
中古时代持续到 2017 年,这一年 Java 9 发布了。Java 9 通过模块化的方式,解决了 JDK 迭代速度慢的问题,但它也带来了一个很大的副作用,那就是兼容性的影响,导致大量底层系统停留在 Java 8。
在动车时代,OpenJDK 的发布从以特性为周期,变成了以时间为周期的模式。以往,Java 版本要增加一个重大功能或特性,预估需要 2 年,但实际做了 3 到 4 年。2017 年后,Java 每半年发布一个主要版本,两到三年发布一个长期支持版本。重要的特性不能在当前 Java 版本完成,就留到下一个版本再发布。开发者们也主要是在解决长期痛点,以及克服整个生态向新版本迁移的障碍。
在这近 20 年的社区变迁中,傅杰也是亲身经历者之一。
傅杰提到,在他从开始接触 OpenJDK 到今天, 10 多年的时间里,感受最深的一点就是:参与开源社区越早越好。
「开源社区就像一列动车,不管你之前的基础状态怎么样,它都会带着你飞速往前奔跑」。傅杰描述自己在参与开源之前的技术之路,就像在黑暗中,沿着一条崎岖的山路往上走,每一步都要摸索着缓慢前行。
加入 OpenJDK 开源社区后,每天早上起来,都能看到社区中各种讨论和分享,就像有人给我在攀登的路上打了光。「每当我遇到岔路时,也有人帮助我答疑解惑,这对我自身的成长有非常大的作用」。
3
OpenJDK 商业化的未来
OpenJDK 商业版的诞生在整个 Java 发展的历史上,是一个非常重要的转折点。
当时市面上有很多大厂都在免费使用 Oracle 发行的 JDK,数以万计的机器运行在 OpenJDK 程序上,一旦收费,这就是一笔非常大的开销。OpenJDK 商业版的出现,促使了像微软、亚马逊这样的大厂开始开发自己的发行版。
当更多厂商投入人力研发 OpenJDK ,开发出新的特性和独有的功能,再汇总起来回馈到社区,就带来了一些非常奇妙的变化。
回忆起 2016 年之前,范学雷感觉 OpenJDK 社区其实运营得非常艰难,「大部分参与讨论和贡献的都是 Oracle 公司的人,很少有其它公司的人活跃,90% 甚至是 99% 以上的贡献都是 Oracle 的员工」。
而一门编程语言想要获得长期的发展,一定要有一个繁荣、活跃的社区。
OpenJDK的开源和商业化,激活了 OpenJDK 的社区动力。今天再看 OpenJDK 社区,会看到很多来自世界各地,各个公司和各个技术领域的开发者,让社区不断保持活跃和健康。
Oracle 原本希望 OpenJDK 商业版能带来盈利,支撑研发团队,结果不仅达成了这个目标,还间接促进了 OpenJDK 开源社区的繁荣。
以腾讯为例,Kona JDK 就是基于 OpenJDK 打造的一个发行版。为此,腾讯专门成立了 JVM 的研发团队,并通过开源协同战略,让公司内部的开发者参与 Kona JDK 的研发和维护。
这样做的意义和价值是什么呢?臧琳在访谈中提到了 4 点他的见解:
1、大型科技公司都有基于 Java 的业务,拥抱 OpenJDK 社区,打造自己的 JDK 发行版,能为自己的 Java 业务提供技术保障。 2、平台型厂商想完善 Java 平台的解决方案,需要专门的 JDK 版本,提供稳定的服务和足够的保障能力,并根据具体业务满足额外需求。 3、在研发自家 JDK 版本的过程中,能提高技术团队的实力,解决实际场景中的问题,更好地服务客户,提高技术影响力。 4、云服务想要降低运营成本,提供更有竞争力的计算服务,使用商业版成本太高,使用开源版又会有稳定性和安全性的顾虑,使用自己的发行版也是一个商业决策。
同时,范学雷也提到,适当的冲突和竞争,有利于创新的诞生,和生态长期稳定的发展。没有风险和冲突的生态,才是一个危险的生态。
商业的本质是通过创新,提高自身的竞争力,让自己的护城河越来越宽。而编程语言的发展离不开一个繁荣的社区,这就要求所有 OpenJDK 的发行版,都需要有互操作性和兼容性,和主流的版本不能有太大的差异。
因为兼容性的限制,各个发行版不能天马行空的发展,而是把创新回馈到社区当中,最终让社区越来越繁荣。这样即保持了发行版的一致性,也实现了商业上的差异化,形成了长期稳定的正向循环。
一部分发行版厂商,可能会采取保守的行为,但有 GPL 这样的开源协议存在,从法律上限制了闭源的可能,要求他们必须把代码贡献回来。这些企业只能选择将自己的核心代码,延迟 6 个月或 10 个月后,再回馈给社区。
但即便如此,优秀的代码终究会回到 OpenJDK 社区。短期内的利益冲突和风险,只要通过合理的规范和设置,利用开源协议,就能得到很好的控制,最终让整个生态在竞争中向前发展。
很多时候最终用户社区会有「Kona JDK 和 OpenJDK 是不是兼容?能不能无缝替换?」类似的疑问。从基础能力上,各个 OpenJDK 发行版都差不多。而 JDK 发行版之间的区别,主要是在不同业务场景下的优化。以 Kona JDK 为例,腾讯业务非常多样,游戏、大数据以及云平台上的服务都是在使用 Kona JDK,相对来说,稳定性更高,也更能应对各种复杂场景。
OpenJDK 数量繁多的发行版,也确实给不少用户带来了的困扰。技术圈从来都不缺困扰,正是因为有了困扰,所以才会有相应的解决方案和优秀的产品脱颖而出。
用户在选择 JDK 版本时,要关注这个发行版是不是经过了各种生产环境的验证。如果对业务多样性有要求,对安全非常看重,对稳定性要求苛刻,或者对服务有诉求,那 Kona JDK 就是一个很好的选择。
Java 本身不仅仅是一种语言,还是一种运行平台和环境,就像 Linux 操作系统一样,会有各种程序运行在 JDK 上面。JDK 发行版的竞争终局,也会像Linux一样,哪一个发行版能做到最简单,用户使用起来最方便,后续的支持服务最周到,哪个发行版就会得到行业认可,并且最终引领技术发展趋势。
直播视频回放
WeOpen Talk 对话范学雷、臧琳
WeOpen Talk 对话杨晓峰、傅杰
推荐阅读
谢孟军:中国 Go 语言领军人创业第五年 当开源遇见 KPI,全球化 VS 本土化,开源的理想与现实该如何和解? 卫剑钒:《大教堂与集市》被过誉了吗? 刘天栋:开源是打破内卷的最好方式
「WeOpen Talk」是腾源会全新上线的「对话开源」内容专栏,每周为读者呈现一期与尖峰开源人物的精彩对话内容。在「WeOpen Talk」栏目中,我们将深刻诠释开源先锋者们的开源精神、开源理念及其眼中的开源世界,深度挖掘开源领军者们在实践、参与开源过程中的有效方法论和最佳经验。
腾源会是腾讯云成立的汇聚开源项目、开源爱好者、开源领导者的开放社区,致力于帮助开源项目健康成长、开源爱好者能交流协助、开源领导者能发挥领袖价值,让全球开源生态变得更加繁荣。
欢迎关注「腾源会」公众号,期待你的「在看」哦~