OpenJDK将对Android开发产生怎样的影响?
转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0228/182.html?1456926201
Google已决定将从下一版本的Android开始采用OpenJDK,本文将部分摘录互联网上对于这一决定的反响。
在去年年底,我们曾提到Google已经决定在Android中使用OpenJDK,以取代基于Harmony实现的Java库(详情请见此处)。尽管这条消息在宣布时恰逢圣诞期间,但Google的这一决定还是在互联网上引起了很大的反响,我们将在本文中对于这些观点进行一次总结。
从这个Git工单可以看出,早在2015年二月,Google就已经在代码中露出了切换至OpenJDK的计划。在去年十二月,这次代码提交中所包含的一个重要的授权信息的变化被媒体曝光了。Android N中所使用的新Java库将不再基于Apache License 2.0(APL)授权协议,而是基于GNU GPL 2协议,并且在版权信息中包含了以下声明:“Oracle及其附属机构版权所有,1997,2011”。
Mozilla的前任CTO Andreas Gal为此专门写了一篇标题有些骇人的博客“Oracle将它的魔爪伸向了Android”。他表示,Google长期以来一直坚持使用Harmony的Java库及Apache授权,其原因在于:
用户能够任意使用及修改APL代码,而无需发布这些改动。换句话说,你能够进行具有专利权的改动与改进。而这一点对于基于LGPL授权协议的GNU libc来说是不可能的。我可以确信地说,我知道为什么Google认为这一点很重要,因为在发布Firefox OS的过程中,我曾经和许多与Google有合作关系的芯片供应商以及OEM厂家进行过交流。芯片与OEM厂商都希望在软件层面上表现出他们的优势,尝试对Android的代码进行全方位的改进。尤其是芯片厂商经常会改动类库中代码,以充分利用自家的专利芯片,而且他们不愿意公开分享这些改动。通过这种方式能够体现出他们的竞争优势,即在专利上的优势。
Bob Ross回复了Gal的文章,他自称是某家OEM厂商的员工,对于APL与GPL的争论提出了一些见解:
我们确实会对libcore进行一些改动,在这种场合,主要问题是进行开源会带来很大的工作量,倒不是说要保护这些代码。至少从我曾经参与过的改动来看,情况就是如此。
Bradley M. Kuhn目前担任自由软件管理机构(Software Freedom Conservancy)的,同时也是自由软件基金会(Free Software Foundation)的董事会成员。他对于GPL可能对Andoid开发所造成的影响有着不同的见解。在最近的一篇博客文章“Sun、Oracle、Android、Google以及JDK复制权(copyleft)的质疑”中,Kuhn注意到OpenJDK授权其实属于一个“非常宽松”的协议,即包含Classpath例外的GNU协议。Kuhn曾经参与了Classpath例外协议的设计与命名,这一协议旨在避免通过复制权保护的方式“感染”整个Java生态系统,否则所有的Java程序都将被迫选择可以免费使用及重新分发的方式。如此一来,从授权协议的角度来看,选择使用OpenJDK与使用Harmony也没有多大的区别了。按照Kuhn的说法:#p#分页标题#e#
那么,采用了Oracle的GPL及Classpath例外协议的JDK与具备Apache授权的Java userspace又有多大的差别呢?它们的差别其实并不大!Android的重新分发者已经在kernel space方面承担了很大的复制权责任,并且请你记住,Webkit是基于LGPL授权协议的,所以说围绕着Android已经存在着一些比较宽松的复制权遵循责任了。如此一来,如果说某个重新分发者已经满足了以上协议,那么要遵循那些新加入JDK代码中的需求也不是什么麻烦事,因为这些需求只有更为宽松。
但在Gal看来,Oracle对于Android的未来发展将产生重大的影响,这不仅仅是因为授权的原因,同时也受到Java的发展路线、商标、条约与专利的影响:
除了源代码之外,Oracle还有别的方法可以控制Java的发展,因此OpenJDK所谓的自由性就好像一所监狱。你可以投票决定外墙有多高,甚至可以去参与砌墙工作,但一旦你进入这里,就只有Oracle能够决定你何时才能出去。Oracle对于OpenJDK的路线图有很大的决定权,通过对于兼容性需求、商标、现有协议以及API版权控诉(Oracle与Google之间的控诉)的掌握,Oracle几乎全盘控制了OpenJDK的发展方向。
部分读者在Gal的博客中留言表示,如果Oracle不能胜任OpenJDK的发展,那么Google完全可以创建一个分支,并自行决定它的发展方向。
Gal同时预测,对于Android来说,接下来的一年注定是艰难的一年:
由于代码与技术的混杂,这将在战术层面上牵连Android的开发。不夸张的说,所改动的代码将达到几百万行,并且从实现方面来看,新的OpenJDK与Google原本采用的Harmony代码在正确性或性能表现上有许多微妙的差别。如你所见,Google在日期数据的处理上更正了一个针对特定边界条件的测试用例。这是由于Harmony与Oracle的OpenJDK的表现有所差别,因此必须对测试进行更正。
而Android应用的整个生态系统就建立在这些正面临着变化基础上。Android的应用商店中有几百万个应用都依赖于Java的标准类,正如上文所述,不仅必须对测试进行更正,并且由于OpenJDK的转换所产生的微妙差别,这些应用都有可能随机地发生错误……
由于这次的巨变,我感觉Android N已经很难按期发布了。Google的做法无异于在飞行途中更换引擎,此时优先级最高的任务是保证不会坠机,至于是否能够按时抵达目的地,Google已经没时间去担心这个了。
Brendan Eich在一条推文中表示支持Gal的意见:“虽然我们的所知有限,但我同意@andreasgal的看法,代码的改动将带来成本与风险的上升。”#p#分页标题#e#
Codename One的联合创始人之一的Shai Almog也同意Google和Android的开发者将不得不面对一些额外的工作,但并没有Gal与Eich所认为的那么严重,并且使用OpenJDK还能够多多少少让他们受益。
虽然有些改动能够让用户直接受益,但对于大多数软件开发过程来说,改动无法带来直接的受益。并且也不是所有开发者都能够完全利用每一个语言与API的特性。
由于基础代码库得到了统一,用户将从中受益,并且安全审核流程也可以专注于这个具有更高统一性的基础代码库了。其结果是许多标准Java工具在Android上或许能够表现得更出色……
没错,Google需要付出一定精力以完成这一过程,也确实会有一些应用可能会受到影响。但我敢说,这次改动比起Marshmallow(即Android 6.0)的改动所带来的影响会小的多,并且Google本身有一些工具能够让许多问题得以缓解(例如SDK版本提示)。
有些人怀疑Google决定采用OpenJDK是否和他们与Oracle之间的控诉纠纷有关。而Kuhn则相信Google这次决定的背后是出于技术方面的原因:
一位Java业界分析师(他在这一行已经有十年以上的经验了)告诉我,他相信这一决定的主要动力是技术方面的原因。在Android平台上开发userspace应用的作者们都在寻找新的Java语言实现,考虑到市面上已经存在了这个合理的、具有授权的免费软件,因此Google就有理由选择在技术上转换至这个更有优势的代码库,毕竟它为API的使用者在技术层面上提供了他们想要的东西,同时也降低了维护的难度。这样看来,这个决定是非常合理的。这种说法或许没有权威人士的观点那样令人震撼,但技术方面的原因的确很可能是这个决定的主要推动力。
Android从新版本操作系统开始将采用OpenJDK,这一举措会带来怎样的影响,目前来说还难以进行全面的透彻分析,这很大程度上取决于Oracle与Google之间争论不休的版权控诉将走向何方。目前为止,还没有人能够清楚地说明一个API接口是否能够拥有版权信息,法律与法院必须明确地解答这一点。自从上一个现有版本的库开始,Android中的部分代码,包括Java与C在内就开始了重新构建工作,某些无用的代码被删除,但依然保留了接口或头文件。那么是不是说Android从此就可以摆脱那些麻烦了呢?这还有待时间观察。不过采用OpenJDK之后应该能够起到一些缓解作用,因为Google如今已经满足了Java授权和专利许可,Oracle也不能再对Android说三道四了。
分享到:
相关推荐
OpenJDK在Android开发中的使用,源于Google在Android 7.0(Nougat)时开始的决定,即从Oracle JDK转向OpenJDK,以降低版权风险并促进社区的开放创新。 在Android 8.1的编译环境中,开发者通常需要安装特定版本的...
OpenJDK 1.6是Java Development Kit的一个开源实现,它是Java编程语言和Java平台标准版(Java SE)的一部分。OpenJDK项目的目标是提供一个免费、开源的Java实现,鼓励社区参与和透明度,使得开发者可以查看并修改源...
基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-...
在本文中,我们将聚焦于OpenJDK的特定版本——1.7.0_121,这个版本在编译Android 6源码时扮演了关键角色,并且在Ubuntu 18.04系统中具有特殊意义。 Ubuntu 18.04,作为长期支持(LTS)版本,通常会提供最新的软件包...
基于java的开发源码-OpenJDK Java开发环境 v16.36.zip 基于java的开发源码-OpenJDK Java开发环境 v16.36.zip 基于java的开发源码-OpenJDK Java开发环境 v16.36.zip 基于java的开发源码-OpenJDK Java开发环境 v16.36....
OpenJDK是Java的开发工具包,Java有着26年的历史。从任何标准来看,它都不是一种新的语言,尤其是在行业中,每隔几年就会出现新的解决方案,而且通常比以前的解决方案更好。而最流行的Java实例OpenJDK已经有14年的...
虽然现在Android开发已转向使用更高版本的JDK,但openJDK-7在当时的重要性不可忽视,它确保了开发者能够在开源环境中高效地构建和测试Android应用。对于那些需要对历史版本进行维护或者研究的开发者来说,了解和掌握...
JDK(Java Development Kit)是Android开发的基础环境,Ubuntu系统中默认安装了OpenJDK,但是Android开发需要使用Oracle的JDK。首先,需要到Oracle的官网上下载Linux版本的JDK,然后安装到指定目录下。安装完成后,...
OpenJDK 8是Java开发工具包(Java Development Kit)的一个开源实现,它为开发者提供了构建、测试和运行Java应用程序所需的工具和Java虚拟机(JVM)。Ubuntu是一个流行的Linux操作系统,广泛用于服务器和桌面环境。...
OpenJDK8 with JavaFX 是一个开放源代码的Java开发工具包,它包含了Java标准版(Java SE)的实现,以及JavaFX库。OpenJDK是Oracle JDK的开源替代品,由OpenJDK社区维护和开发,而JavaFX是构建桌面、移动和Web应用...
OpenJDK-7是Java开发工具包(Java Development Kit)的一个开源实现,主要由Oracle公司维护,用于开发和运行Java应用程序。Ubuntu是一个基于Debian的Linux操作系统,它为开发者提供了丰富的开发环境。在Ubuntu系统中...
OpenJDK 17.0.1 是一个开源的Java Development Kit(JDK)版本,由OpenJDK项目开发并维护。它遵循GNU General Public License(GPL)版本2,为开发者提供了一个免费的、高性能的Java运行环境和开发工具集。OpenJDK是...
《OpenJDK 1.8.0_181:深入理解开源Java开发工具包》 OpenJDK,全称为Open Java Development Kit,是Java开发工具包的一个开源实现,它为开发者提供了构建、运行Java应用程序所需的全部工具。本文将重点讨论OpenJDK...
OpenJDK 6是Java开发工具包的一个开源实现,它为开发者提供了运行和构建Java应用程序所需的环境。在Linux操作系统上,OpenJDK 6扮演着与Oracle JDK相似的角色,但它是免费的,并且遵循GNU General Public License...
同时,OpenJDK的源代码对理解Java虚拟机的工作原理、JVM优化和Java平台的内部机制极具价值。 对于建站模板开发者,OpenJDK可以提供稳定的运行环境,支持网站后台服务的编写和部署,确保网站的高效运行和数据安全。...
openjdk11 full javafx
这个版本的发布标志着OpenJDK社区对于Java开发和运行环境的持续优化,尤其是对64位ARM(aarch64)平台的支持。OpenJDK是一个开源实现的Java SE(Standard Edition)平台,它由Oracle公司发起,但现在由一个广泛的...
Java 1.8.0 开源版 OpenJDK 是一个广泛使用的开源 Java 开发工具包,它是 Oracle JDK 的一个自由且开源的实现。OpenJDK 由 OpenJDK 社区开发并维护,旨在提供一个符合 Java SE 标准的开放源代码实现,允许开发者在...
中标麒麟是由中国中标软件有限公司开发的一款基于Linux的桌面和服务器操作系统,广泛应用于政府和企业领域,特别是对国产化软件有需求的地方。这个描述意味着此压缩包是为了在中标麒麟操作系统上离线安装OpenJDK 1.8...