开源的主力军无疑是广大程序员,但从世俗意义上说,他们是最终受益者吗?恐怕很少有人能给出肯定回答。
首先,对于参与开源的开发者来说,除了企业要求的之外,个人自愿参与的极少。据《2021-2022中国开源开发者调查报告》,受访者中志愿投入参与到开源项目的仅有18%。值得注意的是,在这份报告里,还整理了开发者在开源上获得收益的调研数据,68%的人表示“没有”,17%的人表示“很少”。
事实证明,没有利益驱动,为爱发电真的很难。有程序员直言不讳:“中国只有大厂能玩开源,小厂和个人哪有精力。”自己写的代码开源出来,不仅没有收益,还要无偿支持一些人的使用,解决别人的问题,确实很难坚持。
Log4j2 安全事件后,Log4j2 的维护者之一 Volkan Yazıcı 就在推特上吐槽:Log4j2 维护者只有几个人,他们无偿、自愿地工作,没有人发工资,也没人提交代码修复问题,出了问题还要被一堆人在仓库里留言痛骂。
也正是因为如此,开源作者Marak Squires删库跑路后,虽然一度让很多正在使用的开发者直接崩溃,但也有很多人认为可以理解,表示“情有可原”。因为那些使用免费资源而从不回馈社区的公司,他们对开源软件的利用一直是开源项目维护者的痛处。他们利用开源项目获得的收益与维护者毫无关系,更有甚者出了问题直接甩锅,开源作者成了纯纯“大冤种”。
再者,即使是因为企业需要而参与开源的人,在开源中不说收获,反而很可能陷入更多困扰。其一,有些公司开源的目的实际上是想获得用户增长,在这一目的驱使下,这类开源项目对于核心贡献者之外的人来说,门槛较高。一旦核心开发者离开,或者公司 KPI 更改,这个项目就差不多坑了。其二,作为全职开源者,如何证明你的业绩?当开源成为KPI的一部分,压力必然随之而来。甚至之前还有传闻,某大厂离职员工揭发其主管为了晋升而浪费公司资源做了某个毫无意义的开源项目。一些中层管理人员会为了自身业绩而盲目制定KPI导致手下程序员苦不堪言。唯KPI论之下,开发者必然丧失对开源项目的热情,这种情况显然并非个例。
开源有好处吗?当然有。但是……
上文提到了很多吃力不讨好的情况。那么,开源对程序员有好处吗?当然有,而且不少。
首先,最基本的一点,实现了知识的共享。技术世界如此浩瀚,非一人之力可承担。懂得取舍、协作、共赢,才能创造更多价值。就像有网友描述的:
“开源不是—个程序员建一栋房子,然后所有程序员都可以免费来住。而是很多程序员发现,都需要这样一间房子。然后每人砌一块砖,最后大家一起用。后来的人可以翻新、修补这个房子,接着再用。”
这种模式的好处一言以蔽之——众人拾柴火焰高。而且很大程度上避免了重复造轮子的浪费,同时轮子的质量还有无数人的检阅。
其次,提升了效率,做大了蛋糕。当程序员们选择开源后,技术可以说逐渐被产品化了,“拿来即可用”带来的无疑是效率的提升,应用的蓬勃发展,以及市场需求的增长。当行业蛋糕在极短时间内被迅速做大,必然会推动就业的更大需求,程序员会因此有更多的机会。
最后,具体到个人的话,那就会有更多可能性。比如为简历镀金,一些开源项目流行起来后,会迅速提高作者的社区知名度和认可度,这对于有些公司来说是含金量颇高的加分项。再比如,丰厚的真金白银。2020年,就有一位名叫Caleb Porzio的程序员在网上公开了自己靠GitHub打赏年入10万美元的消息和具体做法。
但是,凡事都是一体两面。就像开源让很多人习惯了“拿来即用”,效率固然是高了,但成本也变低了。从宏观上看,可选择的工具越来越多,这种模式不仅降低了“成为职业程序员”的门槛,甚至在某些层面取代了程序员原有的部分工作。
当然有人会说,没有“拿来即用”那么简单,也要结合个性化场景。但如果只是修改到业务需求能用,相较其他方式来说,无论是学习成本、时间成本还是调试成本,用开源代码的方式都要低得多,效果也直接得多。
另外,技术的迭代总是日新月异,开源更是加速了这一进程。这导致程序员在有了更多技术选择的同时也有了更紧迫的学习压力;另一方面,在行业整体提速的背景下,门槛降低造成更多就业人群的涌入,这也让已经身在其中的程序员有了愈加明显的优胜劣汰的实感。
“越来越卷”似乎不可避免地成为了一众程序员的宿命。
我们需要诗与远方,也需要面包和水
开源最初是为了打破垄断而生的,“自由”是其核心要义。从星星之火到遍地开花,开源的发展史细数起来,也是精彩纷呈。世界各地的人们因为各种各样的原因走上了开源之路。
有人认为,开源是一种更高的精神需求,“当我发现自己能开始帮助他人,为他人产生价值时,我感觉自己是富裕的,不再为自身的匮乏而恐惧,因为我开始不断地接受到他人的正向反馈,从而丰富了自己”。
有人认为,开源源于传承和知恩图报的信念,“在我还是一个小白的时候,吃着百家饭长大,那么我发迹了之后,就一定会用自己的法子把这个百家饭反哺到整个环境当中去。如果我承了开源的恩,那么我从道德上就应该把这份恩情传承下去”。
但事实上,不可忽视的是,有很多开源项目的参与者、维护者付出了大量时间和精力,却没有获得有效的反馈和支持,最终难以为继。无论如何,开源项目的提供者也要生存。
我们可以谈诗与远方,因为那是我们精神所寄;但我们也需要面包和水,因为那是我们现实所托。
如何才能兼顾二者?此处整理了一些建议,希望对诸君有所帮助。
其一,谨慎选择开源许可证。如果决心开源,那首先要防止非善意的商业组织单方获得他们的利益,却不贡献给社区。对此,开源许可证就至关重要。不过,开源许可证众多,如何选择是一个问题。乌克兰程序员Paul Bagwell,画了一张分析图进行了说明。国内大神阮一峰制作了中文版,以下经典永流传。
其二,重视开源治理。开源治理包括开源相关风险的治理、开源社区的治理以及开源项目的治理。开源社联合创始人、Apache 软件基金会 Member刘天栋在公开采访中提到,国内开源比较重技术、轻治理,而在他看来应该是治理先于技术。他援引了“Apache 认为社区重于代码”的观点,个人英雄不是真正的英雄,“代码一般,没有关系,只要大家愿意贡献进来,愿意投入精力让这个项目越来越好,这才是一个好的开源社区。”
其三,建立机制让开源更具可持续性。谷歌密码学家和 Go 语言安全负责人 Filippo Valsorda 曾在个人博客呼吁:开源项目维护者应当和那些使用软件的公司进行更专业的交流,以获得付费支持,使开源更具可持续性。他提出这一观点的前提是,既然大公司需要项目供应链安全和质量达到标准,那么他们就有必要为使用的开源项目付费。对此他建议,公司可以跟开源软件开发者建立合同关系,按照市场价的薪资支付,然后要求开发者保证项目的质量和漏洞问题。同时,项目的维护者仍然可以自由地持续关注项目,优先考虑项目的长期健康状况,并满足公司对项目的要求。
最后,希望每一位开源项目的开发者、维护者、使用者都能在开源中得偿所愿、有所收获。