首先,常见的自由软件发展形式中发展的主体是软件项目,推动项目发展的是围绕这个项目成立的社区。公司只作为软件项目的一个贡献者,是社区成员的角色,这方面最好的代表就是Linux内核。有的项目背后虽然只由一个公司所掌控,也得采用这种形式,比如Ubuntu。这样做的好处是可以淡化公司的存在,让人们相信自己是为了这个软件项目在做贡献,尽可能多地吸引不同背景的开发者。而目前实际上并没有这样的一个关于龙芯的社区存在。如果有这样一个社区的话,我们应该尽快为龙芯软件的发展确定一个路线图,确立统一的规划,加强社区各个成员间的合作与共享。比如搞清楚发展的先后顺序,搞清楚每个成员正在做的事情,搞清楚每个具体项目的进度,搞清楚还有哪些工作需要完成等等。这样,假如有其他人想加入的话,也可以知道自己应该从哪里下手,有利于吸引更多的开发者。建立Planet(开发者的blog聚合)也很有必要,可以让所有人随时了解每个开发者已经做了什么,正在做着什么。 其次,在研发软件之前,应该对现存的自由软件项目做充分的调研,看看有哪些项目可以利用(龙芯选择Linux其实也是不自觉的经历了这个步骤)。并非只有操作系统才值得这样做,桌面环境、应用软件一样可以。逸珑8089笔记本自带系统的桌面是经过修改的KDE,这个项目笔者认为很难有什么前途,因为决定自由软件发展的一个重要因素是使用人数,用的人多了,才会吸引更多的贡献者。如果在决策之初稍作调研的话,也许会发现海峡对岸的开发者正在打造一个叫做LXDE的轻量级桌面环境。这个桌面环境运行起来可以显示出与华硕EeePC几乎一样的操作界面,与逸珑8089笔记本自带系统的界面也很相似。LXDE遵循freedesktop.org组织提出的自由桌面标准开发,如果当初在此基础上进行二次开发,会省不少力气,还能创造双赢的局面。 第三,龙芯相对欠缺与国际自由软件社区主动交流的意识和行动。自由软件的一个好处是谁都可以得到源代码来学习和改进。但改进只有被上游所收录之后才能真正地存活下去。例如逸珑8089笔记本的温度与风扇监控模块在最新版本的Linux内核上工作不正常,我们只有自己去做相应的修改。如果模块进入了内核,我们就不用做这个事情,当初引入这个改动的人会负责把内核中所有需要改动的地方进行修改。 想让上游收录我们的补丁,在写补丁之前就应该了解上游对于代码的要求,比如最起码的代码风格等。在写的过程中,也应该多多听取上游对于代码的意见。可惜龙芯目前在这方面做的还不够好。以前文提到的mplayer为例,简单看一下这个专门为龙芯优化的mplayer的源代码,可以发现几乎所有的改动都是把原有代码注释掉,再加上手工编写的汇编语言。这样的改动,让任何人都没有协作的余地,也会给维护带来很大麻烦(汇编语言难以理解且与ABI相关),是绝对没有可能进入上游的。如果要用龙芯的多媒体指令集,可以利用gcc 4.4版本开始提供的龙芯多媒体指令intrinsic。最起码,可以为每一个指令定义一个宏,而不要直接使用大段的汇编语言。 要解决所有这些问题,最根本的还是要重视软件在龙芯生态环境中的作用,不要视其为附庸。软件社区的建设与人才培养是当务之急,要知道在许多大型IT企业中,软、硬件工程师的比率甚至超过2:1。另一方面,目前龙芯阵营中,还缺少在国际开源社区举足轻重的人物,如果完全靠自己培养,将会比较耗时。收买有时也是很有效的运作方式,就像英特尔雇佣Xorg的老大Keith Packard,对龙芯就是很好的启发。笔者认为,只有当我们的软件工程师可以代表龙芯在一些著名的自由软件国际会议上发表主题演讲的时候,才意味着龙芯产业生态环境达到了健全的程度。 作者简介 张乐(http://zhangle.is-a-geek.org) Gentoo Linux开发者暨中文社区负责人,Gentoo龙芯版维护者,2009 Google SoC Debian MIPS N32 Port项目导师,资深自由软件贡献者。曾为计算机世界实验室《龙芯2F处理器GCC 4.4优化探秘》一文撰写点评,并在测试中提供了全程支持。 |