今年年初的时候,所谓“Oracle要对Java收费”的新闻,在网上传得沸沸扬扬。这个新闻被专业人士视为标题党,而国内众多技术论坛,比如知乎社区上,有很多大神对“Java收费”这个说法做出了非常专业的解读,Jerry这里就不班门弄斧了,Bing搜索引擎根据“Oracle Java收费”的关键字搜索,第一条搜索结果就值得阅读。
Jerry本文想扫盲的重点,是介绍JDK,Oracle JDK, Open JDK和SAP JDK这几个名词的关系。
JDK - Java Development Kit
Java编程语言的软件开发工具包,是Java开发的核心,包含了Java运行环境即JVM(Java Virtual Machine)和Java系统类库,以及大量工具。
Jerry以前在SAP德国总部和CRM开发团队一位拥有20年ABAP编程经验的德国老同事闲聊,谈到近些年来越来越多的SAP产品技术栈换成了Java,这位同事从没接触过Java,好奇地问我啥是JDK.
我当时给他的解释是(为了节省篇幅,Jerry这里就不放英文了),“想想你在SAPGUI里编写的ABAP代码,激活后运行在C/C++实现的ABAP运行时(runtime)也就是ABAP虚拟机里。”
“另外,Netweaver ABAP平台提供了很多基础设施层面的功能,比如用于HTTP通信的CL_HTTP_CLIENT和CL_HTTP_SERVER, ABAP里有很多这种类库,都存储在BASIS这个包和它的子包下面。所以ABAP Development Kit就是ABAP运行时和ABAP类库的组合,而JDK就是Java运行时和Java类库的组合,就这么简单。”
看到德国同事露出了理解后的笑容,Jerry心想,有一点我没告诉你,和ABAP这种Server Side的开发模式相比,用Java开发企业级应用免不了在本地搭各种开发环境,因此Java开发人员要有在本地搭环境时可能会遇到各种各样问题的心理准备。当初Jerry的朋友吴脊老师2015年加入SAP成都研究院时,Jerry作为他的导师,一起在本地搭一个Java开发环境,最后花了一周的时间才搭好。在那一周的时间里,下面这句话,Jerry说了起码不下十次:
在我电脑上是好的。
Oracle JDK
创建了Java编程语言的Sun公司,于2009年以74亿美元的白菜价被Oracle收购之后,越来越多的Java初学者将Oracle JDK等同为JDK. 这并不奇怪,毕竟Google JDK关键字,位于搜索结果前列的全是www.oracle.com开头的页面:
由于Oracle和SAP的关系(SAP从业者都懂的),在Oracle旗下的Java传出“要收费”的消息后, 一部分使用Java进行二次开发的SAP从业者们心里不免感到紧张,其实大可不必。
Jerry本科的时候,一心想干掉Java的微软曾经搞出一个叫做J++的编程语言,以及对应的Visual J++这个IDE. 不过当时Jerry就读的电子科大计算机学院的编程课全用的C/C++,我周围认识的同学们也没人捣鼓这个语言。这个J++虽然有着和Java相同的语法和关键字,但是只能运行在微软的操作系统上,后来据说山寨了Java的微软被Sun告了,赔了20亿美元,然后就没有然后了。
有意思的是,刚刚过去的十月末,微软发布了一封公开信:
原文如下:
这封信是发给Open JDK社区的,微软首先宣布自己正式加入Open JDK社区,动机之一是因为微软有越来越多的产品和服务需要依赖于Java, 比如Azure上的Java Runtime. 正如Jerry最近工作的一个项目用到的SAP Commerce Cloud on Azure,就是这种依赖的受益者。
接着微软在公开信中,低调地承认Oracle是Open JDK项目的大佬,自己的团队加入Open JDK社区后,会从小bug修复和功能backport入手,努力成为一名社区好公民。果然英雄所见略同,以前Jerry的开发团队每当加入一个新产品的开发大家庭之初,也是通过修bug和做downport来掌握开发知识和熟悉流程的。
信中最后一句话:We look forward to participating in the future of Java —— Java的未来,微软也期望参与其中。
所以,这个Open JDK到底是什么鬼?
Open JDK是Sun在2006年末把Java开源而形成的项目,而Oracle JDK是基于Open JDK的商业实现。Open JDK和Oracle JDK的关系,好比Open UI5和SAP UI5, Kyma和SAP Cloud Platform Extension Factory一样。
java -version的输出如果看到出现了HotSpot,说明是Oracle JDK:
而Jerry的阿里云上,输出则是Open JDK:
说了这么多,和SAP有啥关系?
大家可以访问这个公网链接.
SAPMachine,是一个SAP基于Open JDK打造的JDK,在前者的基础上,SAP针对企业级应用需要的可支持性(supportability)和可靠性(reliability)等方面做了增强。
SAPMachine既可以在上述github链接里下载,也可以在SAP官网下载:
像SAP这样基于Open JDK之上为自己的企业量身定做一个JDK出来的做法在业界非常普遍。
比如亚马逊的Corretto,源代码地址:
还有国内阿里巴巴的AJDK: Dragonwell
可以说阿里的解决方案之所以能经受诸如双十一这样对高并发高可用性要求极高的严酷场景下的考验,阿里自己的JDK功不可没。
下面一段话来自阿里云栖社区一篇帖子:
支撑双11每秒17.5万单事务 阿里巴巴对JVM都做了什么?
最早从2010年,阿里巴巴就开始了基于OpenJDK6的JVM定制优化工作,这也是国内第一个优化、定制且开源的服务器版Java虚拟机。2015年开始,阿里巴巴JVM团队开始着手在OpenJDK8进行优化和定制工作,力求在稳定性,性能优化,以及技术前瞻性方面,满足阿里巴巴,蚂蚁金服,以及菜鸟快速发展的业务需求。定制的版本被命名为AJDK(Alibaba JDK),目前淘宝、天猫,蚂蚁,菜鸟,几乎所有的核心应用都从Oracle JDK切换到了AJDK上,并经过了双11的考验。
希望通过本文的介绍,大家能够对几种不同的JDK有一个最基本的了解。对于本文题目引号中的伪命题,相信大家心中已经有答案了。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":