新时代新潮流 WebOS【3】关于手机 OS 的疯话

公司

2009-03-04 10:26

Kernel 是 OS 的核心,Android 没有自力更生开发自己的 Kernel,而是借用了 Liinux 作为 Kernel。但是很多技术文献仍然用 Android OS 这个词,把 Android 视为一套 OS。

有趣的是,Google 的官方定义是,“The Android platform is a software stack for mobile devices including an operating system, middleware and key applications”。注意,Google 视 Android 为一个平台,支撑这个平台的,是层层叠叠一摞软件砖头,其中包括 OS,但是 Android 本身不是 OS。

如果 platforrm 与 OS,仅仅是名称的差别,自然无关痛痒,但是如果事情涉及到手机软件体系,就值得仔细审视一番。

关于这个问题,我请教了 W 兄,以下文字是基于俩人的讨论,加上我个人的进一步发挥而成。其中不仅掺杂着强烈的个人偏见,而且弥漫着不知天高地厚的狂妄。对此有不良生理反应者,请及时回避。持批评意见者,恳请畅所欲言大力斧正。

假惺惺的免责声明结束,下面开始说疯话。疯话分五个部分,

1. 基于 Linux Kernel,Android 的额外贡献有哪些?
2. 为什么 Android 需要 Dalvik?
3. 为什么 Dalvik 不遵循 J2ME 规范,不参与 Java Community Process(JCP)?
4. JVM,Dalvik 与 CLI/.NET,谁更可能最终胜出?
5. Android 是 platform,还是 OS?File

Figure 1. Android architecture
Courtesy http://purefire.bokee.com/inc/android.jpg

基于 Linux Kernel,Android 的额外贡献有哪些?主要是两条,

1. 梳理了 Linux Kernel,尤其是统一了中间件(Middleware)。

Linux 是开源项目,开源项目的优点是集思广益,但是优点同时也是缺点,缺点是七嘴八舌。功能相似的模块,不仅版本多,而且 APIs 也不统一。所以有一些企业致力于把无序变为有序,在众多版本中筛选出性能最好的版本,统一 APIs,然后把各个不同功能的模块整合成完整的系统。譬如 Redhat 和 Ubuntu,它们主要致力于梳理供 PC 和 Server 使用的 Linux。

但是在嵌入式领域,各种版本的 Linux 模块还处在混战之中。Google Android 充当了嵌入式 Linux 领域 Redhat 和 Ubuntu 的角色。Android 的成就之一,是梳理了 Linux Kernel。图一中的最低层 Linux Kernel,显示的是 Android 的梳理结果。

梳理这个工作表面上看起来是力气活,没有太多技术含量。这个观点是错误的,实际上,如果没有雄厚的技术实力,没有长期积累的业界声望,是不敢担当这份重任的。

Android 不仅梳理了 Linux Kernel,更重要的是梳理了 MiddleWare,其成就显示在图一中倒数第二层 “Libraries”。之所以说 MiddleWare 的梳理工作更重要,是因为这里的局面更混乱。譬如 2D/3D 图像处理,多媒体,安全控制,嵌入式数据库等等,都是潜在的利润回报很丰厚的功能模块,所以竞争也非常激烈。

Android 的成就不仅在于筛选,而且也体现在优化。譬如说 libc,老生常谈的东西,有哪段稍微复杂一点的 C 程序离得开 libc 呢?GNU 版本的 libc 大概是 400K 左右,而 Android 对 libc 做了大规模精简,最后结果只有 200K,Android 把精简后的 libc 称为 bionic。尺寸缩小是一方面,另一方面是提高了运行速度,尤其体现在 pthread 的处理上。

梳理和优化的工作,既耗时又费 力,Google Android 大方地把自己的成果一揽子公开,一方面深得人心,扮演着圣骑士的角色(paladin),另一方面,如果能把嵌入式 Linux Kernel 和 MiddleWare 掌控在自己手里,从长远来看,Google 就成为嵌入式 Linux 的庄家,到那时,其它公司想挑战 Google 的地位就难了。

2. Dalvik 虚拟机。

图一中的倒数第二层,靠右边的方框中,显示的是 Android Runtime,包括 Dalvik 虚拟机和 Core library 两部分。有人说,Dalvik 是 Java 虚拟机,这是不正确的。的确,从使用者角度看,Dalvik 的语言和 Java 高度一致,但是形式相同并不等于实现方式相同。又有人说,Dalvik 是把 Java 语言,通过 JNI,翻译成 C/C++语言的翻译器。这种说法也不准确。

“Inside Java Virtual Machine”(http://www.amazon.com/Inside-Java-Virtual-Machine-Venners/dp /0071350934)是一本介绍 Java 虚拟机内部实现的书,书写得深入浅出,非常值得一读。花几个星期读此书,你会惊艳于 Java 和 JVM 设计之精巧。如此精巧的系统,还有没有改进的余地?Dalvik 是一个成功的尝试。Google Android 的 Dan Bornstein 有一个演讲,介绍了 Dalvik 内部的实现原理。

【video】Dalvik Virtual Machine internal,by Dan Bornstein,Google I/O conference,2008
Courtesy http://www.youtube.com/watch?v=ptjedOZEXPM

Dalvik 和 Java 虚拟机的区别在哪里?主要是两条,

a. Dalvik 的 bytecode 是.dex,而 JVM 的是.class。两者的区别在于.dex 比.class 更紧凑。同样一段 Java 源代码,分别编译成.class 和.dex bytecodes,很多情况,.dex 的尺寸比对应的.class 小 25% 以上。
b. 对比 Dalvik 执行.dex 和 JVM 执行.class 的效率,Dalvik 占用的 CPU 时间以及内存空间比 JVM 更少。至于快到什么地步少到什么地步,目前还没有广为接受的 benchmark 对比结果。据传,Dalvik 比 JVM 快 5-6 倍。

有人戏言,在计算机领域想出人头地,有个投机取巧的捷径,要么做大,要么做小。Google 的云计算平台走的是 “做大” 的路线,让百万台机器同时工作,相互协调。Google 的 Android 走的是 “做小” 的路线。大和小两个极端中,能在一端做出突出成就,已经出人头地,而 Google 两头冒尖,不服不行。

登录,参与讨论前请先登录

评论在审核通过后将对所有人可见

正在加载中

移动互联网的围观者、起哄者、以及肇事者。

本篇来自栏目

解锁订阅模式,获得更多专属优质内容