NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

OpenJDK 将对 Android 开发产生怎样的影响?

  • 2016-01-28
  • 本文字数:3205 字

    阅读完需:约 11 分钟

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 的说法:

那么,采用了 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 的看法,代码的改动将带来成本与风险的上升。”

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 说三道四了。

查看英文原文: What Impact Will OpenJDK Have on Android Development?

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2016-01-28 18:007532
用户头像

发布了 428 篇内容, 共 172.1 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

ARTS 第 51 周

马克图布

ARTS 打卡计划

【迁移】CQRS很难吗?(译文:底部有原文地址)

罗琦

领域驱动设计 DDD

《从0到1学习Flink》—— Flink Data transformation(转换)

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— Data Sink 介绍

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— Flink 配置文件详解

zhisheng

大数据 flink 流计算

【迁移】读完了GFS论文之后的感悟

罗琦

大数据 GFS 论文阅读

要弄清楚if/switch的本质区别,以及优化方式

张驰

Java

Review week1: Amazon的领导力法则

猫吃小怪兽

学习 高效工作 程序员 个人成长

【迁移】用Redlock构建Redis分布式锁【译】

罗琦

分布式锁

【迁移】撸论文系列之——Bigtable

罗琦

论文阅读 bigtable

你没必要活的那么累

小天同学

深度思考 个人成长 生活 成长 感悟

《从0到1学习Flink》—— Data Source 介绍

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— 如何自定义 Data Source ?

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— 如何自定义 Data Sink ?

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— Flink 写入数据到 Kafka

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ

zhisheng

大数据 flink 流计算

极客时间的三种身份:碎片整合的大师、成长焦虑的救星、工作技能的提升站

大橘栗

《从0到1学习Flink》—— Flink 写入数据到 ElasticSearch

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— Flink JobManager 高可用性配置

zhisheng

大数据 flink 流计算

码农理财(二)

北漂码农有话说

图文并茂讲述如何正确的使用缓存

小趴菜~

缓存 后端 缓存穿透 缓存击穿 缓存雪崩

python 实现·十大排序算法之选择排序(Selection Sort)

南风以南

Python 排序算法

《从0到1学习Flink》—— Apache Flink 介绍

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— 介绍Flink中的Stream Windows

zhisheng

大数据 flink 流计算

《从0到1学习Flink》—— Flink 中几种 Time 详解

zhisheng

大数据 flink 流计算

写给产品经理的信(1):产品经理的经济基础逻辑思维能力

punkboy

产品经理 产品设计 职业规划 逻辑思维 工作

【迁移】Flink vs Spark

罗琦

大数据 flink spark

勇攀监控高峰-EMonitor之根因分析

乒乓狂魔

监控 全链路监控 故障定位 根因分析 AIOPS

《从0到1学习Flink》—— Flink 项目如何运行?

zhisheng

大数据 flink 流计算

OpenJDK将对Android开发产生怎样的影响?_Java_Abel Avram_InfoQ精选文章