大教堂,集市和镇议会【译】

作者:艾伦•考克斯

这些是我认为值得分享的,我对’集市模式’的一些想法。它同时也是一个如何彻底搞砸一个自由软件项目的指南。我选择了一个我认为最好的,被称之为“城镇议会”效应的经典例子(尽管镇议员们可能不这么认为)。

对于软件开发人员,您必须了解一些特定的事情。首先要理解的是,真正优秀的开发者相对来说并不常见。不仅如此,一个真正的“真实开发者”和“普通开发者”之间的差异,相比其他职业“优秀”和“普通”之间的差异要大得多。研究表明,最好的开发者和其他开发者在工作效率上的差异是30比1。

其次,你需要明白,许多想成为真正开发者的人非常擅长发表意见。他们中的许多人还染上了噜苏病,或被一些专业人士认为这是“唯一正确的道路”。要知道在以太网上夸夸其谈很廉价。

任何软件项目的第三方就是我们所说的“群众”。他们中有些人不编程,但在其他领域做出了巨大贡献——文档、用户帮助和美术作品,这类人通常认为你需要一个许可证才能连接到互联网。

我将以Linux 8086项目为例来说明如何彻底搞砸。总的来说,将Linux的一个子集移植到8086是世界上最没有意义的练习之一,一开始只是个玩笑,后来就失控了。

只有极少数真正的开发者有足够的时间和正确的(或者是错误的)精神状态来为项目做出贡献,而这个项目的唯一真正价值就是“Hack Value”。因此,在任何给定的时间,项目都有两个或三个核心贡献人员。

不幸的是,有很多人认为在8086上运行Linux会很好,他们觉得有义务“参与”。在这种情况下,他们中的大多数人都停留在“想成为开发者”这一类人,因为他们从安全距离发现了这个项目的“愚蠢”因素。

开始出现的问题是,许多(大部分意义很好)危险的半线索人带着意见的到来,不是代码而是意见!他们完全清楚应该怎么写,但大多数人不会用C语言写“hello world”。因此在项目使用了一年适用的编译器后,他们为用什么编译器亦或是重写一个争论了几周。他们忙于讨论如何生成大型模型二进制文件,而忽略了内核交换器设计。

Linux 8086继续开发,真正的开发人员在他们的kill文件(黑名单)中有很多其他列表成员,这样他们就可以通过列表进行通信,而这仅仅是因为有太多的半线索人在乱发邮件。它不再是一个集市模式,它变成了一个核心团队,对许多人来说,这是一个礼貌的用词。在这种情况下,这是不可避免的防御阵地。

在Linux的模式中,用户/开发者基础增长缓慢,它的成长背景是从一群贡献代码的人员中成长起来的,他们要么是在最初的Minix黑客社区中有基础,要么是通过一次次启动的艰难方式学会了一些东西。随着项目的发展,那些原本应该成为“Linux内核结构规划管理委员会”的人反而被抛弃在一个期望他们交付的环境中,在那里失败不被视为问题。用莱纳斯的话来说,“给我看看源码”。

如果有人被卡住了,他们就会发布问题,通常会有一个基数足够大的,有时间和相应知识的人来回答。在Linux8086的案例中,开发人员早就把自己隔离起来了。如果有一个更好的活跃开发者与潜在有用的开发者的比例,就能迅速将一些噪音转化为生产力。这个项目可以获得更多有用的开发者,他们反过来也可以教其他人。与任何学习练习一样,你最好只有几个学徒。

有些人认为你不能把“低级开发者”变成真正的开发者。从个人在Linux项目中的经验来看,有很多人提供了一点帮助,并增加了一点他人的信心,他们将成为最好的开发者。有很多人不会,但足够多的人会。

作为这个声明的一个例子,Linux IPv6源代码的作者曾经在葡萄牙的irc(Internet Relay Chat)上提出一些基础的想法和问题。在我们帮助他解决一些内核内部问题后,他编写了大约75%的Linux IPv6协议代码,而最后一次见到他是在美国为思科工作。

Linux 8086项目基本上已经从它的“侵扰”中恢复过来,现在是一个小的安静的项目,使用CVS树,由Alastair Riddoch领导,他一直在做出色的工作。随着镇议员的解散,现在可以自由的提出问题,加入和帮助这个项目。

从这个项目以及其他类似项目(有时会失败——还记得早期的Linux文字处理项目)中得到的教训非常清楚:

  • 从一开始就发布代码。如果不是很有用也没关系。对镇议会进行分类的最好方法就是简单地完成工作,然后告诉他们已经完成了。Linux、KDE和GNOME都采取了这种态度,并且都做得很好。你可以为正确的编程方式争论一辈子。一旦有了代码,人们(不管他们的技能如何)就可以使用它。
  • 感谢那些给你一点帮助,却能为项目做出巨大贡献的人。如果他们的第一个补丁有问题,不要忽略它们,解释为什么会有问题,并提出解决方案或是指出能寻找到解决方案的地方。每一分钟花在回答真正的问题上,帮助别人在一个项目上工作,将会得到十倍于项目的回报,对社会的回报将是不可估量的。
  • 不要忘记非开发者。我发现很可悲的是,当被问及“最重要的五名Linux内核人员”时,大多很少说出一些最重要的人的名字——所有那些维护网站、更改日志、邮件列表和文档的人都同样重要。莱纳斯说“给我看看代码”,这是对一个真实项目的狭隘看法。当你听到“我很想帮忙,但我不会编程”,你听到的是一个文档管理员。当他们说“但英语不是我的母语”时,你就有了另一种语言的文档和翻译人员。
  • 试着把有用的人从噪音中分离出来。试图把人们从大量无意义的讨论中分离出来很难,在Linux 8086的案例中,我放弃这个目标绝对是错误的。如何排除那些只说不做的人是一个研究课题。

所以下次有人想要对一个项目投票,或者讨论一个月的问题,然后执行它——请注意。他们有可能最终能找到正确的解决方案。但不管怎样,你还是有较大可能性继续开发下去。只要在项目推进时,让他们给你发个补丁就行了。

要小心“我们应该”,而是着手于“我该怎么”……

——1998

Cathedrals, Bazaars and the Town Council
Feature:Cathedrals, Bazaars and the Town Council
Alan Cox