转-Andriod被排出Linux内核的原因
下载Android安安软件请到:http://code.google.com/p/andbox
?
在Linux2.6.33发布并且删除了Andriod内核代码之后,很多人问我到底发生了什么,以及接下来我们会如何对待Andriod,下面我以我的理解谈一谈这整件事。
--------------------------------------------
首先我得说我很喜欢Andriod平台,我一直都在使用G1,直到上周每一天都在用。它对我还有像我一样的使用者都很好用,我对此感到很高兴。
从技术角度来说我也感到很高兴,Google选用Linux内核并在此基础上创建一个跟传统linux系统完全不同的手机操作平台是一件很让人吃惊的一件事,同时你还可以在Andriod设备上直接运行“真正的”Linux系统,并且它同Andriod系统都能在无需做出什么改变的情况下良好运行。
Andriod同时解决了手机制造商多年以来就不得不面对的一个问题,即一个免费版本的Java和一个统一的程序运行平台,在这个平台上程序员可以写出在其他任何支持Java的系统都能运行的程序,因为这所有现存的“Linux手机联盟”都将面临这瓦解的境地,大概再过不久它们就会悄无声息的关上大门,假如它们还有门可以关。
?
发生了什么?
那么到底是什么导致Andriod内核代码被排出Linux内核之外?简单的说,就是因为没人关心代码,所以它才会被排出Linux内核。就像我早先声明的那样,在架构树上的所有代码都应该和主分支内核相容,否则它就会被排除,但是这里有一个更大的问题是,Andriod不仅仅只是在/drivers/staging/andriod目录里多出一些“怪异的”驱动程序,假如你想要运行Andriod,你就必须先了解Google在安全模块中新写出来的锁类型,当然还有钩子类型。为了使你写出来的驱动程序能在Andriod中使用,你得把它恰当的同这个锁相容和,你有时甚至还要考虑这整个“怪异的”安全模块,天呀,这可是同Linux系统完全不同的驱动架构。
因为这些驱动只能使用在Google的内核树上,这就意味着为所有为Andriod硬件平台编写出来的驱动都不可能进入主内核树,正因为这,Google现在开始阻止这些硬件和驱动代码进入Linux主驱动树,并且积极地建立一个很多计算机销售商都依赖的内核分支。
现在Linux发行版内核源代码树的分支都被维护地很好,但假如任事态发展的话,事情也许会变得很糟糕,因为Google没有使其代码进入主内核,这些编写驱动和平台代码的公司都被排除在外而不能为内核社区做出贡献。内核社区几年以来一直都在试图说服这些公司把它们的代码加入内核,这样它们就可以使用安全更新,并自动处理应用程序接口的问题,这些公司听从了他们的建议,你可以看到越来越多的大公司出现在在每个内核版本里,可现在这个进程因为Google停滞下来了,因为Andriod的周边公司不能回报上游Linux内核,这就导致了这些公司需要在维护花费更多的资源同时增加了开发周期。
?
为使Andriod融入内核需要做些什么?
在早前Andriod加入架构树的时候,很多内核开发者检查了Andriod代码,并且指出了为了能被接受应该清理和改变的地方,这些改变很多影响到了Andriod内核和用户空间边界,同时如果Andriod内核发生变动,Andriod用户空间逻辑也需要做出相应改变,所以就不要指望Google员工去做这件事了。
?
那么,该怎么办?
我真的不知道该怎么办,Google再也没有表现出希望把它的代码加入上游的打算,一些公司试图把它们的代码加入上游,可是那样需要去做更大的工程工作,是一种本来根本就不必要的痛苦。
?
冀望
我真地希望Google能够修改Andriod代码库,使其重回Linux的怀抱,并停止它所造成的同很多嵌入式Linux硬件公司的隔阂,我曾私下里帮助完成这个工作,而现在预备公开地再做一次,但是为了达到这点我需要来自Google开发者的帮助,没有他们,一切都不会改善。
好消息是似乎所有对内核/用户空间应用程序接口的改变都不会影响在堆栈以上的Andriod代码(比如应用程序),所以这项工作的实施不会影响到整个系统。
我会在2010年Linux高峰论坛年会上发表一个演讲,希望在那之前事情有所改观,要知道这个年会可是有对其参与者所做的坏事进行叫喊的传统的。