本文转贴自 http://mmdays.com/2008/10/11/android-淺探二:系統架構/, Kevin修改了部分台湾习惯用法为大陆习惯用法,并针对含混的地方略作了修改。
本篇目的在尽量不触及技术细节的情况下简介 Android 架构,并探讨其设计的特殊处,以及在版权上的意义。主要资料来源为 Anatomy & Physiology of an Android,有兴趣深入研究的读者可参考。
首先来一张现在大概已经很有名的图片:
由下到上,可以看到红色的 kernel 层,绿色的系统库,黄色的虚拟机,以及蓝色的 Java 代码。以下将一一介绍。
Linux kernel
必也正名乎:一般所称 Linux,其实是统称,指根基在 Linux kernel 以及其他许多跟 kernel 不见得有关的软件所组成的操作系统。最早,Linux 一词其实是专指 kernel,它提供了系统底层与硬体间的基本平台,让其他程序可以在上头执行。其最早作者是Linus Torvalds,他用自己的名字,加上採用了与 Unix 系统相容的介面,将自己的作品命名为 Linux。
如前所述,在 Linux kernel 上头执行的程式,跟 kernel 本身不见得有关系。可以是自由软件,也可以完全不是。把它加上一些自由软件,例如基本的函式库、工具、图形介面,应用程式等等,所组成的一套完整操作系统,才是一般所称的 Linux。为了避免误解,而且也为了正确传达自身的贡献,自由软体基金会建议大家称这样的一套操作系统为 GNU/Linux。其中的原因是,kernel 提供底层机制,但系统中重要的元件几乎都是来自于 GNU,也就是自由软体基金会。
希望大家还没被这些名词搞混。要弄清这些不同的原因是,Android 是在 Linux kernel 上头运作的,但他并不是 GNU/Linux。因为在一般 GNU/Linux 里面会有的东西,Android 很多都没有。
Linux kernel 的版权是 GNU General Public License version 2 (GPLv2),这又是什么玩意呢?GPLv2 是所谓的 Copyleft 版权,简单来说,就是为了确保知识产权能够继续公开流传,所以任何基于此创作的延伸创作,都自动採用了相同版权。GPL本身还有个特色,就是「共同运作」也算是延伸的一部分,意思是说你的程序没直接改GPL的代码,但是链接了GPL的库跟你的程式共同运行,那你的程式也必须採用GPL版权。
举例来讲,假定今天某公司觉得某GPL软体不错,拿来改了改,放在自己的产品里头拿出去卖,那某公司就一定要明确的一起散佈修改后的源代码。如果没有,那就是触犯版权了。有个组织叫 GPL Violations,专门抓这种案例,公司如 D-Link 以及 ASUS 都上过榜。这下问题来了:如果你是硬件厂商,希望你的硬件能在 Linux kernel 下运作,那么就必须要有驱动程序。驱动程序就是按照硬件的规格写的程式,用来告诉 kernel 怎么操作这个硬件。如果驱动程序的代码公开,等于硬体规格也公开的差不多了。许多厂商不愿意这么做,所以就提供编好的驱动程序,但不提供源码。版权所有者,也就是 Linus Torvalds 以及其他许许多多的 kernel 作者们,为了支援尽可能多的硬件,对这种行为是採取睁一只眼闭一只眼的态度,也就是目前这种编译好的驱动程式,算是处在灰色地带。
既然 Android 採用了 Linux kernel,当然得照游戏规矩来。但我们从前文可知,Android 的重点就是商业应用,他们可不愿意系统里有什么「灰色地带」,于是採用了一些手法来绕过这问题。他们把驱动程式移到 “userspace”,也就是说,把驱动程式变成在 Linux kernel 之上的用户空间跑,而不是和Kernel一起跑,这样就可以避过GPL。然后,在 kernel 这边开个小门,让本来不能直接控制到硬体的 “userspace” 用户空间程序也可以碰得到,这样只要把「开个小门」的程式码公佈就行啦。事实上,目前因为 Android 已经发行,所以依法他们已经公开了对 kernel 的修改,其源码在http://git.android.com/。
走笔至此,可以看出 Google 的原则之一 “Do no evil” 是很有意思的。他们自己的确承诺,而且也愿意公开 Android 的源码,但是他们给了其他人 “Do evil” 的选择,也就是,在这个小门的基础上,开发非开放源码的userspace系统,这样还算不算是 Do no evil 呢?当作哲学问题吧。
关于 Android 对 kernel 的修改,Google 的简报还提供了两个重点:
系统库
这里说的系统库是指 “native libraries”,是跑在系统里头的函式库,採用的语言不是 Java,提供一些基础建设。里头有几个值得一提的元件: