"Oracle要对Java收费了,SAP基于Java技术栈的那些产品的客户怎么办"
今年年初的时候,所谓“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的原创文章,请关注公众号"汪子熙":

"Oracle要对Java收费了,SAP基于Java技术栈的那些产品的客户怎么办"的更多相关文章
- PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品,产品设计严格遵循国际数据挖掘标准CRISP-DM(跨行业数据挖掘过程标准),具备完备的数据准备、模型构建、模型评估、模型管理、海量数据处理和高纬数据可视化分析能力。
http://www.meritdata.com.cn/article/90 PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品, ...
- 从开发一款基于Vue技术栈的全栈热重载生产环境脚手架,我学到了什么
浏览文章前 这一期,我分享给大家三点看源码的小技巧,这也是从别的大佬那总结的. 被反复使用的代码 这样的代码是一个软件的重点函数,一个大神的写法有很多精华值得学习. 穿越时间的代码 如果一段代码10年 ...
- Java架构师需要掌握的技术栈
- Java NIO 机制分析(一) Java IO的演进
一.引言 Java1.4之前的早期版本,Java对I/O的支持并不完善,开发人员再开发高性能I/O程序的时候,会面临一些巨大的挑战和困难,主要有以下一些问题: (1)没有数据缓冲区,I/O性能存在问题 ...
- MySQL,Oracle,PostgreSQL,mongoDB,Hive, SAP HANA 数据库web维护客户端管理工具
TreeDMS数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL,mongoDB ,Hive, SA ...
- 基于java平台的常用资源整理
这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...
- 这里整理了基于java平台的常用资源
这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...
- SAP和Java系统的Webservice实例
简介: 关于Webservice的概念和原理,简单来讲,Webservice是一种基于SOAP传输协议,用WSDL描述,用XML封装数据的接口技术.由于其跨平台.跨防火墙.开发成本低.开发周期短等优势 ...
- .net项目架构改造之搭建基于java环境配置一览【上】
最近公司做了一个项目,需要嵌套在千牛的客户端上,项目代码必须上阿里的聚石塔,全程采用基于docker的自动化部署,我们的项目是基于.net架构.很遗憾 的是基于windows的docker上部署在访问 ...
随机推荐
- 滚动事件优化 passive
1.addEventListener参数 target.addEventListener(type, listener[, options]); target.addEventListener(typ ...
- C语言函数sscanf()的用法-从字符串中读取与指定格式相符的数据(转)
C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( string str, string fmt, mixed var ...
- 013 Enhancer创建动态代理
在上一章使用了Enhancer,没有仔细说明代理的问题,在这一章进行详细的说明. 原本想使用cf包的,后来发现使用framework包下的包也没有问题,程序中就一直使用framework中的类. 一: ...
- Java架构师之路(参考这个学习吧)
- SqlServer Stuff
SqlServer Stuff DECLARE @TAB TABLE ( UserID INT, UserName ) ) INSERT INTO @TAB ( UserID, UserName ) ...
- Xcode UI界面调试神器-injectionIII
App Store搜索injectionIII下载即可,免费的哟. 打开injectionIII,运行即可. - (BOOL)application:(UIApplication *)applicat ...
- Excel统计发票和金税盘核对新版
之前的博文:如何使用Excel表格状态栏动态查看统计,介绍了如何利用excel一拉就可以进行统计,和金税盘的月度统计统计.由于最近年月日显示成方框,所以作废了发票和对冲了上月的一张发票,导致这个月出现 ...
- [LeetCode] 337. House Robber III 打家劫舍 III
The thief has found himself a new place for his thievery again. There is only one entrance to this a ...
- Oracle-关于Oracle.ManagedDataAccess
今天调用webservice的时候,运行程序后开始报错以下的错误信息 “/”应用程序中的服务器错误. 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的 ...
- FPGA程序编译后逻辑单元数为0
问题 FPGA代码写完后编译不报错,但是显示使用的逻辑单元数(Total logic elements)为0.当然程序也不工作. 我用的是Intel Altera FPGA,verilog语言,在Qu ...