跳到主要内容

一年二百四十美元,和一张三十八块钱的小票

夜航船
夜航船

· 阅读约 4 分钟

上个月那张三十八块钱的出租车小票,我报完了,走完流程九天,前后盖了四个人的章,其中一个章的主人我至今没见过面。那天夜里盯着邮箱里那封通知发了会儿呆,忽然算起另一笔账:这九天的工夫本身,恐怕比那三十八块钱贵得多,只不过程序里没有哪一栏是用来填这个的。

前几天看到 Polly 出了个开源维护费,年收入两万美元以上的组织,一家一个月二十块,一年二百四十。我第一眼看过去的不是这个数字,是它早晚要撞上的那堵墙。二百四十美元放在公司账上小到几乎看不见,小到财务系统里可能压根填不进这个位数;可要让它名正言顺地流出去,得有人建供应商档案、拿税表、写单一来源说明、开一张采购订单,再找人签字。评论区里有人替它算过,说内部成本两千美元打不住。这话我信,信的程度和信那张小票花了九天差不多。

不过把这件事讲成一段吐槽企业采购的闲话,就太顺手,也太便宜了。真正让我在椅子上坐直一点的,不是那堵墙,是维护者为什么要挑这么个法子。

Polly 这个库,写 .NET 的人多多少少都用过,它不占地方,安安静静待在依赖树的一个角落里,重试、熔断、超时,那些你不想自己写又不得不有的东西,它替你兜着。麻烦也在这儿:它兜得越稳,你越想不起它。像一块压舱石,船走得平顺,没人会想到船底压着那么一块石头;只有哪天某次发布之后测试开始偶尔红一下,顺着依赖树一路往下翻,翻到它,才愣一下,哦,原来你在这儿。

这么个东西,过去十来年大概就是靠几个人业余撑着。现在它开口了,说从你这儿拿一点,一年二百四十,年收入过两万才收,源代码照旧开放,你也可以自己分叉一份养着,或者干脆不付,接着用。

这个设计我挺喜欢,理由不太上台面:它收的不是用量,是“你知不知道”。条款里写的是只对直接依赖收费,也就是说绝大多数团队其实是经由 Microsoft.Extensions.Http.Resilience 或者某个厂商 SDK 间接把它带进来的,按规则压根轮不到掏这笔钱。于是真会掏钱的,是那些还有兴致把依赖树翻到底、翻到了、并且肯承认“是,我在靠它过日子”的人。这笔钱与其叫维护费,不如叫一张写了自己名字的收据。

有人把它比成免费基础版加付费高级功能那一路,我不太同意。代码还是那一份,许可证一个字没改,你完全可以不理它,自己维护一份分叉,甚至在自己公司内部把它养起来。卡住人的不是功能,是良心和手续;这两样东西,一向比功能贵。

这么说有点抒情了,我自己其实也没翻过几回依赖树。上一次认真看,是为了一个安全公告,看完,删了两行,觉得自己挺负责任,第二天就忘了。人对自己的技术债有多记性,跟对别人欠自己的钱有多记性,差不多是一个量级。

也有人说这个门槛根本没法核实,两万以上谁会上报,Polly 除了在条款里写那么一句,手里没有第二根棍子。这个批评是对的,我不觉得它致命。真要按查账的方式活,开源这套东西几十年都活不到今天;大部分规矩之所以还算数,靠的不是被抓住的概率,是多数人心里那杆秤还稍微偏着一点。愿意付的人本来就愿意付,不想付的人,条款织得再密也没用,他会分叉一份,然后在某个深夜花掉远比二百四十美元更贵的时间去伺候它,那是他自己挑的,也挺好。

所以这事我盯着的不是谁会被逮住,是明年 Polly 发版会不会变得勤快一点。那才是一笔维护费真正的收据,别的说法都隔着一层。

那张小票最后还是报了,钱到账那天我正在开会,没看见,三天后翻短信才想起来。二百四十美元大概也是这么回事,交的人不会记得自己交过,没交的人也不记得自己没交,差别只在某个深夜,某个维护者打开邮箱,看见里面多了一笔够买几顿晚饭的钱,然后决定这个周末再把一个 issue 收掉。

我这个人一到夜里就爱为一笔小钱算半天的账,算来算去算的也不是钱,是这笔钱从谁手里出、到谁手里落,中间要过几道门。今晚这趟夜航,大概就交代在这儿了。