分享:Pluskid 阅读关于开源运动本身的观察和理解

原文:https://freemind.pluskid.org/books/2021-book-list-winter/

Working in Public: The Making and Maintenance of Open Source》,作者是 Nadia Eghbal。这是一本关于“开放源代码”本身的书,和更早期的诸如《大教堂与集市》那样的让人热血的开源“运动”的宣言的不同之处在于,本书写于开源运动发起数十年之后,是对开源的一些更加冷静客观的观察和理解,或许“现代”的开放源代码软件开发已经不再是一种(带有革命意味的)“运动”,而是成为了(即使不是主流也至少是非常普遍的一种)“现象”。并且随着这些年互联网本身的翻天覆地的变化,开源的格局也和二十年前彻底不同了。

暂且抛开自由软件 (Free Software) 和开源 (Open Source) 两个运动之间的争议,就开源本身来讲,它的中心(例如各种开源协议)在于软件代码的分发 (distribute),但是开源发展到今天,代码的创造 (Content Creation) 和软件维护 (Maintenance) 反而逐渐成为瓶颈。而这样的变迁其实是紧随互联网整体格局改变而发生的。

【互联网的平台化变迁】 经历过早期互联网(哪怕只是十多年前)的人不少会感叹 Good Old Days,互联网的的方方面面都已不同并且还在持续变化着,当然其实大部分的变化本身同时伴随着好的一面和坏的一面,很难一概而论。其中一个重要的变化就是过去的小规模、各自相对独立的社区(例如爱好者论坛、邮件列表、甚至是个人博客小圈子等)如今已经被各种大规模 Platform (平台) 所取代,例如 YouTube, Instagram, Twitter, Twitch 等。平台带来的优势是多方面的,一是平台负责处理了运营和维护,让内容创造者不用去操心搭建博客平台、配置数据库、过滤垃圾评论等与内容本身无关的杂务,极大地降低了内容创作的门槛。统一平台的第二个优势是大规模用户数量和便捷的共享、发现、交互等功能让内容创作者能够更加容易地和内容消费者直接联系起来。当然优势同时也伴随着弊端,这样的发展趋势的一个直接结果就是内容爆炸,这让内容消费者的 attention 被大量消耗;同时内容创造者现在进入了一个全球竞争的大平台,为了能跟上内容爆炸他们也需要创造更多、更新的内容。两方面的因素合在一起导致今天的互联网内容逐渐趋向于短小和模块化(例如从博客文章到 Twitter 短讯的发展)。当然其实变化的并不只是内容本身,而是整个生态体系的组织方式,而种种随之而来的问题其实是由于我们还没有足够的应对手段去适应这样的新的生态体系造成的。

回到开源领域,相应的变化可以从“全球最大同性交友网站” GitHub 上看到,这个戏称虽然很不政治正确,不过在这里提它的重点在于“交友网站”而不是“同性”。如果把 GitHub 和各种崛起的社交平台放到一起,就会看见开源社区的变迁其实和大范围的互联网变迁是同步的:早期每个开源软件基本上都有各自独立的开源社区(邮件列表、IRC 等),代码的分发方式五花八门,也没有统一的 issue、patch 管理网站;后来 GitHub 崛起到今天即便算不上统一,也至少是 dominate 了开源社区。现在 GitHub 就是开源软件的 Platform,而开源开发者们则成为了这个平台上的 Content Creator,和在 YouTube 上发布视频的创作者其实没有太多本质的不同。除了 issue、pull request 等代码本身相关的功能之外,GitHub 还提供了“普通”社交网络里的许多功能,例如可以给项目点赞、follow 某个喜欢的开发者的 feed 等。

类似地,开源平台的崛起让开源的门槛极大地降低,作者在书中给的一个 blog 到 twitter 变迁的类比是 Javascript 社区里的各种迷你模块的出现(还提到了著名的一个只有十几行代码的开源软件包 left-pad 如何导致整个 Internet “挂掉”的事件)。

【Casual Contributor 的大量涌入】 更重要的是生态系统的改变,一些从社会学、经济学等视角观察开源社区发展的人逐渐意识到,今天的开源软件开发并不是像最初《大教堂与集市》的愿景里展望的那样:社区的发展和壮大让更多的人参与进来,不管是从新功能的开发还是隐藏 bug 的发现和修补,都会由于更多人的参与而变得更有效。然而事实却几乎正好相反,书里有许多详细的讨论,这里只大概地提一些。例如统计发现,即使许多有大量贡献者的大型项目里,开发者们的贡献的分布也是极其“长尾”的,核心贡献者往往只有那么几个人,其中有很多贡献者只提交过一次代码。乍一看这只是说明大社区没有能完全实现它所承诺带来的好处,但其实这里隐藏了重大弊端。开源平台的便捷化使门槛降低,让初学者也能非常方便地参与进来,但是从核心开发者的角度乃至于项目本身的角度来说,萌新贡献者往往更多的是“添乱”,因为他们很多对于项目代码的大格局和规划并不了解,还有一部分人目的本就是交次代码刷个成就就走,就更加不在乎这些了。于是核心开发者往往在 review 这些代码上会浪费很多不必要的时间,即使成功合并进了项目,很多代码也会由于最初的提交者的消失而变得无人维护,反而成为项目的负担。作者在书中使用 Casual 贡献者来对这一类人进行归类,与核心贡献者相比,他们更像是用户,在开源项目中扮演 consumer 的角色。

【软件的维护成本】 书里提到早期人们对软件的认知是“静态”的,就好比一首创作完成的歌,由于它是虚拟的,有更多的用户去使用它,产生新的拷贝都并不会给原本的创作者造成额外的成本增加。所以,尤其是对开源软件这样不需要收费的情况,更多的 consumer 似乎没有什么问题。但实际上软件是一个会逐渐老化,需要不断维护的“动态”的东西,这样的区别在开源软件社区尤其明显,因为许多开源参与者都是处于个人兴趣自发参与的,维护已有的软件的趣味性显然和创作新的软件无法相比,大量涌入的用户在这里 consume 的并不是内容(软件)本身,而是开发者的 attention。

书里举了一个例子:你有一个爱好 DIY 的邻居在自家院子里装上了华丽的主题圣诞灯饰,周围的邻居都能随意观看并免费享受灯饰带来的节日氛围。他做这件事完全是处于自己的兴趣,邻居从中受惠也并不需他付出任何额外的代价。但是在开源平台上维护一个比较受欢迎的项目的体验又是怎样的呢?想象一下现在你家们口有三百个人堵在那里排着队,有人主动提供帮助想要为给你的灯饰增加一个微控制器让它能自由切换各种闪烁模式,有人对你彩灯的配色方案提出了建议和批评,有人问你为什么他用自己的手机拍出来的照片里彩灯颜色失真,有人表示你去年的灯饰主题有格调多了,今年的新主题简直就是走下坡路,还有人批评你挂出来的圣诞老人标示牌全都是以白人男性为模特,应该更加多元化……很有可能的结局是,最后这位邻居决定今后再也不在外面挂圣诞灯饰了。

此外,和过去各自独立的小社区的不一样之处不仅在于规模,而且过去模式下社区里的成员,特别是参与者通常会有一种归属感 (毕竟门槛比较高,参与进来本身就需要一定的 efforts),贡献者更容易长期驻留,这样的长期驻留也会让他们因为注重自己的 reputation 而做事更加谨慎(例如提交更高质量的代码);而今天平台上的参与者来来去去,大部分人并不“属于”某一个项目,也不会在意自己是否在某一个社区里会留下不好的印象,因此也更容易出现提交信息缺失的 bug report,甚至是随意批评并参与自己不了解的项目的论战的现象,对核心维护人员的 attention 造成大量不必要占用。

【困境与出路】 这些都是平台化之后的今天开源项目维护者们所面临的困境,并且开源社区里的道德准则通常是要求对用户和贡献者要持一种欢迎的态度,给足 attention,但很多 casual 贡献者打一枪就跑了,这让原本就不怎么有趣的维护工作变得甚至像白费力气。

当然许多开源项目也有在尝试各种应对办法,其中最常见的一种办法就是再强行提高参与门槛,例如许多大项目都要求开 issue 要填写一个完整模版。除此之外,大量自动化工具被运用起来,例如代码格式检查、使用持续整合 (如 TravisCI) 平台自动运行单元测试等用来过滤低质量的代码 pull request,还有各种 bot 用来帮助处理 issue (例如自动关闭长期没有人参与讨论的 issue)。还有一些社区采取比较极端的态度,明确划定贡献者界限,有时候会和“Open”的理念不太符合而引发一些争议,例如 Clojure 社区在 2018 年的一次争议很大的事件和相关讨论

但是这些办法只是缓解,并没有从根本上解决问题。在今天的互联网环境下,开源变得更容易了,但同时也变得更困难了。从长远来讲,这样的模式是否可以持续发展?开源运动是否会逐渐消失?亦或是转型蜕变?这些都是我们今天所未知的话题。

【书评】 最后回到书本身,这本书从一个较抽象的视角来看待了开源软件运动的发展与现状,其中用到了一些经济学和社会学相关的视角和概念,我没有办法从这些方面评价书的学术价值如何,但是书的内容本身感觉是非常有趣的。特别是自己也以不同程度参与过一些大或小的开源项目的方方面面,也看着开源社区一路走来的变迁,而且自己一直使很喜欢开源运动,并且在刚刚开始参与进去的时候是非常为之热血的,毕竟是跨越国界、时区、种族等一切物理上的限制去创造与合作,仿佛是为自由而战的斗士,很容易让年轻人上头哈哈。书中所讲的很多东西其实都有切身体会,虽然书里讲的道理其实都不是什么高深的理论,非常容易理解,但是自己并没有这样从一个全局的角度来思考过这些问题,所以读起来有种拨云见日的感觉。不知道有没有类似的讨论互联网本身的发展与变迁的书。

【后记】 这里突然想起来前一阵子被问到过我为什么写博客,是否目的是要成为一个 influencer。我当时并没有能理解这个问题,我写博客的目的大概是难以一言道清楚的,但是我是为了成为一个 influencer 吗?诚然偶尔会收到读者的来信或者留言说我的博客对他们的生活的一些正面的 influence,我自己甚至也通过博客的契机结识了一些相当重要的朋友,这些都是令我很开心的并且也是让我继续写博客的原因,但大概并不是主要目的吧?因为要做 Influencer 的话,似乎和运营个人博客相比,去更容易 reach 观众群的各种社交平台上做内容创作才是最有效的。看了这个书之后我突然意识到也许对方问这样的问题和我对该问题的疑惑也许来自于对互联网认知的“代沟”。Influencer 这个概念放在互联网平台化之后的世界里就非常容易理解了,但是十几年前的互联网其实并不是这样的,大家各自都在玩个人博客搭建,既不是为了建立观众群、粉丝群(出于金钱或者名誉的目的),也不是为了让自己写的东西能够 reach 更多用户,甚至都不是为了所谓的 content creation。我最初写博客的目的大概和当时其他大部分人的目的都差不多,也许只是圈子里的朋友在网上相互交流,或者仅仅是记录自己想法的一个工具,只是我 somehow 过了许多年还时不时在写一写罢了。当然并不是说今天的人们想法就更“功利”,只是当时的互联网并没有提供这样的平台让大家有机会去想象这样的事情。

5 个赞

这是yasnippet的原作者嘛

是的,不过看上去已经不用 Emacs 很久了,但看简历,一直是沿着人工智能这条线发展,现在在 Google

文中对开源运动的很多描述事实上也适用于互联网本身,或者说开源运动其实就是互联网的缩影。