当我们谈论开源时,很少谈论自由,尽管开源与自由同行。从 1998 年开源兴起时,我们就无法把开源和自由分割开来。因为它孕育于自由软件运动,自由使用、复制、修改、分发源码,其精神内核一直延续至今。“自由”,为何对开源如此重要?我们将依次用《开源,是背叛自由还是以退为进?》、《开放协作:赋予开发者的自由》、《商业自由:从边缘到核心贡献》三篇文章来回答这个问题,本文为第二篇。
自由共享的精神与开放协作的开发模式,像两条绳子拧成了一股,成为开源项目生存和发展的核心支柱,一直延续至今。开放协作,赋予了开发者参与开源项目最大程度上的自由。这种自由,在Linux 内核的开发上首次攀上了高峰。
一群极客的狂欢
Linux 内核第一次大规模吸引用户,是在 1992 年 1 月 0.12 版发布之后。尽管当时功能有限,但作为一款类 Unix 的操作系统内核,本身就已经具有相当大的优势,尤其是在 Unix 作为一款专有软件对外售价不菲时。
特别之处在于,设计者 Linus 开放了一个专门提交代码的站点。这意味着,除了核心小组的六个成员之外,开发者可以直接参与 Linux 内核的开发,自由地提交代码,以解决一些问题,或者实现一些功能。
Linus 经常把 Linux 内核的更新情况发布在 Minix 新闻组,这里聚集了一批 Minix 操作系统的铁杆粉丝。对一群热衷于技术的开发者来说 ,一个新的操作系统,确实存在致命的吸引力。 Linux 的用户数量迅速增加。
1992 年,使用 Linux 操作系统的用户已经近千人,其中大部分是热衷于技术的黑客高手。到了 1993 年,通过互联网参与内核修改和编写的开发者已经有近百个。1994年,伴随着 Linux 1.0 的正式发布,内核的开发也进入了良性循环。1995 年 3 月 1.2 版发布时,Linux 内核已经有了25万行代码。新杂志 《 Linux Journal 》的发行量达到了一万本。Linux 系统也能同时适用于英特尔处理器、DEC 的处理器以及 Sun 公司的SPARC处理器了。Linux 跨出了一大步。
几年以后, Linux 社区的开发者已经成千上万,他们依靠邮件列表以及彼此之间制定的规范进行联系和开发,自由提出功能需求,自由维护和升级。“一切工作都按部就班地进行,不用投票表决,不用组织拉票,更不用重新计票,反正大家都知道谁是活跃分子,谁是他们信得过的人。 ”在 Just for Fun:the Story of an Accidental Revolutionary 一书中,Linus 描述了这种协作方式。
在此之前,没有多少项目会把开发过程完全对外开放,让用户参与进来。比如在 GNU 工程的各项目开发中,贡献代码的往往只有少部分人,只有当新版本完善后才会对外公布源码,版本发布间隔的时间可能要几个月。对于社区的众多开发者来说,他们能做的仅仅是测试软件,提出问题或者功能需求,尽管这也很重要,不过参与程度极其有限。
在软件项目管理方面,当时流行的理论是布鲁克斯定律,即向项目添加开发人员只会导致进一步的项目延迟。该定律由 IBM System/360 系统之父 Fred Brooks 在 The Mythical Man-Month: Essays on Software Engineering 中首次阐明。布鲁克斯定律预测,一个拥有数千名贡献者的项目应该是一片片状、不稳定的烂摊子。
Linux 社区无疑是打破了这一理论。随着越多的开发者加入,Linux 逐渐成为一款高质量的操作系统内核。1996年,Linux 内核的全球用户量已经迅速增长到350万。在 Linus 看来,这一切都要归功于他的两个缺点:一是懒,二是因为喜欢占别人劳动成果的便宜。因为懒和喜欢占便宜,所以他把一些功能交给其他人开发,坐享其成。除了最终决定权属于 Linus 之外,其他开发者都是平等的,都可以增加系统功能。这也是“Linux 开发模式”的特别之处,没有局限于六个核心成员之间,而是邀请所有用户参与,集思广益。 《大教堂与集市》的作者 ESR 如此评价:Linux 是第一个有意识地成功利用整个世界作为其人才库的项目。
早期,软件用户多为具备编程能力的开发人员,因此,当 “自由软件之父”RMS 提出保护软件用户运行、复制、分发、学习、修改及再分发源码的自由时,实际上就是指开发者的自由。毕竟,普通用户可不关心软件供应商有没有提供源码。而 Linus 则用开放、协作的方式,进一步把开发者的自由扩大化、具体化了。对开发者这一角色而言,最好的自由不就是开发的自由吗?
这种自由,让每个贡献代码的开发者都成为项目的创造者,而不再是旁观者、局外人。本来是Linus 一个人的狂欢,最后变成了一群极客的狂欢。自由带来的热忱,推动了Linux 内核的成功。在众多开发者的协同开发下,截至 2021 年,Linux 内核 5.11 版本的代码量达到了 3034 万行。
ESR 正是从 Linux 内核的成功中受到启发,最后写下了著名的《大教堂与集市》一文,引起了众多软件企业的关注,从而掀起了轰轰烈烈的开源软件运动。Linux 成功的关键——开放协作的开发模式,就这样成为了开源协作模式的典型代表。
不自由的代价
Linux 内核不是第一个利用该模式进行开发的项目,但从项目热度、开放程度、协作深度,以及波及广度来看,产生的影响却是最大的。在20世纪90年代后期,越来越多的开源项目转而采用这一模式,星星之火已成燎原之势。
1997年,一群开发者因不满 GCC (GNU 编译器系统)缓慢且封闭的创作环境,组织了一个名为EGCS(Experimental/Enhanced GNU Compiler System)的项目。GCC 和 EGCS 是两个并行产品——两者都来自相同的互联网开发人员群体,都来自相同的 GCC 源代码库,都使用几乎相同的 Unix 工具集和开发环境。这些项目的不同之处仅在于 ,EGCS 有意识地尝试采用开放协作的开发策略,而 GCC 保留了一个原先的组织模式,开发组较为封闭,发布次数不频繁。
几个月之后,EGCS 版本在功能上大大领先,不仅能更好地支持 FORTRAN 和 C++,而且比 GCC 最新的稳定版本更可靠,主要的 Linux 发行版也都开始转向 EGCS。1999 年 4 月,自由软件基金会( FSF )解散了原来的 GCC 开发小组,正式将项目控制权交给了 EGCS 指导小组。
如果说 GCC 的教训还不够深刻,那 Mozilla 开源的历程或许能更好地归因开源的成与败。
网景公司是第一个将商业产品开源的企业。1998 年 1 月,网景公司宣布将浏览器套件开源,代号叫 Mozilla,并建立了专门负责该项目的组织,希望借助全球开发者的力量挽狂澜于既倒。彼时,它正与微软在浏览器市场激战正酣。微软攻势猛烈,将 IE 浏览器与 Windows 捆绑销售,并且免费提供,这使得曾经风靡全球的网景浏览器(Netscape Navigator)节节败退,尽管其市场占有率一度高达 90%。最后仍由 IE 浏览器占据了半壁江山。
然而事实再一次证明,不够开放、自由的开源项目,无法调动开发者的兴趣,无法吸引开发者广泛参与。一个开源项目没有了用户,就如同没有了生命,即便能够风靡一时,也终究会被时代抛弃。
网景公司公开的源代码是老旧的开发版本,存在诸多问题;Mozilla 使用了NPL许可证,这允许网景公司将后续版本作为专有软件发布,而其他人却不可以;源码还混入了很多非自由软件的代码;Mozilla 不接受公司外部开发者的代码,仅靠公司内部人员维护。其中种种,让网景公司负面缠身。这种遮遮掩掩、重内排外的开源方式,完全背离了自由共享、开放协作的开源精神。在 Linus 看来,网景公司不过是提供了一大堆源代码而已。
彼时,ESR 等开源倡导者都看到了这些问题,但没人敢提出批评的声音,怕给刚诞生的开源“抹黑”,只能焦灼地看着网景浏览器的市场份额不断输给 IE。
网景公司也意识到,这样的“开源”无济于事,在10 月重做了 Mozilla 项目,实现了真正意义上的开源。这取得了一些令人激动的效果。11 月,网景浏览器就扭转了市场份额下滑的局面,并开始在与 IE 的竞争中获利。然而已经太迟了。这对于当时的网景公司来说,无异于杯水车薪,终究未能挽救颓势。1999年,网景公司被美国在线公司收购。
庆幸的是,开源使 Mozilla 得以保留了火种。经过几年的发展,诞生了基于 Mozilla 源码的火狐浏览器(Firefox)。在 Mozilla 基金会官网上,是这样介绍 Mozilla 项目的:“它旨在利用互联网上成千上万程序员的创造力,推动浏览器市场实现前所未有的创新水平。”今天, Mozilla 确实做到了。它已经是一个成功且瞩目的开源项目,旗下的开源软件 Firefox 每月都会按计划发布一个新版本,在浏览器市场,它已经占据了稳定的市场份额。
Mozilla 曾经走过弯路,但及时调转了船头。不可否认的是,网景公司开源 Mozilla 是有划时代意义的。继网景之后,Sun、IBM 、Informix、Oracle 等大型企业都相继加入到开源运动中来,从开放接口,一步一步到软件开源。
如今只道是寻常
二十多年来,开放协作的模式在不断演化,更加自由,更加开放,协作人数日益增加,参与范围扩至全球,成为了开源项目最为普遍的开发模式,甚至成为了开源协作模式的代名词。伴随而来的是,更多能够实践这一模式的工具和平台被创造出来,开发者的自由再一次攀上新的高峰。
当前流行的开源分布式版本管理工具 Git, 就是 Linus 为了让更多的人同步开发而设计的。
在 1991 至 2002 年间,绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上,这是参与者迅速蹿升带来的不可避免的问题。 到了 2002 年,整个项目组开始启用 BitKeeper 来管理和维护代码,这是一个专有的分布式版本控制系统。
三年之后,开发 BitKeeper 的商业公司与 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权利。 这就迫使 Linux 开源社区,特别是 Linus,基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。经众多开发者十几年的努力,Git 已经成为开放协作模式的主流配置。
Github、Gitlab都是基于 git 的开源协作平台,它们的出现为开发者参与开源提供了更加高效、便利的方式,不仅能够为他人的项目贡献代码,甚至可以快速建立自己的项目——就算社区不接受提交的代码,也可以一键 fork 自己的分支。
每年,都会有大量开发者通过 Github、Gitlab 等协作平台投身开源之中。《GitHub 2020 数字洞察报告》显示,2020 年,Github 的活跃代码仓为 5421 万个,同比增长 36%;活跃开发者数为 1454 万人,同比增长 22%。正是因为开发者的积极参与,Linux、MySQL、Hadoop、Kubernetes、TensorFlow、React、VS Code 等基础软件迸发出蓬勃生命力。
身处 Github 织造的协作网络之中,自由唾手可得,开放协作的自由理念已经深入人心,不会时常提及,但无一不涉及,一旦遇到威胁,就会引起警觉。2018 年,当微软宣布以 75 亿美元收购 GitHub 时,很多开发者及对 GitHub 未来的独立性表示怀疑,因此把托管在 Github 上的开源项目迁移到Gitlab上。
仅仅在一周之内,Gitlab 的项目迁入量就达到了一万以上。尽管这个数量对 Github 上几千万个活跃代码仓而言,不过是沧海一粟。
但它的意义很是鼓舞人心。是的,即便是一个全球范围内最大的开源协作平台,即便是一直以来给予其极大程度上自由的平台,对部分开发者而言,一旦成了微软——一个靠专有软件发家致富的巨头企业——的一部分,就变得不再可靠。一方面,Github 虽然可以免费托管开源项目,并且为开源事业做出了许多贡献,但 Github 的网站和软件并没有开源,以后若有什么不利于开源的动作也合乎情理;另一方面,微软过去反对开源,影响过于深刻,以致于让人忽略了今天的微软已经是 GitHub 上最大的企业贡献者。
“叛逃”Github,让人意识到,开放协作的自由,是开发者一直以来追寻的旗帜,是开发者从未放弃的权利。
从思想启蒙,到方法实践,再到工具创新,哪一样不是为了开发者的自由而来?自由不是与生俱来的,而是一批又一批开源先驱前赴后继开辟出来的。当专有软件切断了开发者的自由,RMS 站了出来;当布鲁克斯定律框住了开发者的自由,Linus 站了出来。不管是有意还是无意,是主动还是被动,只要有人在追逐自由的光,那就会趟出一条自由的路。