这真是个和时间一样精准的梗。问题是,我们的数字基础设施竟然依赖于内布拉斯加州某个随机的家伙。
开源项目的设计本身就不具备财务可持续性。寻找可靠且明确的资金来源极具挑战性。随着项目规模的扩大,许多维护人员精疲力竭,发现自己无法满足日益增长的支持和维护需求。
这是我六年前在各种会议上发表演讲(见下文)并尝试解决开源资金问题的经历。我本人在袋鼠岛的土地上的定居点是通过开源捐款资助的,我永远感谢那些在我人生低谷时期支持我的支持者,是他们帮助我实现了这一切。
与其观看两位精疲力竭的开源维护者长达 60 分钟的演讲,不如先来看一下会议视频的简要概述。想法很简单:
如果公司能够清点其物料清单并确定未付款的供应商,他们就可以采取措施来降低供应链风险。
对于具有战略重要性的依赖关系,策略将是财政支持、成为项目的定期贡献者,甚至聘请这些项目的维护者作为工程师进行[短期|长期]合作的组合。
六年过去了,我还没看到多少公司这么做。我的意思是,他们为什么要这么做?软件免费提供,而且是原样发布的,他们为什么要付费呢?
有人这么做纯粹是出于好意,或者像我的情况一样,是作为营销支出计划的一部分。我在 Gitpod 工作期间,通过该计划向开源维护者分发了超过 3.3 万美元。
这个想法很简单:你可以获得反向链接,并在多产的开源维护者的个人资料、他们的网站和 GitHub 存储库中推广你的品牌,而成本只是传统营销的一小部分。
通过上述框架,我为开源维护者筹集了超过 33,000 美元。这种方法至今仍然有效,我不明白为什么其他公司仍然忽视它。
现在很容易说“营销业务很肮脏”等等,但支撑这些话的是一个核心思想。
如果其中仅仅一个人就能帮助更多人更好地理解一项技术或改善整个生态系统的开发者体验,那么这件事的价值是什么?为什么我们的行业还没有做到这一点?
志愿者这个词,顾名思义,是指有能力和时间无偿奉献的人。
为正在消耗的资源付费,可以扩大从事开源工作的人员范围。此外,金钱还能让开源维护者购买服务,并将那些不带给他们乐趣的活动外包出去。
那么从那时起发生了什么变化?
人工智能确实如此。我使用人工智能实现软件开发自动化的旅程已经进行了八个月了(见下文)。
当我与同样花费同样多的时间投入这些工具的同行交谈时,我们注意到一种新的模式:
我们正在减少开源软件的消耗并减少对第三方的依赖。
我们不会依赖内布拉斯加州的开发人员维护的第三方库,而是自己生成代码生成库/依赖项,除非依赖项具有网络效应或属于关键基础设施。
比如,你肯定不想用代码生成你的密码——相信我,我就用过,结果很滑稽。嗯,虽然能用,但我不会相信,因为我不是密码学家。不过,我相信一个拥有人工智能能力的密码学家可以创造出真正非凡的东西。
像 FFmpeg、Kubernetes、React 或 PyTorch 这样的项目,都是具有网络效应的很好的例子。我不会用代码生成它们,因为这样做毫无意义。
然而,我希望你停下来思考以下问题:
如果某些东西足够常见,需要值得信赖的 NPM 包,那么它在训练集中也有很好的代表性,你可以自己生成它。
我们为什么有图书馆
人类创建库是为了促进代码的可重用性。我仍然在自己开发的软件内部大量使用库,但它们是第一方库,而不是第三方库。
第三方库的问题在于,它们是由其他人设计和构建的,他们面临着不同的约束条件,设计理念也有所不同。而当你使用代码生成库时,你可以完全按照自己的需求创建它,而无需任何权衡。
你也不再需要面对“内布拉斯加问题”。当你遇到 bug 或需要添加功能时,你不再需要向维护开源软件的人抱怨,寻求他们的许可才能添加功能,也不再需要费力地打 Unix 补丁。
您可以根据您的需要来塑造、设计和制作软件。
下次您在 GitHub 上遇到问题时,我希望您思考一下为什么您会有这种依赖关系,以及为什么您不能直接编写代码来替代它并完全拥有和控制您的供应链。
是的,代码生成的库中或许会存在 Bug,但话说回来,开源软件中也存在 Bug。开源软件按原样发布,不提供任何担保。当你发现问题时,只需启动代理即可解决。你不再需要依赖 GitHub 上的某个随机人员。
我所看到的这种通过代码生成自己的第一方库的方法的一个积极方面是减少了安全事件的爆炸半径。
考虑一下 Log4j 以及它在每个人都试图从其供应链中消除/更新该软件依赖关系时所造成的数十亿美元的损失。
如果您不使用 log4j,而是使用自己的日志库,那么如果出现任何问题或安全问题,影响半径就仅限于您,而不是整个生态系统,那该怎么办?
我最后的想法是,也许开源可持续性问题可以通过以下两个因素得到解决:
- 开源不存在可持续性问题,因为开源从来就不是设计为可持续的。
- 通过人工智能,公司可以减少对第三方软件的依赖以及对无偿个人的依赖,从而减少维护人员的倦怠。
我仍然相信开源有一席之地,而且通过人工智能,我们将看到比以往任何时候都多的开源软件被开发出来。但问题是,你需要依赖它吗?