随笔0116/速记——安卓的开源策略

内容速记:

AOSP 的上层开源许可证是 Apache 2.0 宽松开源许可证,大多数安卓软件都使用 Apache 2.0 许可授权开发者使用。另外,除了上层使用的 Apache 宽松开源许可协议外,下层还有 BSD 宽松开源许可协议,以及 Linux 内核的 GPL2.0 强传染性开源许可协议。根据 Apache、BSD 等宽松开源许可证,开发者可以在符合相关开源许可证的要求下,对 AOSP 开源项目中的源代码通过复制、修改、发行的方式进行使用。

但是其 Linux 内核的 GPL 强传染性开源许可协议,是安卓在构建自身开源生态时的拦路虎。GPL 协议大家都非常清楚,就是要求所有的后续开发以及衍生开发的源代码,全部必须要遵照 GPL 协议进行代码开源。如果遵照 GPL 强传染开源许可协议,则所有的驱动也不得不开源出来。谷歌显然无法让所有参与生态的人(比如芯片与器件供应商)都必须去开源。从谷歌的开源生态建设考虑来看,谷歌显然不会让这样的情况出现。为了开源生态构建,谷歌做了一系列巧妙的开源协议的选择和适配,并巧妙的在使用 Linux 内核的情况下又完美的绕开了 GPL 强传染开源许可协议,两头得利。

■ AOSP 的层级构成图--基于原始图片(来源于 https://source.android.com )绘制

Linux Kernel 虽然基于 GPL 2.0 开源许可证发布,但也在设计之初就设置了 GPL 许可证例外,例如在内核目录文件 LICENSES/exceptions/linux-syscall-note 中包含 Linux 内核的 COPYING 文件中记录的 Linux 系统调用例外,该文件用于用户空间 API(UAPI)头文件中。使用 Linux 内核的头文件定义,进行系统调用的程序适用该 GPL 许可证例外。

Linux Kernel 中 GPL 与非 GPL 的分界线为 GNU glibc, 其普通的系统调用为 GNU glibc 向外暴露的系统调用接口。而安卓则将 Linux 常用的 GNU glibc 替换为 Bionic libc 类库(改用宽松许可证 BSD),并通过该 Bionic libc 类库暴露了更多原来在内核空间才能使用的接口,让用户空间的驱动能够充分利用内核和硬件资源。

AOSP 在用户空间和内核空间之间设置本质为用户空间主驱动的硬件抽象层(HAL),规避 GPL 的硬件厂家把需要保护的商业机密以及知识产权相关的逻辑放在 HAL 层,以二进制包的方式发布,不需要公开源代码。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介 使用开源代码可以帮助提高软件开发效率并节省成本,但是如果不当使用开源代码,也可能给个人及公司会带来知识产权方...
    Lucas66阅读 10,903评论 0 1
  • 平时我们在日常开发生活都在大量和开源软件打着交道,例如安卓、Linux、Github、Docker等,而其中开源协...
    艾小仙人阅读 3,816评论 0 2
  • 没有开源软件,现在的互联网根本无法存在,开源的历史可以追溯到ARPANET建立。开源在今天已经不再是一个时髦的词了...
    abel_cao阅读 5,449评论 0 1
  • 许可 什么是许可,当你为你的产品签发许可,你是在出让自己的权利,不过,你仍然拥有版权和专利(如果申请了的话),许可...
    gbmaotai阅读 4,816评论 0 0
  • 1、描述计算机的组成及其功能。 计算机由运算器,控制器,存储器,输入设备和输出设备这5个主要部件组成。最初计算机中...
    haoxi2018阅读 4,687评论 0 0