开源这件事,被讲得最多的词是“免费”,被讲得最少的一个词是“牺牲”。
我认识一个维护 npm 包的朋友,他那个库很小,每周下载量几万次。听起来不算多,但他每天下班后要花两三个小时看 issue、回邮件、修 bug。他做这件事做了五年。最让他崩溃的不是代码难写,而是那些连文档都不看就上来质问的人。
有个人曾经在他的 issue 区里贴了个长达四十行的报错,结果是 Node.js 版本不对。朋友让他去读一下 README 的第一段,对方直接开骂。“我当时就想,我图什么呢?”他说。我没办法回答他。
我们总是把开源软件视作一种服务,一种理所当然应该更新的服务。很少有人把它看作一个活人在业余时间替你兜底。你省下的几万块钱授权费,被折算成了某个陌生人的颈椎病和焦虑。
大厂花旗的硬币,个体在买单
更微妙的一个变化,是开源已经不再是个人爱好者的天下。
现在真正的核心项目,底层可能被几家互联网巨头把持着。他们雇佣全职开发者去维护项目,但这些人写代码的方向始终带着公司的印记。你要说这是利益冲突吧,又不完全是,但开源社区那种很多人共同做一件事的浪漫感,正在一步步退潮。
与此同时,那些真正缺人手的小项目,反而承担了最多底层依赖的职责——比如一个格式化工具、一个校验库——这些代码嵌入了成千上万个商业项目里,却几乎没有任何资金回流。商业公司拿它们构建产品,然后对它们像石头一样忽略,直到石头碎了。
这就是我所说的“维护者债”。技术债我们谈了很多年了,但我们欠维护者的那份债,没人开口算过。
这种债无法量化,但它非常真实地改变着生态。你看到某个库长时间不更新了,你以为它老了。其实不是,是维护者真的不行了。累了,没人接盘,热情烧完了。那些年我们不停地“复用”别人的劳动成果,却从没想过,建立一个让人愿意持续付出的环境,是比技术本身更艰巨的工程。
学会当一个不那么自私的受益者
说这些,并不是想劝退所有潜在的贡献者。相反,我认为开源依然是人类协作史上最有想象力的一件事——只是我们必须换一种心智模式去看待它。
我现在的做法很简单:如果我在项目里白嫖了一个库,我会顺手做三件事。第一,如果发现 bug,我多写一步复现步骤,而不是丢一句话就撒手。第二,如果那个库没有赞助页面,我会去 GitHub 上发一条私信,说一声谢谢——不是客套,是真的谢。第三,如果我确实在工作里靠它赚了钱,我会说服公司用商业化支持或者捐赠的方式回流一部分。
听起来微不足道。但我觉得,开源最需要的不是钱,也不是更多的明星项目。它需要的是让维护者感觉到,自己坐在电脑前敲下的每一行代码,真的有人在看,有人在意,有人知道它的分量。
我们常常赞美代码,却不记得写代码的人也需要被看见。一个健康的技术生态,不该只靠少数人的善良来维持。开源的精神内核,并不在于所有人无私奉献,而是在于我们愿意共同承担一个世界的建造和维护。
有一天那个朋友告诉我,他把仓库转移给别人了。他说:“我不后悔,但我不会再做了。”我听了挺难过的,可也说不出什么反驳的话。也许这就是开源的底色:有人离开,有人进来,而留下来的那些,需要我们对他们好一点。
下次你 npm install 的时候,可能在想这真方便。我只想说,你运行的每一段代码,都是某个人曾经的一个夜晚。