写点什么

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

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

关注

评论

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

京东商品列表API响应数据解析

tbapi

京东商品列表数据采集 京东商品列表接口 京东商品列表API 京东数据分析

快手 AutoThink 大模型 KAT-V1 正式开源,40B版本比肩满血版R1,技术报告全公开!

快手技术

开源 大模型

零碳园区:绿色发展新引擎,MyEMS 助力启航

开源能源管理系统

开源 能源管理系统 国能国标

CORE漏洞赏金计划:携手社区共筑安全防线

qife122

智能合约 区块链安全

Manus“跑路”风波背后,AI Agent的商业化困局

脑极体

AI

大数据-48 Redis 深入理解Redis通信机制:从RESP协议到Reactor事件驱动模型

武子康

Java redis 大数据 缓存 分布式

京东商品详情API响应数据解析

tbapi

京东商品详情接口 京东商品详情API 京东数据采集 京东数据分析

从批到流,Zoom 基于 DolphinScheduler 的流批统一调度系统演进

白鲸开源

开源 大数据任务调度 Zoom 视频会议 Apache DolphinScheduler

LazyLLM教程 | 第1讲:RAG原理解读:让检索增强生成不再是黑盒

商汤万象开发者

AI 教程 agent LLM

CST的UAV无人机RCS:双站, TLM求解器,各向异性Thin Panel,碳纤维复合材料CFRP,

思茂信息

无人机 CST Studio Suite TLM求解器 PEC

AI、大模型如何重塑海外舆情监测行业

沃观Wovision

人工智能、 海外舆情监控 AI 大模型 沃观Wovision 舆情监测系统

龙蜥邀您参加 2025 开放原子开源生态大会

OpenAnolis小助手

操作系统 龙蜥社区 开放原子开源生态大会

【HarmonyOS 5】鸿蒙App,Application,Ability以及页面和组件生命周期函数

GeorgeGcs

系统化解析超智融合算力中心的搭建路径 | 干货推荐

OpenAnolis小助手

操作系统 算力 龙蜥社区 龙蜥大讲堂 超智融合

从 0 到 1 学 AI 大模型接入(Go/Java 实战)

王中阳Go

AI

线上观看人次近 2 万,龙蜥社区走进中兴通讯 MeetUp 圆满结束

OpenAnolis小助手

开源 AI 操作系统 龙蜥社区 龙蜥meetup

图谱不是玄学:时序数据库 TDengine 一步接入 Ontop,让时序数据更聪明

TDengine

tdengine 时序数据库 时序数据库tdengine

FlagRelease上线:自动迁移发布大模型多芯高效版本,用户下载即用

智源研究院

开源 大模型

三角洲护航代练系统架构设计,基于WebSocket的实时护航通信系统实现

DUOKE七七

vue.js uniapp thinkphp6

中烟创新智能稽核平台:为烟草行业定制的数字化风控引擎

中烟创新

MyEMS开源能源管理系统核心代码解读017

开源能源管理系统

开源 代码解读 能源管理系统

软件工程3.0时代,为什么人工测试仍必不可少?

禅道项目管理

人工智能 AI 自动化测试

(在线CAD插件)WEB CAD二开形位公差标注

WEB CAD SDK

网页CAD 在线CAD

开源能源管理系统应用指南

开源能源管理系统

开源 生产 能源管理系统 国能国标

采购那些事儿,如何把握性价比采购逻辑?

积木链小链

数字化转型 智能制造 采购管理

RISC-V基金会Datacenter SIG月会圆满举办,探讨RAS、PMU性能分析实践和经验

OpenAnolis小助手

操作系统 risc-v 龙蜥社区 Datacenter SIG 龙蜥 RISC-V SIG

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