写点什么

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:008240
用户头像

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

关注

评论

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

SOA/ESB架构升级之路:从微服务到ServiceMesh,再到Sermant

IT科技苏辞

大咖力荐 |《中国企业软件研发管理白皮书》为什么值得看?

万事ONES

涅槃重生!字节大牛力荐大型分布式手册,凤凰架构让你浴火成神

Java你猿哥

架构 分布式架构 凤凰架构

解决流水线瓶颈、提升编码效率的五个方法(上篇)

龙智—DevSecOps解决方案

ci cicd 持续集成 流水线

关于自托管环境,您了解多少?

龙智—DevSecOps解决方案

Atlassian Data Center

爆肝一月!527页文档详解SpringCloud微服务和分布式系统实践

Java你猿哥

数据库 分布式 SSM框架 微服务设计

分布式政企应用如何快速实现云原生的微服务架构改造

IT科技苏辞

优秀的pdf编辑器:Acrobat Pro DC 中文直装版

真大的脸盆

Mac PDF Mac 软件 PDF格式转换

Postman Runner 使用指南

Liam

Java 后端 Postman 接口测试 API 开发

【经验分享】硬件工程师需要知道的DFM可制造性设计

华秋PCB

工具 电路 PCB PCB设计 可制造性

Linux 修改系统时间的两种方式

会踢球的程序源

Java Linux

OneCode 开源集成开发工具ESD功能介绍

codebee

开源 低代码平台

解析单存储库:定义、优势与挑战

龙智—DevSecOps解决方案

谷歌 Monorepo Monolith 单储存库

研究思考丨关于软件复杂度的困局

阿里巴巴云原生

阿里云 云原生 复杂度

阿里高工纯手写的《分布式架构手册》仅仅一天GitHub就标星128K

Java你猿哥

架构 分布式 分布式架构

PostgreSQL技术内幕(七)索引扫描

酷克数据HashData

数据库 postgresql

打造安全无忧软件应用的十大最佳实践

龙智—DevSecOps解决方案

软件开发 软件开发安全

华为云智能编程助手赋能高校,揭示行业发展新动向

爱尚科技

【Linux】系统中安装Go环境

A-刘晨阳

Go Linux 三周年连更

实战分享丨 MySQL 与 Django 版本匹配相关经验

Java你猿哥

Java MySQL SSM框架 实战 Diango

分布式文件系统FastDFS

会踢球的程序源

Java fastdfs 分布系统

运维审计录像的作用是什么?用什么软件好?

行云管家

堡垒机 运维审计 审计录像

600+ 道 Java面试题及答案整理(建议收藏)

会踢球的程序源

Java 面试 java面试 应届生 Java八股文

Databend v1.1 版本发布!

Databend

互联网工程师Java面试八股文及答案整理(2023最新版)

Java你猿哥

Spring Cloud springboot java面试 面经 JVM面试

某程序员哀叹:写几年代码,回头一看80%都没用,没法写上简历!

Java你猿哥

Java 程序员 面试 简历

技术分享 | 如何迅速将分布式政企应用转型为云原生微服务架构

IT科技苏辞

ElasticSearch 高级检索,按照顺序进行搜索

alexgaoyh

elasticsearch dsl 顺序搜索 高级检索 与或关系

ReentrantLock和Synchronized使用与区别,多线程安全问题

共饮一杯无

synchronized ReentrantLock 三周年连更

云服务是什么意思?有什么用?

行云管家

云计算 云服务

缓存一致性设计思路

我爱娃哈哈😍

redis 缓存 缓存一致性

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