写点什么

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?

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

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

关注

评论

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

活动预告|ArchSummit全球架构师峰会

第四范式开发者社区

同事问我如何Java实现,搞定分析栈和队列数据结构的实现过程不就好了

Java 程序员 后端

听我讲完GET、POST原理,面试官给我倒了杯卡布奇诺

Java 程序员 后端

哭了,我居然回答不出来女同事的问题:索引为什么能提供查询性能---

Java 程序员 后端

博客之星:我去,你竟然还不会用 synchronized

Java 程序员 后端

企业数字化转型的起手式是什么?

百度大脑

人工智能 百度

同一份数据,Redis为什么要存两次

Java 程序员 后端

数据服务基础能力之元数据管理

数据分析 数据 元数据 数据管理 业务数据

原来书中说的JVM默认垃圾回收器是错的!

Java 程序员 后端

双非本科七面成功入职阿里面经分享!(附面试原题+复盘笔记)

Java 程序员 后端

如何避免企业在碳排放数据上造假?

石云升

学习笔记 碳中和 碳交易

网络安全漏洞复现与分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

厉害!腾讯T3-2都还在学的微服务+MySQL+Kafka+boot2

Java 程序员 后端

双非本科进不了大厂?阿里技术四面+交叉面+HR面,成功拿到offer

Java spring 程序员 mybatis

【高并发】SimpleDateFormat类到底为啥不是线程安全的?(附六种解决方案,建议收藏)

冰河

Java 并发编程 多线程 高并发 异步编程

Apache Pulsar 在 BIGO 的性能调优实战(下)

Apache Pulsar

分布式 中间件 BIGO Apache Pulsar 消息系统 Apache BookKeeper

【Redis源码分析专题】(1)从本质分析你写入Redis中的数据为什么不见了?

洛神灬殇

redis Redis 核心技术与实战 11月日更 缓存驱逐

同程内网流传的分布式凤凰缓存系统手册,竟遭GitHub强行开源下载

Java 程序员 后端

吐血总结——90%程序员面试都用得上的索引优化手册

Java 程序员 后端

工作10年,面试超过500人想进阿里的同学,总结出的108道面试题

Java MySQL redis spring JVM

又一巅峰神作!14年工作经验大佬出品“JVM&G1 GC深入学习手册”

Java 程序员 后端

吊打 ThreadLocal,谈谈FastThreadLocal为啥能这么快?

Java 程序员 后端

同一个Spring-AOP的坑,我一天踩了两次,深坑啊

Java 程序员 后端

南邮《网络技术与应用》4次作业

Java 程序员 后端

怎样选择最合适的Linux发行版?23个版本横向对比,总有适合你的?

奔着腾讯去

Linux

可以回答一下:Redis和mysql数据是怎么保持数据一致的嘛?(1)

Java 程序员 后端

史上最全Java面试266题:算法+缓存+TCP+JVM

Java 程序员 后端

哪有什么中年危机,不过是把定目标当成了有计划

Java 程序员 后端

双非本科毕业的我,为何能在金九银十期间斩获京东、字节、快手的offer

Java 程序员 后端

发量能决定一个程序员的水平吗

Java 程序员 后端

可以回答一下:Redis和mysql数据是怎么保持数据一致的嘛?

Java 程序员 后端

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