Immich 3.3.6 的一次道歉:onnxruntime 默认开了遥测,ML 容器把匿名指标发给了微软
一个自称「我们自己没第一时间发现」的修复版本:onnxruntime 在某次升级里默认打开了遥测,机器学习容器开始向微软发送匿名指标。3.3.6 把它关掉,并在发布说明最前面写了一段道歉。
Immich 的 3.3.6 是个很小的版本,改动只有一条:关掉 onnxruntime 的遥测。但它的发布说明我是从头读到尾的,因为第一段话是这么写的:
很遗憾,我们漏掉了 onnxruntime 在某次版本里默认开启了遥测这件事,导致 ML 容器自动向微软发送匿名指标数据。我们现在已经禁用了它。对所有没能第一时间发现这个问题的人,我们道歉;也感谢社区把这个变化指了出来。

一个开源项目,为了一个「匿名指标」道歉。这件事本身,比那个补丁更值得写下来。
发生了什么
onnxruntime 是 Immich 跑机器学习任务(人脸识别、语义搜索那类)依赖的推理运行时。它在某个版本里把遥测改成了默认开启 —— 不是偷偷加,是写在它自己的发布说明里的,但那种变化埋在几十条改动中间,很容易被跳过。
后果是:所有跑 Immich ML 容器的部署,都在往外发匿名指标。不是照片,不是文件名,是运行时的指标数据。但用户装 Immich 的理由,往往恰恰是「我的照片不出我的机器」。

这个落差才是问题所在。技术上是匿名指标,情感上是「我的服务器在往外发东西」。 对一个以隐私为卖点的自建项目,后者的重量远大于前者。

修复只有一行,反应却很热
补丁来自一位第一次给这个项目提交代码的贡献者(#32956)。发布页面上,这个只有一条改动的版本拿到了 210 个表情反应,其中 85 个是 ❤️。

这不是「用户为修好一个 bug 而高兴」。这是用户在为「你敢承认」而回应。开源项目最容易犯的错不是引入遥测,而是引入了却不吭声;最难做到的不是修掉它,而是在发布说明第一段就把话说清楚。
给自己的三条检查
我顺手在自己维护的几个容器里查了一遍,这类「依赖偷偷改默认值」的事,一年能碰上两三次:
- 把「供应商默认值」当不可信输入。升级依赖时,重点看它自己的变更说明里有没有
telemetry/analytics/report这类词,而不是只看自己项目的 diff。 - 出站流量做一次基线。跑一周的
tcpdump或者看防火墙日志,把「平时会连哪些域名」记下来。多出来的那一个,就是你发现问题的唯一途径。这件事我第一次做的时候,发现了一个我完全不认识的域名。 - 自建服务的价值,一半在功能,一半在可控。如果你的照片备份服务在往外发什么东西你都不知道,那它和云相册的区别就只剩服务器账单了。
结尾不用总结
我把这条发布说明存进了笔记,标签是「怎么道歉」。技术项目写道歉信的机会不多,写得好更少。这一段只用了四句话:说清发生了什么、说清已经改了什么、道歉、致谢。没有「但是」,没有「为了改进体验」。
值得学。

评论
…