开放协作:赋予开发者的自由
原创
2021/11/09 22:22
阅读数 8.1K
本文被收录于专区
作者:肖滢;策划:h4cd
当我们谈论开源时,很少谈论自由,尽管开源与自由同行。从 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 站了出来。不管是有意还是无意,是主动还是被动,只要有人在追逐自由的光,那就会趟出一条自由的路。
参考资料:
1、Just for Fun:the Story of an Accidental Revolutionary
2、Open Sources: Voices from the Open Source Revolution
链接:https://www.oreilly.com/openbook/opensources/book/appa.html
3、The Cathedral and the Bazaar
链接:http://www.catb.org/~esr/writings/cathedral-bazaar/
4、《三代开源社区的协作模式》
链接:https://bbs.huaweicloud.com/blogs/104282
5、Linux
6、Git 简史
链接:https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-Git-%E7%AE%80%E5%8F%B2
7、《Linux 内核开发者群体的结构演化及行为特征研究》
8、网景浏览器公布开源
链接:https://web.archive.org/web/20021001071727/wp.netscape.com/newsref/pr/newsrelease558.html
9、30 Years Of Linux
链接:https://www.tag1consulting.com/blog/interview-linus-torvalds-linux-and-git
© 著作权归作者所有