2.3 拥有用户的重要性
我就这样继承了popclient,同样重要的是,我继承了popclient的用户群。拥有用户是一件很美好的事,这不仅表明你正在服务于某种需要,表明你做对了某些事,如果发展得当,他们还会成为你的开发合作者。
UNIX另一个传统强项也被Linux发挥到美妙的极致:很多用户本身就是黑客。因为可以拿到源代码,这些黑客能极为有效地缩短排错时间,只要给他们一点点鼓励,他们就会帮你查找问题、给出建议并帮助改善代码,这些比你自己做要快得多得多。
6.把你的用户当成开发合作者对待,如果想让代码质量快速提升并有效排错,这是最省心的途径。
这种做法的效力很容易被低估,事实上,连我们这些在开源世界里的人,都极大低估了这种做法的效力,也就是用户越多就越能有效对抗系统的复杂性,直到Linus Torvalds向我们明白地展示这一点。
我想,Linus最聪明和最有价值的成就其实不是构建出一个Linux内核,而是他发明的这种Linux开发模式。有一次我当面向他表达了这个看法,他笑了,平静地重复了他常说的话:“我基本上是个很懒的人,别人做事,我得名誉。”像狐狸那样懒,或者像Robert Heinlein曾经描绘的一个很有名的角色,太懒以至于无所不能。
回顾以往,GNU Emacs Lisp库和Lisp代码资源库可能要算是Linux这种成功方法的先例,和Emacs用C语言写的核心以及其他GNU工具不同,Lisp代码池是不断更新的,并且在很大程度上是用户驱动的,大多数新想法和原型在达到最终稳定状态前,都会被重写3到4次,和Linux一样,其频繁的“松耦合”合作都是通过Internet实现的。
说实在的,在fetchmail之前我最成功的作品大概要数Emacs VC(版本控制)模式了,当时我通过邮件和其他三人采用了类似Linux的合作方式。直到今天,我只和其中一人见过面(即Richard Stallman,Emacs的作者,自由软件基金会的创立人,参见http://www.fsf.org)。Emacs的VC模式提供了SCCS、RCS以及后来CVS的前端功能,使得用户可以完成“一键式”的版本控制操作。它是从某人写的一个简略而粗糙的sccs.el演化而来的,之所以能取得成功,是因为和Emacs本身不一样,Emacs的Lisp代码可以迅速地完成“发布/测试/改进”循环。
不只是Emacs,还有其他一些软件产品也使用了两层架构和两级用户群,内核使用大教堂模式开发,工具箱(toolbox)使用集市模式开发,比如数据分析和可视化展现的商业化工具MATLAB就是这样,MATLAB和其他类似产品的用户们发现,创新、酝酿和行动最频繁发生的地方总是在产品的开放部分,而这部分的改进也总是由庞大而多样化的用户群完成。