【转载自 http://www.douban.com/note/132197038/】
原来是粤语,翻译成普通话。
Android构建系统是传统商业嵌入式软件系统的做法。就是将所有代码同构建工具一齐打包,通过一个代码包同一条命令就可以完成整个系统的构建。
linux基金会的yocto,就是当前主流嵌入式linux构建系统的做法。即仅将patch、构建元数据(build meta-data)文件同构建系统打包,构建时用一条命令就可以构建整个系统,不过代码是从网上代码服务器获取的。
meego则使用linux发行版的开发方法,即开发人员将代码、patch、同软件包构建元数据文件放到构建服务器(obs),构建服务器会自动编译且生成软件包(rpm),然后开发人员可以在本地通过镜像构建工具(mic)从构建服务器下载软件包并生成镜像。
Android的做法的优点是,你可以在本地修改任意代码。缺点是你必须编译所有代码,各个开发者之间没有办法共享编译结果。而且你如何将修改提交到上游呢?或者没有这个问题,因为android不是纯粹的自由软件开发模式,没有patch提交途径,你只得自己维护一个分支。
yocto则鼓励生成patch,而不是开条分支,当然亦可以开条分支。Yocto一样没有办法共享编译结果,虽然它会生成软件包,但貌似镜像不是通过软件包构建的。
至于meego,其实可以扩展obs,自动从网上代码服务器下载代码,开发者只需要提交编译元数据文件。同时,可以将mic功能集成进obs,这样编译软件包同构建镜像就可以在一台或一组机器里边做,容易管理同使用。听上去就像一个在线yocto。
当然,没有一种构建方式占绝对优势。Android需要下载全部代码,只生成镜像,中间不生成软件包;meego要看到全部代码就比较困难;yocto要自己管理构建软件包同镜像的过程。自由软件的编译选项多,依赖关系复杂,同时又希望更多人参与合作开发,或者好难有一种完美的系统构建方案。或者rmake加上rbuilder做得算ok啦。讲到在线软件包构建系统,除了上边提到的OpenSuse的obs外,还有Fedora的koji,Ubuntu的launchpad的ppa,Arch的aur。看上去主流发行版都提供在线软件包构建系统方便开发人员构建同分享软件包。Ubuntu的launchpad更进一步连代码服务器都一并提供。