免费如 TribblesFree as in Tribbles
文章延续“免费如 puppy”的隐喻传统,提出“免费如 Tribbles”的新说法——Tribbles 是《星际迷航》中疯狂繁殖的生物,暗示“免费”概念可能带来失控增长与资源消耗。作者借此调侃开源软件、云服务定价等话题中“免费”背后的隐性成本与复杂性。
Andrew Nesbitt
自由软件运动给了我们两个争论的焦点。“免费如啤酒”:你无需为此付费。“免费如言论”:你可以随心所欲地使用它。斯特劳曼花了数十年时间坚持认为后者才是关键,前者几乎无关紧要,这也是为什么自由软件基金会最终维护了一个关于“free”一词的页面——其长度超过了大多数许可证。
大约在开源开始出现在采购会议上的某个时期,第三种变体出现了:“免费如小狗”。软件本身带回家是免费的,但现在你需要喂养它、遛它,还要带它去看兽医,而且当你度假时还得有人照看它。这本质上是总拥有成本论,只是披上了毛茸茸的外衣。这是一种有益的纠正,因为它将讨论从许可证转向了生命周期。我挺喜欢这种说法,以至于在2018年巴斯Ruby大会上以这个标题做了一场演讲,因此以下内容算是对我自己隐喻的告别,而非与别人的争论。
小狗比喻契合它所来自的时代,也契合我当时想要表达的观点。那时你会引入一个大型的开源项目,比如数据库、应用服务器或内容管理系统,你的运维团队会学习它的习性,阅读它的更新日志,并逐渐熟悉它。但今天,在一个规模适中的项目中运行 npm ls --all,那种亲密关系已经不复存在。一个新的Rails应用在你添加任何一行代码之前就已经解析了上百个gem包,一个React启动模板会拉取一千多个包,而每一个直接依赖又自带自己的依赖。你真正想要的日期选择器实际上占据了大约九十条新的lockfile条目,这大致就是我开始使用第四种变体——“免费如 tribbles”——的起点。
对于没看过这一集的人来说,tribbles是一种小型、发出咕噜声、毛茸茸的生物,一名船员把它们带上企业号,因为它们看起来无害且令人愉悦。它们还是天生怀孕的,史波克在剧中计算过,在充足食物供应下,一只动物三天内可以繁殖出1,771,561只tribbles。它们出现在通风管道里、舰长的座椅上,最后甚至进入了粮仓,而正是它们的泛滥让船员们不得不接近货舱,从而发现了被污染的货物。
每个传递性依赖都像是一个微小的柔软物体,就像几十行你永远不会打开的别人的代码。真正有害的是“天生怀孕”的特性,因为你添加的包已经包含了它所需的包,而这些包又包含它们自己的依赖,正是这条链条导致left-pad在没有一个团队主动选择的情况下就进入了大多数JavaScript项目的构建路径。剧中,tribbles之所以能发现被污染的粮食,正是因为它们的泛滥是唯一让人接近货舱的理由。
AI辅助扫描器如今生成漏洞报告的速度已快于维护人员阅读的速度,更不用说对其中哪些描述了真实问题进行分类了。尽管有些报告是有效的,但也有很多是垃圾信息,而每一份报告最终都会进入某个人的待办队列。与此同时,AI辅助编程已将分叉(fork)一个库的成本降至只需构思一个想法的程度。如果一个库处理某个边界情况不当,只需几分钟就能将其分叉,让代理修复有问题的函数并撰写README文件,然后以新的名称发布结果。此时原始版本并不会消失;两个版本都会保留在注册表中,各自独立地被解析到不同的依赖树中,偶尔也会同时出现在同一棵树里。注册表正逐渐被大量高度相似的“生物体”填满——每个都有自己的发布节奏和各自的漏洞面,而你继承的只是图中位于你之上的某个维护者碰巧切换到的那个版本。
“小狗式”(puppy framing)思维告诉你应为每只动物预留照料预算,并假设你可以逐个对待它们:阅读发布说明、执行升级,甚至识别出维护者是谁。然而,当你打开一个存储舱门时,它们便倾泻而出,这种个体化管理方式很快就变得不切实际。在如此密集的数量下,根本不存在可以单独处理的“个体”,于是你不得不转而管理整个种群,制定允许上船的规定,并对扫描失败者实施隔离。你所关注的单位不再是单个包,而是锁文件(lockfile),进而成为组织中每一个锁文件。
我们现有的绝大多数工具都是为“逐个动物”场景设计的。Dependabot为每包提交一个拉取请求,安全公告(advisories)假定你能在一个库的一个版本范围内找到某个CVE,并能在孤立状态下加以考虑,而SBOM则枚举船上所有“Tribble”(指代依赖项),却很少说明它们到达了哪个舱室。这些工具原本适用于数量合理、你还能与之建立关系的依赖项——即便Dunbar数理论上的上限约为150,大多数项目在第一个功能上线前就已远超这一数字。
Scotty通过未经询问便将整群Tribble传送到克林贡飞船解决了虫害问题,之后桥上的任何人都不太愿意告诉柯克这个麻烦是如何消失的。这种做法其实比我们想象中更接近现代供应链的实际操作:除非恰好有艘克林贡船只路过,否则新来者会被隔离,使用锁文件确保每台机器上的种群一致,从一开始就严格限制允许上船的内容,以及那句老生常谈的“午夜后别喂它们”。
需要完整排版与评论请前往来源站点阅读。