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代码包括三部分:
- Android 开源系统(Android Open Source Project,简称 AOSP ) 提供了 Android 系统的框架,包括修改后的 Android 专用 Linux 内核,Dalvik 虚拟机和 Android 应用层框架等。AOSP的大部分源码采用 Apache 2.0 授权模式发布,另外 Android 专用 Linux 内核部分采用 GPL 授权。Apache 2.0 授权规定,可以任意使用源码,不需要开源。GPL授权规定,对源码的任何修改都必须开源。
- Google 移动服务(Google Mobile Service,简称GMS)GMS 是由 Google 提供的一系列提高用户移动体验的应用和服务,包括各种服务和内购功能,还有一些 Google 的应用:Play 市场,GMail,Chrome,Google 地图,Google+ 等。GMS 提供了很好的特性,但是 GMS 是闭源的。为了获取 GMS 的使用,必须通过 Google 的授权。这部分源代码是不可见的。
- 基于 AOSP 的源码开发独立的 Android 系统 AOSP 是开源的,任何人都可以修改 AOSP 的代码开发独立于 AOSP 的 Android 系统。因为 AOSP 采用 Apache 2.0 授权,所以修改 AOSP 后的代码不需要开源。Amazon 的 Kindle Fire 和众多国产手机厂商的系统都属于这一类。
回到开头的部分,谷歌其实是禁止了华为对 GMS 的使用,虽然国内的手机没有什么影响,但在国外除了 Google 自己的 APP,其他很多 APP 也都是依赖于 GMS 服务的,例如推送 api 等等。
总之,无论如何,我相信华为一定会有办法的,华为加油!
相关文章