Google 决定终止开源 Android(2)
摘自爱范儿
AOSP,不存在了?
如下几点需要澄清:
1.
因为大部分 AOSP 代码通过 Apache 2.0 许可证发行,任何人都可以 fork 一份。其他代码服务平台上也有各种 AOSP 的镜像,例如 GitHub 和国内的 Android 社区。Google 无权要求其它「非官方」 AOSP 代码库下线。已经开源的,无法被撤销开源。
2.
也就是说,只要能从其他非官方渠道下载,人们仍然可以使用 Google 最后更新的 AOSP 代码,也可以按照自己的需要对其进行修改。原则上如果你有足够多厉害的开发者,也可以把之前的 AOSP 变成自己的系统,去维护和更新。
Android/AOSP 从来不是一个真正的开源项目,社区里的原教旨主义者也一直对其颇有微词。
前文提到,Android 目前运行于 Linux 内核上,后者是 GPL 许可证开源的。GPL 是一个强传染性的许可证,要求所有衍生工作都必须按照 GPL 许可证同样开源,从而贯彻无限开源、扩大社区的精神。
而当年 Google 为了构建 Android 商业生态,创建了平衡开源与商业需求的许可模型。Google 将 Android 平台分为几个部分:底层的 Linux 内核部分保留 GPL v2 许可证(按照要求),而 AOSP 的大部分代码则采用了更为宽松的 Apache 2.0 许可证。
这种许可结构使设备制造商能够修改和定制 Android 而不必开源所有修改,同时允许企业在 Android 平台上构建专有应用和服务。
Google 自己的专有服务 GMS (Google Mobile Services) 则与 AOSP 分开,并采用不同的许可条款。这种混合方法创建了一个既保持开放性又为生态系统提供商业灵活性的模型。
具体来说,Linux 内核基于 GPL 许可证,虽然 kernel module 需要依据 GPL 强制开源,然而 userspace 应用并不受 GPL 传染性的影响,因此无需开源。部分 userspace 应用程序也与传统的 Linux 发行版不同,例如使用 bionic libc 替代 glibc,使用 toybox 替代 busybox 等。此外,Google 还使用了「硬件抽象层」(HAL),允许厂商将不想公开的商业机密资料,比如一些特定的专有功能对应的背后代码和逻辑,存放在这一层上面,即提供了一套 stable ABI(应用二进制界面),使得厂商可以独立于 Android 框架层更新他们的专有代码。
当然 Linux 基金会对 Google 这种违背开源精神的操作方法很不爽,一度将 AOSP 从 Linux 开源项目中除名。
结果就是,AOSP 底层部分按照 GPL 开源的,大量中层按照 Apache 宽松开源(部分闭源),在此基础上的应用就可以自行按照开发者意愿和商业目的选择各自的开闭源属性了。
Google 自己也是这样做的。事实上,自从 2013 年的 Android 4.4 KitKat 之后,所有的 Android 版本都不再完全开源。Google 为 Android 系统开发的一部分驱动、UI,以及应用层的大量大量核心产品和服务,也就是人们熟知的 GMS 套件,都是闭源的。
AOSP 存在着,但它并不是完整的 Android。这也是为什么很多系统开发者都会强调「原生 Android」(指 Google Nexus/Pixel 的操作系统)不等于 AOSP。
尽管 AOSP 是个开源项目,Google 也不常合并第三方提交的合并请求(合并 AOSP 代码需要 Google 员工的批准,而不少 PR 就死在了 Gerrit Review 里)。这也是不少开发者认为 AOSP 和典型开源项目之间的最大区别。让参与者难以在 AOSP 里获得真正的参与感。
在 AOSP 项目的官网上,Google 写了这样一段「治理理念」:
Google 领导 AOSP,负责维护和进一步开发 Android。尽管 Android 由多个子项目组成,但 AOSP 是严格的项目管理。Google 将 Android 视为一个单一、整体的软件产品,而不是一个发行版、规范或可更换部件的集合,并对其进行管理。Google 的意图是让设备制造商将安卓移植到设备上;他们并不实施规范或策划发行版。
这段话已经把 Google 的意图描述的够清楚了。如果 AOSP 是一头干活的驴,那么卸磨杀驴的时候已到。