Android开源语言采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分:底层以Linux核心为基础,由C语言开发,只提供基本功能,下文进行说明指导。
这段话的意思是说,Google玩了一个花招,在kernel和应用程序之间,自己做了一个中间层,这样就既不违反GPL许可,又能不让外界看到厂商的硬件驱动和应用程序的源码。里面的关键在于,Kernel和Android的许可证不一样,前者是GPL许可证,后者是Apache Software License(简称ASL)许可证。
GPL许可证规定,对源码的任何修改都必须开源,所以Android开源语言了,因为它修改了Kernel。而ASL许可证规定,可以随意使用源码,不必开源。所以建筑在Android之上的硬件驱动和应用程序,都可以保持封闭。为了得到更多厂商的支持,Google有意选择了这样做。
并且特意修改Kernel,使得原本应该包括在kernel中的某些功能,都被转移到了userspace之中,因此得以避开开源。这样做或许有利于推广Android,吸引厂商和软件开发商的加入,但是Google也放弃了构建一个真正开源的手机系统的机会。
从而也就不能获得由全世界程序员提供智慧、分享代码、推动创新的好处。关于许可证问题的深入讨论,请阅读Ryan Paul的文章《Why Google chose the Apache Software License over GPLv2 for Android》。
Google的这种做法,直接后果就是给Linux Kernel带来了麻烦。Greg Kroah-Hartman清楚地说出了自己的不满。由于这个原因,Google也从不把大量的硬件驱动程序和平台源码向kernel提交。实际上,它创造出了一个kernel的分支,大量的开发者都依赖那个分支。”
这就是Android干的事情:它修改了Kernel,但是又不提供修改的细节,自己搞了一个封闭的系统。说得难听一点,它利用了开源社区,要求开源社区为它做贡献,却又不愿提供回报。所以,Linux Kernel就把Android开源语言踢出去了,真是再正常不过了。人们有权利质疑,Android这样的哲学是否正确?是否符合Google“不作恶”的口号?
如果Android开源语言继续这样封闭下去,那么开源社区为什么要为它免费制作软件呢?因为我又不是在为开源社区服务。而是在为Google服务。既然这样的话,那还不如去支持iPhone呢,至少能在软件商店里多卖一点钱,而且乔布斯看上去也更酷一点。
我私底下已经说过,我愿意帮助完成这项工作,在这里我再次公开这样说。但是如果没有Google程序员的加入,什么也不会发生。”Android必须变成一个真正的开源系统。如果像现在这样封闭下去,就会被开源社区抛弃,就一定不会成功,即使有Google的支持。
我接受他的批评,我确实有点感情用事。主要是因为对Google有太大的期望,所以不能接受它现在的这种做法。这一次,也许不能说Google做错了什么,毕竟都符合GPL许可证的要求。但是代价也是巨大的——它放弃了创造未来的机会。
我坚信,未来主流的手机操作系统一定是开源的,就像我坚信未来Linux一定胜过Windows一样。现在,既然Google放弃了这个选择,那么只能等待其他人来做出开源的手机系统了。这也意味着,我们还要在黑暗中等待更久。
【编辑推荐】