第七章 开源
一
1983年秋天,麻省理工学院人工智能实验室。
理查德·斯托曼站在一台施乐9700激光打印机前面。打印机卡纸了。这不算什么新鲜事——这台打印机是实验室的共享设备,十几个研究员排队用,卡纸频率和波士顿下雪差不多。
斯托曼把卡住的纸抽出来,然后做了一件事。
他打开打印机的固件界面,想加一段代码——一段让打印机在卡纸时自动通知队列里所有人的代码。他在MIT写了十年程序,改这种bug对他来说只需要一个下午。
但他找不到源代码。
施乐没有随机器提供源代码。斯托曼打电话给施乐,对方说:这是商业机密,不能给你。
斯托曼把电话挂了。
他后来在《GNU宣言》里写了那天的事。大意是:一台打印机,硬件是我买的,纸是我装的,电费是MIT付的——但我想让它多做一件事,我需要一个陌生人批准。那个陌生人甚至不认识我,他只是恰好在一家叫施乐的公司上班。
斯托曼做决定不需要很长时间。他在那天发起了GNU计划——GNU’s Not Unix,一个递归缩写,意思是”GNU不是Unix”。目标是:写一个完全自由的操作系统。不是”免费”的自由——是”你可以看代码,可以改代码,可以把你改过的代码分发给别人”的自由。
1985年,他成立了自由软件基金会。1989年,他发布了GPL——通用公共许可证。
GPL的文本很枯燥,但它的逻辑像一颗病毒。大意是:如果你用了GPL保护下的代码,你的代码也必须用GPL发布。你不能把它锁起来,你不能在它的基础上做一个闭源产品卖给别人。一旦被GPL感染,你的代码也是自由的。
斯托曼管这叫”copyleft”——和”copyright”对着干。他后来说:“Copyleft不是反对版权。它是用版权法来保护用户的自由,而不是保护开发商的特权。”
律师们花了很长时间才理解GPL在说什么。程序员们花的时间更短。因为他们读代码比读法律快。
二
1991年8月25日,芬兰赫尔辛基。
一个叫林纳斯·托瓦兹的21岁大学生,在comp.os.minix新闻组发了一封帖子。
帖子很短。标题是”在minix里你最想看到什么?“,正文大意是:大家好,我在做一个(免费的)操作系统——只是个业余爱好,不会像GNU那么大、那么专业。我很好奇大家想要什么功能。
他用了括号,把”免费的”框起来,像是怕人当真。
他不知道,那封帖子会在接下来三十年里被反复引用。不是因为内容有什么特别——是因为发帖的人是林纳斯·托瓦兹。
林纳斯那年在赫尔辛基大学读计算机科学。他刚买了一台386电脑,装了Minix——安德鲁·塔能鲍姆教授写的一个教学用操作系统。Minix的源代码是公开的,但它的许可证不允许自由修改和重新分发。
林纳斯觉得Minix很好,但不够好。所以他开始自己写。
他从终端仿真器开始——一个让电脑能连接到学校Unix服务器的程序。写着写着,他觉得这个东西越来越像一个操作系统的内核。内存管理、任务调度、文件系统——他把能加的都加了进去。
1991年9月,他把0.01版内核发到了网上。文件名是”linux-0.01.tar.gz”。
“linux”这名字不是他起的。是他的朋友阿里·莱姆克——那个帮他建FTP服务器的人——觉得”Freax”太难听,擅自在服务器上建了一个叫”linux”的目录。林纳斯后来默认了。
0.01版本很粗糙。只能跑在386上,只支持芬兰键盘布局——因为林纳斯自己用的是芬兰键盘。驱动只够让他自己的硬盘和显示器工作。
但代码是公开的。
任何人都可以下载。任何人都可以改。任何人都可以给林纳斯发一个补丁。
然后补丁开始涌入。
不是十个。不是一百个。是几千个。程序员们从全世界各个角落往赫尔辛基的一间学生公寓里塞代码。有人加了SCSI驱动,有人修了TCP/IP协议栈,有人补了ext2文件系统。
林纳斯没有架构师背景,没有项目管理经验,没有正式的软件开发流程。他的工作方式很简单:看补丁,决定要不要接受,然后发布新版本。他把Linux内核的开发叫做”仁慈的独裁者”模式——他做最终决定,但他只接受”好代码”。
让足够多的眼睛审视,所有bug都会变浅。这句话后来被埃里克·雷蒙德写进了他的论文。但在雷蒙德写论文之前,林纳斯已经用代码证明了它。
三
斯托曼有GNU,但没有内核。
GNU计划从1984年就开始了,到1991年,他们已经写出了编译器(GCC)、调试器(GDB)、编辑器(Emacs)、Shell(Bash)——除了内核以外的所有东西。斯托曼对一个叫”Hurd”的内核项目投入了多年,但Hurd的设计过于复杂,进展缓慢。到1991年,Hurd仍然不能稳定运行。
林纳斯有内核,但没有GNU。
Linux只是一个内核。没有编译器,你无法编译它。没有Shell,你无法和它对话。没有Emacs,你无法在上面写代码。林纳斯需要GNU的工具链来编译Linux,而GNU需要一个能跑的内核来让所有工具在真正的机器上运转。
两个人的东西拼在一起——GNU/Linux——变成了人类历史上最大的协作工程。
不是公司组织的。不是政府资助的。没有项目经理。没有截止日期。没有KPI。只是一群素不相识的人,因为一个芬兰大学生的”业余爱好”和一个美国激进分子的”自由宣言”,开始往同一个东西里塞代码。
斯托曼坚持它应该叫”GNU/Linux”。林纳斯觉得叫”Linux”就够了。两人从1992年起就为此争论不休,一直到今天都没有达成一致。
但他们不需要达成一致。他们甚至不需要彼此喜欢。他们只需要彼此的东西能跑起来。
四
1997年5月,德国维尔茨堡,Linux大会。
埃里克·雷蒙德走上讲台。他是个自由软件运动的老兵——写过fetchmail,参与过GNU项目,被斯托曼的GPL感染过,被林纳斯的开发模式震惊过。他想说清楚一件事:为什么Linux能成功。
他的论文叫《大教堂与集市》。
“大教堂”是微软的模式——少数精英在封闭的房间里造软件,像建造一座中世纪大教堂。一砖一瓦,有图纸、有监理、有封顶仪式。用户只能在软件发布之后才能看到成品。
“集市”是Linux的模式——成千上万的人各自为战,没有中央计划,没有架构师签字。代码就是审查,bug报告就是需求文档。“让足够多的眼睛审视,所有bug都会变浅。”
雷蒙德在论文里承认,他一开始也认为”集市”不可能做出高质量的东西。但Linux改变了他的想法。
那篇论文没有发表在任何学术期刊上。雷蒙德把它发在了自己的网站上。然后它开始传播——先是在邮件列表里,然后在技术大会上被人打印出来传阅,最后传到了硅谷。
1998年1月22日,网景公司。
几个高管坐在会议室里。网景刚输掉了浏览器战争——微软的IE捆绑在Windows上,网景的市场份额从90%跌到了不到50%。他们需要在微软面前做一件微软绝对学不了的事。
有人递过来一份打印件——埃里克·雷蒙德的《大教堂与集市》。
高管们读了。然后他们做了一个没人想到的决定:把网景Communicator浏览器的全部源代码公开。
不是卖,不是授权,是公开。任何人可以看,可以改,可以重新发布。
网景的CEO吉姆·巴克斯代尔在新闻发布会上说:“我们在做一件微软永远不会做的事。”
他没有说错。
一个月后,一个叫克里斯汀·彼得森的女人在帕罗奥图的一场会议上提出了一个新词:“Open Source”——开源。她后来说,她想找一个比”Free Software”听起来不那么像共产主义、不那么容易让企业董事会紧张的说法。
这个词迅速取代了”自由软件”。不是因为含义更精确——是因为它能让CEO们在董事会上说出口。
五
1998年10月,微软总部,雷德蒙德。
一份内部备忘录在微软的工程师和高管之间流传。备忘录的作者是微软的工程师文森特·瓦拉,他花了几个月时间分析开源软件对微软商业模式的威胁。
备忘录的标题平淡无奇——“开源软件”——但它的绰号后来变得家喻户晓:Halloween Documents,万圣节文档。
因为它在万圣节前后被泄露到了网上。
瓦拉在文档里写了什么,本质上不难概括。大意是:开源软件对微软构成了一种与传统竞争对手完全不同的威胁。传统的竞争对手——IBM、Oracle、网景——你可以用更好的产品、更低的价格、或者更聪明的市场策略来对付。但开源产品没有价格,没有公司,没有CEO。你怎么跟一个不收钱的东西竞争?
“Linux代表了微软在服务器操作系统领域最严峻的威胁。“文档里还提到,FUD策略——恐惧、不确定、怀疑——是应对开源最有效的手段:让企业客户相信,运行一个没有商业公司支持的免费操作系统是有风险的。
1998年11月,这份备忘录被匿名人士发布到了网上。
全世界都看到了:全球最强大的软件公司,正在害怕一个芬兰大学生的业余爱好。
瓦拉后来离开微软,成为开源社区的活跃分子。他在2012年的一篇博客里写:“我写万圣节文档的时候,以为自己在帮微软制定策略。十年后我才意识到,我实际上是在帮开源社区理解自己的威胁——因为我把微软的恐惧,翻译成了他们能读懂的语言。”
六
2001年,微软CEO史蒂夫·鲍尔默在接受采访时被问到对Linux的看法。他想了想,说了一个词。
“Cancer.”——癌症。
鲍尔默的意思是说,GPL的病毒式许可条款像癌细胞一样扩散——如果你用了一段GPL代码,你的整个产品都必须开放源代码。商业模式会被吃掉。
这句话变成了自由软件社区接下来十年的T恤图案。但不是鲍尔默在意的方向——他们把它当勋章戴。
同一年的秋天,IBM宣布投资10亿美元支持Linux。
蓝色巨人——那个几十年前定义了”专有系统”的公司——把一个自由操作系统当成了自己的服务器平台。不是做慈善,是做生意。IBM在Linux上省掉的每一分操作系统许可费,都变成了他们的服务器利润。
斯托曼和托瓦兹在同一件事上走向了两个方向。
斯托曼继续他的意识形态战争。2000年代,他开始把DRM、软件专利、封闭式SaaS全部纳入他的攻击范围。他的演讲越来越像一位先知——激进的、不妥协的、有时候让人不舒服的先知。2019年,他因为一系列争议言论被自由软件基金会除名。他突然发现,自己创立了这场运动,然后又和它彻底决裂。
林纳斯继续管理Linux内核。他骂人,他写技术邮件只用大写字母,他对任何不过关的代码说”这是垃圾”。但他发布的每一个内核版本都在驱动更多服务器、更多手机、更多嵌入式设备。到2010年,全球前500台超级计算机全部跑Linux。安卓——Google的手机操作系统——用的是Linux内核。全球超过30亿台设备,心脏里跳着他学生时代写的代码。
这个故事有一个没人能预料的结局。
二十年后,2018年,微软——那个在1998年把开源列为”最大威胁”的公司——以75亿美元收购了GitHub,全球最大的开源代码托管平台。发布会上,CEO纳德拉在幻灯片上打出四个字:“Microsoft loves Linux。“不是讽刺。Azure上超过一半的虚拟机跑的是Linux,微软自己的.NET和VS Code全部开源了。
埃里克·雷蒙德在那天的博客上写:“我1997年写的论文,最后的赢家不是我预想的那个。“大教堂收购了集市。但集市也改变了教堂。开源吃掉世界的方式,不是推翻帝国——是让帝国发现自己需要开源。斯托曼从1983年开始打的那场战争,他输了。他赢的那部分,他自己不承认。
1983年,斯托曼因为一台打印机的源代码被锁起来,发起了GNU。三十五年后,微软说他们爱Linux。一台打印机卡纸了,一个人想把bug修好,然后整个世界都变了。