Skip to content

《大教堂与集市》 王木头解读

《大教堂与集市》| 王木头解读

关于作者

埃里克·雷曼是软件开源运动和黑客文化的代言人、宣传家、大使。他的研究很好地解释了分布式开源开发模式,Linux和互联网的成功已经证明这种模式非常有效。他自己的开源软件项目包括互联网上使用最广泛的电子邮件传送程序之一。

关于本书

本书囊括了作者被业界称为“五部曲”的核心著作:“黑客圈简史”、“大教堂和大集市”、“如何成为一名黑客”、“开拓心智层”和“魔法锅”。其中最著名的当属“大教堂和大集市”。本书在开源运动中的地位相当于基督教的《圣经》,用黑客们的话说,这是“黑客藏经阁”的第一收藏。

核心内容

通过这次解读希望给你介绍开源软件思想到底是什么,更重要的是希望通过作者这个发起人和亲历者,为你近距离地呈现一个自底向上开发的成功案例,帮助你理解开源软件以及开源软件背后的众创思想。

你好,欢迎每天听本书,我是王木头,今天为你解读的书是《大教堂与集市》。

你别被书的名字误导啊,这本书既不是讲大教堂的,也不是讲集市的。作者是用大教堂和集市这两个具体的形象,来代表两种不同的软件开发模式。大教堂模式代表着自顶向下的模式,有一群精英进行顶层设计,按照计划去完成任务。集市呢,代表着是自底向上的模式,没有一个绝对主导核心,靠的是普通个体们的自组织,一起去完成复杂的任务。

这本书的作者是埃里克·雷曼,他是非常有名的程序员,是软件开源运动的发起人。软件开源可以说是集市开发模式的最佳实践之一,这本书也被誉为是开源运动的《圣经》。

开源软件,简单地说,就是把软件的源代码公开,让更多人参与进来,共同去创造一个复杂软件。开源软件中,最成功的就是Linux操作系统,它持续更新了30年,涉及上千个国家和公司,有几万人参与,这本书的作者就是Linux开源项目的早期参与者。

Linux可以说是现在最成功的操作系统之一,很多网络服务器的操作系统都是Linux。不只是Linux,我们现在互联网的很多基础设施,都是由开源软件构成的。比如Apache web服务器、MySQL数据、Chromium浏览器等等,你可能都没有听说过,但是你只要连接了互联网,你就一定使用过它们。

大多数人听到开源软件,可能还是觉得这就是一群程序员的爱好,其实开源软件背后共同创造的思想,现在已经成为了一种互联网的文化基因。就比如B站里面就有很多自发的众创内容。一个UP主看到了某个视频,觉得某些细节比较有趣,就把原视频进行剪辑整理,变成一个新的鬼畜视频。这个鬼畜视频,被其他人看到之后,又会有自己的想法,对这个鬼畜视频重新创作,把自己的想法增加进去。最后,经过很多人的共同创作之后,这个视频成功出圈,从一个小众文化变得开始在互联网上流行起来。

现在比较流行的同人文化也一样,同人创造者从其他的小说、电视剧或电影中找到自己喜欢的角色,用这些角色创作更多新剧情。还有很多游戏MOD,MOD就是英文单词“修改”的缩写,它也是一种共创文化。一些游戏的发烧友,不只希望玩游戏,他们还会修改游戏,让游戏有更多的剧情或是更有挑战,这样修改过的游戏就叫做MOD游戏。很多游戏能够经久不衰,就是因为它有很多MOD版本,增加了玩家的新鲜感,比如《上古卷轴5》,就被誉为MOD版本最多的游戏,从2011年发布到现在还经久不衰。还有像现在非常流行的游戏《DOTA》和《英雄联盟》,它们最开始的源头就是对《魔兽争霸》游戏的修改。

所以,我今天为你解读这本书,不只是希望给你介绍开源软件思想到底是什么,更重要的是希望通过作者这个发起人和亲历者,为你近距离地呈现一个自底向上开发的成功案例,帮助你理解开源软件以及开源软件背后的众创思想。

接下来我将会通过两部分内容帮你解读本书。

在第一部分,我们先来看看到底什么是开源。如果只是听名字的话,会让人误解,开源是不是把软件的源代码公开出来就行了。这好像就是说某个人或是某个公司比较大公无私,愿意把自己的劳动成果分享出来。其实开源是一种比较特别的软件开发模式。什么意思呢?为了方便你理解,还需要介绍一些关于黑客的背景知识,开源软件的思想就来自于黑客精神。

在前面我一直称呼这本书的作者是程序员,其实如果只是这么称呼他的话,是不太准确的,更准确的称呼应该是黑客。他名字的缩写ESR,在程序员界也已经成了一个专有名字,只要提ESR就特指他,相当于他的黑客编号。

这里说的黑客不是那些电影里面演的,专门非法破解别人系统的那些人。那些人严格地说应该是骇客,惊涛骇浪的骇,英文是cracker。这里说的黑客,英文是hacker,这个词一开始和计算机完全没有关系,只在麻省理工的一个小圈子里被使用,专门指那些喜欢用模型研究火车信号、调度和动力系统的人。

后来麻省理工购买了计算机,这群人就被计算机吸引过去了,所以黑客这个词就被带到了程序员文化里。它专门指那些,对计算机技术有着强烈兴趣的人。解决问题就是他们最大的兴趣,为了解决问题愿意学习和研究,而且没有功利目的。你可以理解为黑客是一群有着理想主义的计算机理工男。

慢慢地黑客们就形成了自己独特的价值观,比如,对计算机的访问都应该是不受限制,任何人都有动手尝试的权利,所有的信息都应该可以自由获取,不要迷信权威,等等。再后来,开源的思想形成之后,黑客精神的价值观就具象成了,编写和维护开源代码,积极参与开源社区。

最开始的时候,计算机还都是学校和大型机构里才会有的研究工具。当时黑客的人数虽然不多,但是在这些地方使用计算机还是比较自由的。到了上个世纪80年代,计算机的商用价值被发掘了出来,再加上个人计算机也开始普及起来,越来越多企业开始进入计算机行业。这种情况让计算机行业迅速扩大,不论是软件的种类,还是使用的方便程度都大大增加。

但是这也给黑客们带来了巨大的困扰。因为企业为了保护自己的商业利益,只提供编译好的软件,不提供源代码。这就与黑客的价值观有了重大冲突。尤其是操作系统软件,操作系统软件是硬件和应用软件的连接器,如果无法访问操作系统的源码,会极大地限制黑客的自由。形象点说啊,在操作系统之上进行编程,就相当于用乐高拼接各种东西,操作起来虽然简单,但是不自由,乐高提供什么模块就只能用什么。如果黑客可以访问操作系统源码,那就不是用乐高积木拼积木了,而是手上有了一台注塑机,想做什么模块就做什么模块。

这个时候,在黑客里面就有一个人站出来了,他是理查德·斯托曼,他名字的缩写是RMS,和作者的ESR一样现在RMS也是一个专有名词了,特指理查德·斯托曼。

理查德·斯托曼发起了一场运动,号召黑客们一起做一个源代码完全开放的操作系统,叫GNU。GNU,其实就是把UNIX系统重新实现一遍,而且保证不使用任何有版权的代码,代码全部公开。

这里提到的UNIX就是一个操作系统,而且还是公认最伟大的操作系统。一个程序员可以不懂得如何使用微软的Windows系统,但是如果不懂UNIX那么就不是一个合格的程序员。像Linux、苹果公司的操作系统iOS和MacOS,还有绝大多数的服务器,都属于UNIX体系。可以这么说,如果Windows操作系统突然消失了,整个互联网世界的运行可能会变得比较麻烦,但是如果UNIX消失了,那么整个互联网世界就会崩溃。

当然,理查德·斯托曼做的可不只是把GNU的代码公开,他还把原来黑客精神中追求自由和开放的价值观具象成了一个概念,Copyleft。版权不是Copyright吗,其中的right既有权力又有右边的意思,GNU的目的就是去版权化,把代码全部公开,所以就用left代替right,称为Copyleft,和Copyright是反义词,表示公共版权。

什么样的软件算是Copyleft呢?理查德·斯托曼也给出了基本原则,叫做自由软件原则。注意啊,这里是自由软件,还不是开源软件,后面会讲到这两个概念的具体差别。

自由软件原则的核心,不只是保证软件的代码公开就完了,它还要保证这种开放是具有传染性的。重点就在这个传染性上。什么意思呢?比如,你开发了一个软件,代码也全部免费公开了,这就代表其他人就可以随意下载和修改你的代码。

如果你没有声明遵守自由软件原则,那么别人修改了你的软件之后,他的修改版本是可以不公开源码的,甚至还可以用这个修改版本收费和盈利。如果你声明你的软件遵守自由软件原则,那么你代码的开放性就具有传染性了,不论是别人修改了你的代码,还是只使用了一部分你的代码,他也必须继续遵守自由软件原则,必须把自己的代码完全公开。这就保证了,一个软件是自由软件,那么它的后续所有版本都必须是自由软件,必须是公开代码。如果违反了,不只有法律责任,还要受到其他程序员们的声讨和鄙视。

基于这个思想,理查德·斯托曼就开始和其他黑客大牛开发GNU了。到了上个世纪90年代初,绝大部分工作也都完成了,唯独在操作系统内核的开发上卡壳了。操作系统内核,是所有操作系统的基础,几乎所有硬件和软件的调度都需要它来完成,所以特别复杂,开发难度最大。

现在我们经常听说,我们中国开发一个属于自己的操作系统特别难,这个“难”说的就是操作系统内核特别难。就算是Google这么大的公司,要开发一个手机操作系统,也就是安卓,也不敢随随便便开发一个新内核,所以选择了Linux的内核。

就在理查德·斯托曼这些黑客大牛们为内核发愁的时候,一个草根英雄忽然出现了。这就是Linux的创始人,林纳斯·托瓦茨。1991年,他还是一名芬兰的大学生,当时为了学习操作系统,编写了一个非常原始的操作系统内核,并且发布到了网上。这就是Linux内核。让人想不到的是,仅仅2年之后,Linux在稳定性和可靠性上已经和很多商业内核不相上下了。

一群黑客大牛很多年搞不定的事情,最后竟然让一个大学生搞定了,让人非常意外。因为Linux已经满足了GNU的需求,而且林纳斯也让Linux遵守了自由软件原则,所以GNU放弃了正在开发的内核项目,而是选择使用Linux内核。这个时候一个完全开源的操作系统就诞生了。

为什么林纳斯这样的小人物最后反而战胜了黑客精英,完成了他们都没有完成的任务呢?一个重要的原因就是黑客精英们没有把“集市”模式贯穿彻底。

他们虽然已经把源码公开了,让更多的程序员可以自由使用,但是他们在开发内核的方式却选择了“大教堂”模式,自顶向下地设计和开发。

当时开发GNU内核的团队,虽然有自由软件的理想,但是当时他们开发软件的模式还是传统的模式。内核开发团队召集的都是精英黑客,组成一个像特种部队一样的小团队,互相精心协作,紧密互动。但是因为内核的复杂性特别高,所以总是无法保证稳定性和可靠性。不是这里出问题,就是那里有bug。这里一个问题解决了,解决这个问题的动作,可能在别的地方产生出10个新bug。总之就是,本来希望一个精英团队,自顶向下地把内核设计和开发出来,但是因为内核的复杂性,距离开发完成遥遥无期。

而林纳斯的Linux内核,就完全不是这样的开发思路,他自己是大学生不是精英,他也没有专门找精英,而是通过互联网,把大量使用他源码的志愿者组织了起来。在质量方面,也没有严格的标准,也没有强力机构来管理,他就是坚持每周发布新版本。发布了新版本后,他在接下来几天里面获取上百个用户的反馈和修改。林纳斯自己也不做顶层设计,他只是创造了一个像物竞天择一样的机制,把靠谱的修改筛选出来,然后在下一轮发布时,更新到新版本中。

本书的作者当时也参与到了Linux内核开发中,在亲身感受了林纳斯的这种开发模式后,觉得非常惊讶,一群松散的乌合之众竟然完成一个精英团队都完成不了的任务。于是,作者就想亲自实践一下,看看Linux的这个开发模式到底是一个偶然,还是一个通用的模式。于是他就用同样的模式,开发了一个电子邮箱客户端软件,非常成功。这个时候,他意识到了,林纳斯的这个模式,将会是一个新的开发模式。

于是作者就成为了这个模式的布道者,后来为了和自由软件做区分,作者和其他支持这种开发模式的人,把这个模式称作开放源代码,也就是现在说的开源。

在这些人眼中,自由软件更像是一场社会运动,提倡开放和自由的价值观。而开源是一种由底向上的、自组织式的开发方法。这个方法与自由软件非常匹配,因为只有将源码公开,才能让更多的人参与进来。

通过前面这些介绍,我想你已经了解了开源不只是把代码公开就行了,它还需要让更多的人可以自发地组织和协作起来。不过,只是了解了这些的话,还是有些问题无法解释。

对于软件,如果把源代码公开出来了,那就相当于是让软件免费了。自己辛辛苦苦的劳动成果,别人可以免费使用,这样的行为应该是不可持续的。但是,现实情况却不是这样,开源不是某些程序员个人的行为。个人行为的话还好理解,这个人可能就是比较高尚,希望可以造福更多人。

而现在很多大公司都在积极参与开源项目,即使是微软、苹果这些注重版权,比较封闭的公司,也都在很多开源项目上积极参与,甚至会主导一些开源项目。开源既然没有商业性,这些人和公司愿意参与的动力是什么呢?

在这本书里,作者给了一个非常重要的洞察,那就是软件的价值在于它的可复制性。什么意思呢?一般我们见到的商品或是有价值的东西都是有实物的。我买了你就没有了,我把这个东西交换给你我就没有了。也就是说,这些物品是有稀缺性的。而软件没有这个问题,软件很容易被复制,成本基本为0。我把一个软件交给了你,我并不会失去这个软件。

你可能会说,这有什么问题吗?有,你想,我们人类现在的组织形式,主要还都是为了适应那种“你有了我就没有”的稀缺性。就比如,一个人的地位和权力,某种程度上取决于他所占有的资源,因为占有的这些资源都具有稀缺性。

而软件就没有这种稀缺性,在这样的背景下,人会以什么样的形式进行组织呢?在书里作者举了一个例子,印第安人里面有一个部落,他们有一个特殊的风俗叫做散财宴。在一些重大的庆祝场合,宴会的主人为了彰显自己的地位,会给来参加的客人发礼物,给的礼物越多越贵重,越是可以显示出自己的地位。如果在宴会上有竞争者,那么还会出现用炫富的方式来进行PK的情况,看看谁会给出更贵重的礼物。

这种模式下,表现一个人地位的形式就变了,不再是你占有了多少东西,而是你赠予了多少东西。这个模式,对于软件来说就非常合适,因为软件天然就不具有稀缺性,很难像实物一样被独占。所以才会有黑客提出自由软件的想法,因为黑客或者说程序员,想要彰显自己的地位,就不能靠自己占有了多少软件,而是要看他赠予了多少,或者说对开源软件贡献了多少。贡献得越多,地位越高,越受尊敬。

黑客追求自由和开放的精神可以说就是这种模式下的产物。在这种模式下,一个程序员实现自己价值的方式,就从原来的交换经济变成了礼物经济,从原来的控制变成了赠予。

而开源软件能够做成,它其实就是顺应了这个趋势,对这种礼物模式进行了认可和规范。

首先它放弃了私有版权,选择了公共版权,也就是前面讲的Copyleft,无法通过独占软件而进行盈利。然后呢,它还特别注重保护参与者的声誉。在礼物文化中,无私地赠予其实并不真的是无私,除了自己实现了某个功能有成就感之外,更重要的是可以在同行中获得声誉。

就比如,如果你给Linux内核贡献了1%的代码,那么在程序员界,你一定是顶级大牛,在别人眼中你可能比微软的首席程序员都要厉害。还有,现在最大的开源软件社区是GitHub,任何人都可以在上面发布自己的开源项目,也可以参与别人的开源项目。所以很多公司和猎头招程序员,除了看你的简历,就是看你的GitHub页面,看看你都参与过哪些项目。

不只是这样,一个程序员在找工作的时候也会通过开源项目来评价目标公司。如果这个公司在开源项目上投入的不多,那么这家公司就是不会赢得程序员尊敬。在2000年左右的时候,有一款叫做《红色警戒》的游戏特别火,在2020年6月,这款游戏在开源社区GitHub上公开了源代码。因为这款游戏的源代码编写的特别规范,还引来了很多程序员的围观和赞赏,称这个游戏的代码简直是艺术品。

所以在开源软件中,所有权不是重点,声誉才是重点。也正是因为这样,几乎所有的开源项目都会特别维护参与者的声誉。就比如参与开发的人,他可以把自己的名字、邮箱写到文档或代码的注释中。而且,其他参与者修改了你的代码,只能继续追加自己的姓名,不能删除你的姓名。如果随意删改参与者姓名那是会遭到程序员集体声讨的。

通过对参与者声誉的认可和保护,这相当于解决了个人参与开源项目的动力问题。但是一个开源项目,毕竟是要解决一个复杂问题的,比如操作系统内核。你看啊,不同的参与者参与进来了,他们面对的问题和需求都不一样,每个人都有自己的想法,最后会变成一盘散沙。

这就很像,你要想和很多人一起创作一本网络小说,参与创作的人,有的人喜欢男一号,有的人喜欢男二号,有的人喜欢看主角扮猪吃虎,有的人喜欢看主角升级打怪。如果什么也不管,最后这部小说一定是没有主线,注定是一部烂书。这也是很多打着开源名头,做众创内容容易出现的问题。

像是Linux内核这样的开源软件,虽然是公共版权,谁都可以修改,但是并不代表谁都可以对Linux内核负责。对Linux内核负责的,一直都是林纳斯。当然,最开始只有他一个人,后来慢慢组成了一个以他为核心的团队。

林纳斯他们负责什么呢?负责选择接受哪些修改,拒绝哪些修改。具体做法是这样的,假如说你想修改Linux内核,你不是直接就在源代码上进行修改,而是你要把源代码下载到自己本地然后修改。你的修改不会影响服务器上的源代码。当你修改完成之后,你觉得还比较满意,也没有什么明显的问题,这个时候你可以把自己的修改版本进行提交。林纳斯和他的团队会审核你的提交,判断是不是接受。如果接受的话,那么就会把你的修改合并到他们的源码中。

当然也有可能不接受,不接受也不代表你的代码有问题,有可能你修改之后是为了让代码可以用在手机上,而林纳斯他们希望让Linux继续在PC上运行,所以就没有接受你的提交。

不过没有关系,你修改之后的代码,会以一个分支继续存在。因为Linux遵守的是自由软件原则,也就是说开源具有传染性,所以你的这个分支也必须开源,可以由别人修改。这个时候,你就成了这个分支的负责人。如果别人对你的分支进行了修改,让你的代码能更好地在手机上运行,你就可以把它们并入到你的源码中,更新自己的版本。

这里需要注意一下,就算是你创建了某个开源项目,你也不一定一直就是这个项目的负责人。这就有些像是贴吧,你新建了某个贴吧,你不一定一直是贴吧的吧主,而是对贴吧贡献最大的人会成为吧主。

当然这也不是绝对的,而是要看你在创建这个软件时遵守了什么样的许可协议。如果是前面讲的自由软件的许可协议的话,就有可能更换负责人。还有一些其他的许可协议,比如规定你可以修改代码,也可以使用代码,但是不能在商用环境下使用。还有一些许可协议规定的更细,规定了在某些领域可以使用,或者是多少人之下可以使用等等。

总之,开源软件文化发展到现在,许可协议已经有很多版本了,非常复杂。而理查德·斯托曼提出的,也就是自由软件的许可协议是最纯粹的开源协议,其他协议都是在某方面做了一定的妥协,方便适应不同的场景。

所以,开源软件,公开源代码只是第一步,开源协议才是重点。当然,这部分内容就不是我们这次解读的重点了,感兴趣的话你可以自己去搜索相关内容。

讲到这里,我想你应该了解了,开源软件并不是把软件公开就行,它其实是用开源协议创造了一个自由演化的环境。不论是开源软件还是其他共创内容,参与的个人,就像是在生物演化中的生物个体。生物个体会发生变异,参与到共创内容来的个体也会变异,他们自己的兴趣其实就是变异。而且共创个体的变异和生物个体的变异一样,也都没有方向性,非常随意。如果没有自然选择的话,任何有价值的变异都会被稀释掉。

这也是开源项目和大多数众创内容不同的地方,开源项目有自己的负责人,负责人的选择就相当于生物界里的自然选择,让整个开源项目都有了演化的方向。不只这样,参与者发生变异,负责人进行筛选,这还只是第一层演化,还有第二层演化。那些没有被并入到主干项目中的源码,会变成分支,按照自己的方向继续演化。最后到底是主干项目可以胜出,还是分支项目可以胜出,也会在整个互联网大环境下进行筛选,这是第二层演化。而在所有的两层演化中,获取声誉就像是生物个体获取能量一样的底层动力,源代码就是记录个体变异的DNA,让变异可以被积累。

开源软件文化,本质上就是程序员们在互联网上创建和维护的一个演化环境,让所有的参与者和开源项目,不论是普通参与者还是项目负责人,不论是主干项目还是分支项目都能在同一个环境下进行演化。

撰稿、讲述:王木头脑图:刘艳导图工坊

划重点

1.开源软件文化来自于黑客精神,不只要求开放源代码,还要求开放具有传染性。

2.开源软件其实是用开源协议创造了一个自由演化的环境。不论是开源软件还是其他共创内容,参与的个人,就像是在生物演化中的生物个体。