linux和Android的关系

这几天被「谷歌中止华为更新安卓」的新闻刷屏了,脑海里第一个疑问是安卓不是开源的吗,怎么受谷歌的控制了,恰巧这几天也在学 Linux 内核相关,就理了理他们的关系,分享一下。

linux 发展的时间线。

  • 1965 年前后: 由贝尔实验室 ( Bell )、麻省理工学院 ( MIT ) 及奇异公司 ( GE, 或称为通用电器 ) 共同发起了Multics 的计划, Multics 计划的目的是想要让大型主机可以达成提供 300 个以上的终端机联机使用的目标。 不过,到了 1969 年前后,计划进度落后,资金也短缺,所以该计划虽然继续在研究,但贝尔实验室还是退出了该计划的研究工作。

  • 1969 年: 贝尔实验室的 Ken Thompson 因为自己的需要他以汇编语言写出了一组核心程序,同时包括一些核心工具程序, 以及一个小小的文件系统。这个系统就是 Unix 的原型, 当时 Thompson 将 Multics 庞大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为:Unics。

  • 1973 年:Thompson 与 Dennis Ritchie 合作想将 Unics 改以高阶程序语言来撰写,后来 Ritchie 将 B 语言重新改写成 C 语言,再以 C 语言重新改写与编译 Unics 的核心, 最后发行出 Unix 的正式版本。

  • 1977 年:柏克莱大学的 Bill Joy 在取得了 Unix 的核心原始码后,着手修改成适合自己机器的版本, 并且同时增加了很多工具软件与编译程序,最终将它命名为 Berkeley Software Distribution (BSD)。

  • 1979 年:AT&T 推出 System V 第七版 Unix ,这一版最重要的特色是可以支持 x86 架构的个人计算机系统。贝尔实验室属于 AT&T,但是 AT&T 之前对于 Unix 一直是采取较开放的态度。但此时,因为 AT&T 由于商业的考虑,以及在当时现实环境下的思考,将 Unix 的版权收了回去,也引爆了很多的商业纠纷。

  • 1984 年:Andrew Tanenbaum 教授自己动手写了 Minix 这个Unix Like 的核心程序, 在撰写的过程中,为了避免版权纠纷,完全不看 Unix 核心原始码,1984 年开始撰写核心程序, 到了 1986 年终于完成,并于次年出版Minix相关书籍。

  • 1984 年:Richard Mathew Stallman 在 1984 年发起的 GNU 计划,目前我们所使用的很多自由软件,几乎均直接或间接受益于 GNU 这个计划,bash,gcc 均在此诞生。

  • 1988 年:有鉴于图形用户接口 ( Graphical User Interface, GUI ) 的需求日益加重,在 1984 年由 MIT 与其他第三方首次发表了 X Window System ,并且在1988 年成立了非营利性质的 XFree86 这个组织。

  • 1991 年:芬兰的赫尔辛基大学的 Linus Torvalds 在 BBS 上面贴了一则消息, 宣称他以 bash, gcc 等工具写了一个小小的核心程序,这个核心程序可以在 Intel 的 386 机器上面运作, 让很多人很感兴趣,从此开始了Linux 不平凡的路程。

  • 1994 年,经过地球的各个角落的黑客们群策群力的共同努力,这群素未谋面的虚拟团队们,在 1994 年终于完成的 Linux 的核心正式版,version 1.0。 这一版同时还加入了 X Window System 的支持。Linux 依据这个POSIX (可携式操作系统接口)的标准规范,Unix 上面的软件也是遵循这个规范来设计的, 如此一来,Linux 很容易就与 Unix 兼容共享互有的软件了。

以上主要参考 鸟哥的 linux 私房菜 ,大家感兴趣可以去看一下,很精彩。

由 Torvalds 负责开发的 Linux 仅具有 Kernel(核心)与 Kernel 提供的工具, 一般使用者使用肯定会有些困难。

为了让使用者能够接触到 Linux,于是很多的商业公司或非营利团体, 就将 Linux Kernel ( 含 tools ) 与可运行的软件整合起来,加上自己具有创意的工具程序,我们称之为 Linux distribution,著名的有 Red Hat, SuSE, Ubuntu, Fedora, Debian 等等。

开源许可证

上边介绍到了 1984 年的 GNU 计划,到了 1985 年,Stallman 为了避免 GNU 所开发的自由软件被其他人所利用而成为专利软件, 所以他与律师草拟了有名的通用公共许可证 ( General Public License, GPL ),一个软件挂上 GPL 版权宣告之后,使用者可以自由的执行、复制、再发行、学习、修改与强化自由软件。但不能将一个 GPL 授权的自由软件,在你修改后而将他取消 GPL 授权,也不能单纯的贩卖自由软件。

目前很多 Linux 开发商贩卖 Linux 这个 GPL 授权的软件, 只是贩卖售后服务,提供数年不等的咨询、售后服务、软件升级与其他协力工作等等的附加价值。

除了 GPL 这个许可证,常见的还有一些其他的,参考阮一峰老师总结的图。

还有一张更大白话的图,来源

Android

上边我们看到了 Android 是 Apache License 2.0 许可证,这是怎么回事呢?

Linux kernel 的版权是 GPL。 这下问题来了:如果你是硬件厂商,希望你的硬件能在 Linux kernel 下运作,那么就必须要有驱动程序。如果驱动程序的程序代码公开,等于硬件规格也公开的差不多了。许多厂商不愿意这么做,所以就提供编好的驱动程序,但不提供原始码。 Android 的重点就是商业应用,Google 采用了一些手法来绕过这问题。他们把驱动程序移到 “userspace”,也就是说,把驱动程序变成在 Linux kernel 上层跑,而不是一起跑的东西,这样就可以避过 GPL。然后,在 kernel 这边开个小门,让本来不能直接控制到硬件的 “userspace” 程序也可以碰得到,这样只要把”开个小门”的程序代码公布就行啦。

在知乎找了些关于安卓的开源部分,如下

Android代码包括三部分:

  1. Android 开源系统(Android Open Source Project,简称 AOSP ) 提供了 Android 系统的框架,包括修改后的 Android 专用 Linux 内核,Dalvik 虚拟机和 Android 应用层框架等。AOSP的大部分源码采用 Apache 2.0 授权模式发布,另外 Android 专用 Linux 内核部分采用 GPL 授权。

    Apache 2.0 授权规定,可以任意使用源码,不需要开源。GPL授权规定,对源码的任何修改都必须开源。

  2. Google 移动服务(Google Mobile Service,简称GMS)GMS 是由 Google 提供的一系列提高用户移动体验的应用和服务,包括各种服务和内购功能,还有一些 Google 的应用:Play 市场,GMail,Chrome,Google 地图,Google+ 等。GMS 提供了很好的特性,但是 GMS 是闭源的。为了获取 GMS 的使用,必须通过 Google 的授权。这部分源代码是不可见的。

  3. 基于 AOSP 的源码开发独立的 Android 系统 AOSP 是开源的,任何人都可以修改 AOSP 的代码开发独立于 AOSP 的 Android 系统。因为 AOSP 采用 Apache 2.0 授权,所以修改 AOSP 后的代码不需要开源。Amazon 的 Kindle Fire 和众多国产手机厂商的系统都属于这一类。

回到开头的部分,谷歌其实是禁止了华为对 GMS 的使用,虽然国内的手机没有什么影响,但在国外除了 Google 自己的 APP,其他很多 APP 也都是依赖于 GMS 服务的,例如推送 api 等等。

总之,无论如何,我相信华为一定会有办法的,华为加油!

windliang wechat