浅析龙芯的自由软件战略 三步走战略的内容2018
浅析龙芯的自由软件战略 作者简介: 张乐() Gentoo Linux开发者暨中文社区负责人,Gentoo龙芯版维护者,2009 Google SoC Debian MIPS N32 Port项目导师,资深自由软件贡献者。曾为计算机世界实验室《龙芯2F处理器GCC 4.4优化探秘》一文撰写点评,并在测试中提供了全程支持。
最近,有关龙芯“自主CPU战略失败”的争论掀起了很大的波澜。虽然这方面问题已得到澄清,但龙芯真正面临的问题其实还有很多。在这篇文章里,笔者针对龙芯与自由软件这个话题,结合近两年来参与项目的经验,阐述一些个人见解,希望能够唤醒龙芯团队与公众对此的关注。
自诞生之日起,龙芯就与以Linux为代表的自由软件之间存在着千丝万缕的联系。并且由于商务、产业环境等方面的原因,现阶段龙芯可谓是相当倚重自由软件。但这并不是一件坏事,相反的,长远来看这是一件天大的好事。作为一个自由软件行业的长期从业者,笔者坚信未来自由软件将成为主流,龙芯只不过是顺应潮流而已。
虽然自由软件经过20年左右的发展,已取得长足进步,但从市场占有率来看,还并不普及。尤其在以桌面应用为代表的领域,用户的使用习惯甚至成为超越软件功能的决定性因素。而在一些特殊的市场,自由软件已经打开了突破口,手机上的Android、上网本及MID领域的Moblin都是成功案例。所以,龙芯应该继续坚持自由软件这条道路,义无反顾地走下去,前途必将是无限光明。这一点,相信龙芯的开发团队、下游厂商和爱好者们都看得很清楚。
再来看看龙芯平台上自由软件的发展现状。Linux本身支持MIPS,理论上可以运行在龙芯上,但这其中还需要做很多工作。首先,要保证软件可以运行。和x86平台上可以自行DIY不同,基于MIPS平台的产品一般都是特殊订制的,Linux内核为每种MIPS机器都设定了一套独立的配置选项。再加上龙芯和其他MIPS实现还有一些细微的差别,龙芯电脑上有一些硬件的驱动也尚未进入Linux内核,所以未经修改的内核在龙芯平台上是不能运行的。目前,这个问题已基本得到解决,但要彻底根治,还要等Linux/MIPS项目正式收录龙芯2F平台的内核补丁才行。
其次,软件能否良好高效地运行?这个问题牵扯到许多层面,解决起来复杂的多。在底层,由于龙芯2号处理器实现了完整的MIPS III指令集,工具链(gcc/binutils)不经修改也是可以使用的。并且目前已发布的gcc 4.4和binutils 2.省略组织提出的自由桌面标准开发,如果当初在此基础上进行二次开发,会省不少力气,还能创造双赢的局面。
第三,龙芯相对欠缺与国际自由软件社区主动交流的意识和行动。自由软件的一个好处是谁都可以得到源代码来学习和改进。但改进只有被上游所收录之后才能真正的存活下去。例如逸珑8089笔记本的温度与风扇监控模块在最新版本的Linux内核上工作不正常,我们只有自己去做相应的修改。如果模块进入了内核,我们就不用做这个事情,当初引入这个改动的人会负责把内核中所有需要改动的地方进行修改。
想让上游收录我们的补丁,在写补丁之前就应该了解上游对于代码的要求,比如最起码的代码风格等。在写的过程中,也应该多多听取上游对于代码的意见。可惜龙芯目前在这方面做的还不够好。以前文提到的mplayer为例,简单看一下这个专门为龙芯优化的mplayer的源代码,可以发现几乎所有的改动都是把原有代码注释掉,再加上手工编写的汇编语言。这样的改动,让任何人都没有协作的余地,也会给维护带来很大麻烦(汇编语言难以理解且与ABI相关),是绝对没有可能进入上游的。如果要用龙芯的多媒体指令集,可以利用gcc 4.4版本开始提供的龙芯多媒体指令intrinsic。最起码,可以为每一个指令定义一个宏,而不要直接使用大段的汇编语言。
要解决所有这些问题,最根本的还是要重视软件在龙芯生态环境中的作用,不要视其为附庸。软件社区的建设与人才培养是当务之急,要知道在许多大型IT企业中,软、硬件工程师的比率甚至超过2:1。另一方面,目前龙芯阵营中,还缺少在国际开源社区举足轻重的人物,如果完全靠自己培养,将会比较耗时。收买有时也是很有效的运作方式,就像英特尔雇佣Xorg的老大Keith Packard,对龙芯就是很好的启发。笔者认为,只有当我们的软件工程师可以代表龙芯在一些著名的自由软件国际会议上发表主题演讲时候,才意味着龙芯产业生态环境达到健全的地步。
