2.11 开源软件的社会化协作背景
经上记着说:那些最好的开源小工具,一开始都只是作者用来解决自身日常痛点的自用方案,后来广为流传,是因为大量用户都面临一模一样的问题。这刚好呼应第一条准则,换个更实用的说法总结就是:
18.想要攻克有价值的难题,先找一个你自己真正在意、感兴趣的问题。
卡尔・哈里斯最早写 popclient 是这样,我开发 fetchmail 也是同样的道理,不过这个道理早就有人说过。Linux 和 fetchmail 的发展史真正值得深挖、值得我们重点讨论的,是后面这个阶段:当软件拥有规模庞大、积极性高的用户与协作开发者社群后,项目会如何持续迭代演化。
弗雷德・布鲁克斯在《人月神话》里提出过一个观点:程序员的工时不能简单互相替代;给进度滞后的项目新增人手,只会拖慢整体工期。前文也提到过他的推导逻辑:项目复杂度、沟通开销会随开发者人数呈平方级上涨,但产出的工作量只线性增加。布鲁克斯定律长期以来都被当作行业铁律。但本文分析的开源开发模式,从多个层面推翻了这条定律成立的前提;而且现实摆在眼前,如果布鲁克斯定律适用于所有场景,Linux 根本不可能发展到如今的规模。
如今回头看杰拉尔德・温伯格(Gerald Weinberg)的经典著作《程序开发心理学》(The Psychology of Computer Programming),恰好给布鲁克斯的理论补上了关键修正。书中在讲“无我编程”时提到一种现象:如果团队里开发者不把代码当成自己的专属地盘,主动欢迎别人找漏洞、提优化思路,项目迭代改进的速度会远远超过其他团队。(近些年肯特・贝克(Kent Beck)提出的极限编程,让程序员结对编程、互相审阅代码,本质就是刻意复刻这种效果。)
温伯格起的这个术语,或许让他的观点没能收获本该有的认可——光是把互联网开源开发者形容成 “无我”,就让人觉得好笑。但放到现在,他这套理论的说服力比以往任何时候都强。
集市模式充分发挥无我编程带来的增益,大幅削弱布鲁克斯定律的负面影响。布鲁克斯定律的底层规律并未失效,可当开发者规模庞大、沟通成本低廉时,一些原本不显著的正向非线性效应会盖过它的弊端。这好比牛顿物理与爱因斯坦物理的关系:经典体系在低能量场景下依旧成立,可当质量、规模提升到一定程度,就会产生核爆炸、Linux 这种超乎预料的结果。
其实回看 Unix 的发展历史,我们本该早就预料到 Linux 的这套发展规律(我自己也照搬过林纳斯的开发思路,在小规模项目里实操验证过这套逻辑9)。说白了:写代码这件事,本质上依旧是单打独斗的工作,但那些真正亮眼、出彩的项目,靠的是聚拢整个社群的注意力和集体脑力。闭门造车、只靠自己动脑开发的人,迟早会被甩开差距;真正厉害的开发者,会搭建开放、可迭代的协作环境,让成百上千、甚至上万的开发者一起打磨:扩充设计思路、提交代码、排查 bug、迭代优化。
但早年的 Unix 生态受好几项条件限制,没法把这套玩法做到极致。一是各类开源许可证、商业保密条款、商业利益带来的法律约束;二是事后回看,当年互联网基础条件太差。
在低成本互联网普及之前,只有少数地理位置集中的技术圈子,内部风气推崇温伯格的无我编程。开发者随手就能招来一大批资深同行一起协作、评审代码。贝尔实验室、麻省理工 AI 实验室、计算机实验室、伯克利分校,都是这类圈子,诞生了大量经典技术,时至今日依旧影响力十足。
Linux 是历史上第一个主动放眼全球、把全世界当作人才池,并且做成了的开源项目。Linux 的孕育阶段刚好撞上万维网诞生,它在 1993—1994 年走出初创期,与运营商(ISP)行业起飞、互联网彻底走入大众视野同处一个时期,这并不是偶然。全网普及带来了全新协作规则,而林纳斯是第一个吃透这套新规则的人。
便宜的互联网,是 Linux 这套开发模式能够成型的必要条件,但光有网络远远不够。还有一个至关重要的要素:配套的项目管理风格、协作规范。依靠这套规则,项目负责人才能聚拢开发者,最大化发挥互联网协作的价值。
那么这套管理风格、协作规范究竟是什么?首先它绝对不能依靠权力层级管控;就算强行靠权力施压管理,也绝对做不出 Linux 如今的成果。
针对这一问题,温伯格引用了 19 世纪俄国无政府主义者彼得・克鲁泡特金(Pyotr Alexeyvich Kropotkin)的自传《一个革命者的回忆录》(Memoirs of a Revolutionist),里面的观点恰好能精准解释这个议题:
我出身于农奴主家庭,和当年所有年轻人一样,刚踏入社会时深信管理就得靠指挥、下指令、训斥、惩罚这一套。但早年我负责大型事务、和【自由】民众共事,任何一点失误都会立刻引发严重后果,这时我才看清两种管理逻辑的天差地别:一种靠命令与纪律管控,另一种靠彼此共识协作。命令那套在阅兵场上固然好用,放到真实事务里却完全行不通;真正要做成事,得靠无数人同心协力、付出大量心血。
Linux 这类项目,恰恰就需要上文所说的 “众人同心合力深耕一件事”;而互联网这个自由开放的环境里,参与者全是自愿贡献的开发者,根本没法靠 “下达命令” 这套模式管理。想把协作项目做好、具备竞争力,牵头的开发者就得学着按照克鲁泡特金所说的 “共识原则”,聚拢同好、调动整个社群的积极性,也就是活用林纳斯定律。10
前面我用德尔斐效应简单解释过林纳斯定律,但拿生物、经济学里的自适应系统来类比,会更贴切。Linux 社区很多地方都和自由市场、自然生态十分相似:每个参与者都优先追求自身收益,可在这个过程中,会自发形成一套自我修正的有序体系,它的完备度与效率,远不是顶层统一规划能比得上的。而克鲁泡特金所说的 “共识原则”,答案就藏在这套机制里。
Linux 开发者追求最大化的 “效用函数”,并非传统经济学里的金钱收益,而是看不见的精神满足,以及在同行圈子里积攒的声望。有人会把这种动机称作 “利他”,但忽略了一点:对付出者而言,利他本身也是一种自我价值满足。依靠这套逻辑运转的志愿社群其实并不少见,我自己长期参与的科幻爱好者圈子就是很好的例子。和黑客社群不同,科幻圈很早就直白点明了 egoboo(简单理解就是刷圈内声望、收获他人认可),并将其视作所有人无偿产出内容、参与志愿运营的核心驱动力。
林纳斯把自己放在项目守门人的位置,绝大部分开发工作交由社区完成,同时持续维持项目热度,直到项目能自主运转,这套做法精准践行了克鲁泡特金所说的 “共识协作原则”。用这套近似经济学的视角看待 Linux 社区,我们就能看懂这份共识是如何落地的。
我们可以把林纳斯的这套玩法,理解成搭建了一个高效的 “egoboo 市场”:把每位开发者自我实现的诉求,和只能靠长期协作才能攻克的复杂目标牢牢绑定。我在 fetchmail 项目里已经验证,这套模式完全可以复刻,效果同样不错,只是规模小很多;甚至相比林纳斯,我实施这套思路时目标更清晰、流程更体系化。
不少人(尤其是本身不看好自由市场机制的人)会觉得,一群只在乎自身声望、自主行动、以自我为中心的人凑在一起,圈子必然四分五裂、各自划地盘、重复造轮子、藏私还互相敌视。但只要看一件事就能推翻这个猜想:Linux 配套文档种类之丰富、质量之高、内容之详实,完全超乎想象。
业内谁都清楚,程序员普遍讨厌写文档,那为什么 Linux 社区能产出海量完善文档?答案很明显:这套以声望(egoboo)为核心的自由激励机制,催生出大量利他、正向的贡献行为,效果远胜过财大气粗的商业公司专职文档团队。
fetchmail 和 Linux 内核两个项目都证明了一件事:项目带头人只要能妥善给其他开发者提供声望认可,就能借助互联网吸纳大量协作开发者,享受多人协作带来的红利,同时不让项目彻底乱成一锅粥。针对布鲁克斯定律,我提出一条对立的核心结论:
19.只要项目协调者拥有互联网这种高效沟通渠道,并且擅长用非强制手段统筹团队,那么聚集众人智慧的效果,必然远比单打独斗好。
我相信开源软件的未来,会越来越偏向吃透林纳斯这套协作玩法的人,也就是放下大教堂式封闭开发思路、拥抱集市模式的人。这并不是说个人独到的视野与过人天赋就不再重要;恰恰相反,未来开源领域的前沿创新者,一定是先靠一己之力拿出亮眼构想,再搭建起自愿参与的同好社群,把这份创意的价值无限放大。
这套趋势或许不只适用于开源软件,任何闭源厂商,都不可能调动起像 Linux 社区这般规模的人才力量来攻克同一个难题。就拿 fetchmail 举例,前后贡献代码的开发者峰值达到 800 人(早期 200 人,1999 年 600 人,2000 年 800 人),几乎没有哪家公司承担得起全额雇佣这么多人的成本。
到最后,开源生态之所以会占据优势,根源未必是 “协作在道德上更高尚”,也不是 “私有闭源囤积代码本身就是错的”(我和林纳斯都不认同这套道德评判逻辑);单纯只是在长期的演化竞争中闭源阵营注定落败——开源社区能投入到同一个问题上的资深开发者工时,比闭源厂商高出好几个数量级,完全不在一个量级。
-
现在我们有一个很好的案例 EGCS(Experimental GNU Compiler System,实验版 GNU 编译器系统,项目主页:http://egcs.cygnus.com/),它从多个维度验证了集市模式的可行性,参考价值甚至比 fetchmail 更高。
这个项目在 1997 年 8 月中旬正式对外发布,开发者明确表示,要把《大教堂与集市》早期公开文稿里的协作思路落地实践。当时大家觉得官方 GCC(GNU C 语言编译器)开发节奏停滞不前。在此之后长达 20 个月里,GCC 和 EGCS 两条分支并行开发,两个项目共享同一批互联网开发者、基于同一套 GCC 源码、使用几乎完全相同的 Unix 工具链与开发环境。唯一核心区别是:EGCS 主动采用我前文讲的集市式开放协作策略;而原版 GCC 依旧是典型大教堂模式——开发团队封闭、版本发布周期极长。
这几乎是一次完美的对照实验,最终结果差距极其明显。短短几个月,EGCS 在功能层面全面反超:代码优化的效果更好,对 Fortran、C++ 语言的支持也完善得多。不少开发者反馈,EGCS 的每日开发快照,稳定性甚至比 GCC 官方最新稳定版(stable verison)更好,各大主流 Linux 发行版也纷纷切换为 EGCS 作为默认编译器。
1999 年 4 月,GCC 的官方主办方自由软件基金会(FSF)解散了原有封闭开发小组,正式把 GCC 项目的管理权全权移交 EGCS 项目统筹团队。
-
克鲁泡特金的观点与林纳斯定律,顺带引出了社会组织控制论层面更深一层的议题。软件工程里有一条经典民间定律恰好能说明其中一点,那就是康威定律(Conway’s Law)a。它的通俗版本是:“四组人一起做编译器,最后产出的必然是四趟编译架构。”而原始定义的适用范围更广:“任何设计系统的组织,最终产出的架构一定会复刻自身内部的沟通结构。” 我们可以说得更直白一点:协作方式决定最终成果,甚至可以总结为:流程塑造产品。
由此就能注意到,开源社区的组织形态和运行逻辑在各个层面都是自洽的。网络贯穿所有环节、无处不在:不光是互联网线路,参与开发的所有人本身也构成一张分布式、松耦合、点对点的协作网络,具备多重冗余,就算局部出问题也能平稳降级运行。不管是线上网络还是人的协作网络,一个节点价值高低,只看其他节点愿不愿意和它协作。
这种对等无层级的特性,是社区能爆发出超高产出的核心关键。克鲁泡特金关于层级权力的论述,还能通过“SNAFU 原则”a进一步延伸解读:只有地位平等的人之间,才会存在真实有效的沟通;下属向上级报好听的谎话,往往比实话更容易得到好处。富有创造力的团队协作完全建立在坦诚沟通之上,一旦存在上下级权力压制,协作效率会大打折扣。开源社区基本不存在这种层级束缚,两相对比,我们能清晰看到权力层级会带来多大代价:漏洞变多、开发效率下滑、大量创新机会白白流失。
除此之外,根据 SNAFU 原则,在自上而下的集权式组织里,决策者会一步步脱离真实情况——传达到管理层的信息,慢慢全变成粉饰过的好话。这套现象在传统开发团队里随处可见:基层员工天然会隐瞒、淡化、无视项目里的各类问题。当这种欺瞒的流程固化到开发全流程里,做出来的软件只会一塌糊涂。
a. 康威定律(Conway’s Law):由计算机科学家梅尔文·康威(Melvin Conway)于 1967 年在其论文 How Do Committees Invent? 中提出,核心观点是“系统架构会反映其开发组织的沟通结构”。通俗版常表述为“沟通方式决定产品形态”。
b. SNAFU 原则(SNAFU Principle):SNAFU 为 "Situation Normal: All Fouled Up" 的缩写,源自美军俚语,意为“一切正常,但全搞砸了”。在软件工程语境中指“层级组织中真实信息自下而上传递时会被层层过滤扭曲,最终决策者所获信息严重偏离实情”。该原则揭示了权力层级对有效沟通的破坏性。