作为开放源码运动的旗舰,Linux曾经是新兴软件企业变革传统软件产业结构的希望。可是,这些年走下来,Linux表现出来的辉煌光环似乎主要是成就了别人,例如风行全球的Android的基础就是Linux。反观Linux自身,却仍然在潜行。那么,Linux本身是否具备腾飞的基因?它需要怎样的机遇,才能羽化成蝶,一飞冲天?
变革,从基因到环境
回想1998年,开放源代码运动如火如荼,因为它向人们预示——软件即将免费获得。这将是改变全球软件产业结构的一场翻天覆地的革命。
这些年来,这种革命真的发生了,只是如果我们不去回想以往,就会觉得目前的一切是理所当然。只要看看我们许多人手中的Android智能手机,你知道其中的软件是免费的。最重要的是,其中的软件基础——Android操作系统是免费的。
尽管Android的基础是Linux,但在这个世界上知道Android的人似乎多于知道Linux的人。这一方面说明Linux是具有羽化成蝶的基因,因为在智能手机领域它已经变成举世闻名的Android;另一方面又启发我们,它应该在其他的更广泛的领域羽化成蝶,从而对整个软件产业的变革发挥更大的作用。
用比较研究的思维方法来观察Linux向Android的演变,有利于我们促成Linux在其他更广的空间里发挥潜力。那么,Android发生了怎样的变异,使其从传统Linux中脱颖而出呢?
纵观整个过程不难发现,统一化、一致化是Linux羽化为Android 的重要推动力。在智能手机和平板电脑领域,Linux被一股强大的力量统一于Android。在其他领域,从事Linux软件开发的工程师和团队仍然处在“家庭作坊”的状况。这并非由太多人热衷于“家庭作坊”式的开发方式。其中的痛苦他们有切身感受。从一个仅有内核和简单网络功能的操作系统开始,一点一点地编织出一个可以与特定硬件环境相配合、投入实际应用的系统,这个过程本身就像是看着别人健步如飞而自己却在爬行。此后,硬件环境哪怕有一丝一毫的改变,就可能导致全面重新修改和测试整个软件系统。而且,这个过程会无休止地循环下去,直至这个产品生命周期的结束。
反观Android,这是一个相对统一化、一致化的Linux系统。开发一个Android的系统,与开发一个Linux系统相比轻松多了,要担心的事情也少多了,速度也快多了。可见,Linux也需要类似于Android那样的变革。
Yocto适逢其时
时光回转至2010年,开放源代码运动的精英们意识到了统一化、一致化对于Linux性命攸关,他们聚集起来,启动了Yocto计划,开始为开源社区培植变革的火种。
通过提供通用的建构系统(Build System)和具备协同能力的开发技术,Yocto计划为Linux开发者启动了新的起点,重点是免除了他们浪费在Porting、Duplicating、Recreating和Maintaining这些低价值工作上的时间。
这两年来,在Yocto的支持下,从最初的爬行到后来的直立行走,Linux社区的人们步伐已经越来越稳健。其中具有标志性的一环就是Yocto计划的兼容需求规范(Yocto Project Compliance Requirements)已经出炉了,这将全面推动变革与进步。
那么,究竟什么是Yocto计划呢?它是一个Linux发行版本吗?我应该怎样把它用于自己的Linux项目呢?
Yocto计划是一个开放源码协同计划,它提供必须的标准以及高质量的架构、工具和方法论,以便降低嵌入式Linux软件工程项目的复杂度,提高其可移植性。Yocto计划不是一个某家公司或者机构提供的Linux发行版本,但是许多硬件和软件公司都加入了Yocto计划,共同来支持嵌入式Linux开发者实现更好的跨平台兼容性和部件互操作性。那么,Yocto计划又是怎样做到这些呢?
在嵌入式环境中建立一个可伸缩的Linux系统,必须依赖一些软件和工具集。请你设想这样的情形,你可以从开放源码社区得到Kernel、Userspace和Patch等等,也会做出你自己的工作,例如特定大小的文件系统、内核配置等等,然后应用适当的工具集来建构各种特定的应用系统,例如针对IA架构做一套系统,针对ARM架构做一套系统。
这跟烹调做菜十分相似——用相同的食材和工具,只要稍微改变配方比例和火候,你就可以做成不同的菜肴。现在请你设想一下,如果没有通用的、好用的工具,例如菜刀、炉灶、锅和炒菜的铲子,你的烹调技艺将会很难发挥。在嵌入式Linux领域,如果没有Yocto 计划,你所遇到的情形就是这样——没有通用的资源,从Kernel、Userspace到Cross-Architecture Build,也没有通用的工具集 (Toolchain、Makefiles、Compilers、Debuggers等等 )。
Yocto计划提供了上述所缺的一切,而且不会让用户有厂商锁定的困扰。这样,用户既拥有了高质量的标准化工具,又可以自行管理其风险。对于企业战略来说,拥有自主的技术选择是成功的必要条件。Linux项目中的互操作性、可移植性和可重用性将会让开发团队受益无穷。