Skip to content

做开源应当无私吗?

记住,做开源重要的是为了自己,而不是为了别人,不要委屈自己。

我认为,那些用爱发电的开源开发者可能走错了路。开源本质上是一种双赢的局面。

这让我想起 Faker.js 仓库删除事件,以及 @以撒(Isaac) 广受好评的回应。

知乎:如何看待 Faker.js 开源作者删掉全部代码?

许多兢兢业业的开源项目作者不辞辛劳,创作出优秀的作品,为开源社区添砖加瓦。他们的精神令人敬佩,我也欣赏他们所做的贡献。

然而,我难以理解的是,作者们明明面临经济困难、维持自身生活品质都很吃力,为何还要投入大量时间与精力去做项目,甚至不惜以忽略自身生计为代价,继续发光发热。

到头来,似乎只是感动了自己,一时上头而忽略了自身。他们甚至还要忍受白嫖者的指责。眼看着别人 fork 自己的项目从中获益,自己却两手空空,还要独自处理一大堆 issue,实在令人心寒。寻求捐赠要么徒劳无功,要么所得甚微,还会被告知:「玩不起开源就别玩。」付出与不被理解、回报微薄之间似乎不成正比。

正确的态度是:开源作者首先要学会做一个精致的利己主义者。一切开源都是为了自己,而不是为了别人。不要做无私的、用爱发电的贡献者。

「挠自己的痒处」 —— 埃里克·史蒂芬·雷蒙德(Eric S. Raymond),《大教堂与集市》

「我写 Linux 是因为我想要它。」 —— 林纳斯·托瓦兹(Linus Torvalds)

首先,不要指望开源项目带来直接回报。开源模式从诞生之初就是自私的,其目标正是降低自身的维护成本。在过去的闭源时代,工程项目规模越大,维护成本与需求分析成本就呈指数级增长,软件迭代与发布周期也随之变长,软件的使用体验也很难直接反馈给厂商。在竞争激烈的时期,就越难生存下去。此外,软件受众中还有不同诉求的用户,众口难调,那该怎么办?

于是,直接把源码公开。谁有需求或者发现了 bug,都可以自己 fork,源码随意修改,也欢迎提交你的贡献。顺带还能收获一些项目的名声,这样不同诉求的软件用户都能得到照顾。此外,开源模式是开放的,用户的需求和问题能够及时得到响应并被拉入项目,用户能帮你解决,你也能轻松一些。源码不是资产,而是负债。源码会随需求而改变,暴露出许多潜在问题,这些都需耗费大量成本去维护。开源是一种分摊负债、把成本转嫁给用户的方式,这是利己的。想用我的项目赚钱?没问题,MIT、Apache 等协议都写明了:自己的选择自己负责,你可以赚钱,源码也可以改,但惹出麻烦别来找我。

那么像 faker.js、core.js 这样的个人项目呢?个人如何把小项目做大?许多开源作品最初都是一时兴起,为了解决和实现在工作或学习中的某个想法而写出来的。Linux 就是一个例子,作者最初写这个项目是为了学习操作系统。如果想法不错,随着推广与名气逐渐积累,就会有越来越多的人参与进来贡献,项目也就越来越大。既然别人有了贡献,项目也融入了许多不同用户的想法,那你实际上并没有天然义务去守护它。因为你最初写它的时候,是为了自己用,而不是为了迎合用户。所以既然开源了,用户在获得源码权利之后,也有义务去维护它,问题应当在用户之间解决。

也就是说,我已经在项目上尽了全力,把源码和获利权都给了你。你有任何想法或需求,都可以 fork 并贡献,但如果遇到问题,就自己解决,尽力而为。大家各取所需。我只是把源码公开了,你觉得有用就用,觉得没用就不用,喜欢就用,不喜欢也不用,别给我添麻烦。开源之后,是你求着用我的东西,而不是我求着你用。

好,这种「精致的利己主义」才是开源的正确道路。如果你真想通过开源博取名利,那也没什么大不了的,明码标价并不丢人。

记住,做开源重要的是为了自己,而不是为了别人,不要委屈自己。