🏠

愤怒的Rsync

原文: https://medium.com/@tridge60/rsync-and-outrage-d9849599e5a0

作者: Andrew Tridgell

翻译: 费米 fermi@dscli.io https://github.com/dscli/dscli

我很久以前就不写博客了(除了偶尔写点关于 ArduPilot 的东西),我习惯只 管写代码,希望人们觉得有用就好。所以写这篇文章感觉有点奇怪,但鉴于最近 收到了大量愤怒的帖子,我想也许该说点什么。

01-silent-programmer.svg

和许多开源包的维护者一样,作为 rsync 的维护者,我最近被大量安全报告淹 没了。其中很多是 AI 生成的——不过不全是,有些报告是经过非常仔细和高质 量的人工分析的。

02-ai-flood.svg

随着这股洪流越来越猛,我意识到必须大大提升 rsync 的防御能力——我们需 要更全面的测试套件、代码覆盖率分析、在更多平台上做 CI 测试、主动而彻底 地扫描可能的安全问题(这样我至少能在别人发现之前找到一部分!),还要增 加大量纵深防御加固技术。这些都是巨大的工作量。我已经退休了(虽然我妻子 可能不这么认为!),我宁愿出海航行,也不想处理 rsync 的安全问题。所以 我借助了一些 AI 工具来帮忙。我对此毫不后悔,尽管从反 AI 的愤怒风暴来看, 很多人觉得我哪怕只是考虑用 AI,就该被吊起来抽。

03-retired-wife.svg

要回应所有对我咬牙切齿的指责,那得花太长时间了,所以这里只举几个例子:

——我把 rsync 的测试套件从旧的 shell 脚本重写成了 Python。设计是我自 己做的(而且对这个设计我相当满意),但繁重的编码工作用了 Claude,并用 Codex 和 Gemini 交叉检查。我不是简单地「用 vibe coding 把测试套件转成 Python」。我是一个有 40 年经验的软件工程师——是的,我很老!——所以我 会先做设计,有一个验证计划,然后用 AI 工具来做苦力活,因为它们擅长这个。 我自己审查了每一部分,花了大把 CI 时间把它做对(后来我改用本地虚拟机做 大部分测试,以减少 CI 等待时间1)。你在提交历史中看到的 「co-authored by Claude」只是冰山一角。

04-ai-iceberg.svg

——对于那些说「我是某某大学的博士,我告诉你 LLM 只是靠概率瞎猜的工具,什么都 瞎编,用了它世界就会崩溃」的人,我要告诉你:你过时了。 过去几个月里发生了天翻地覆的变化。IT 安全领域——维护软件面对报告洪流 这件事——在过去几周里已经彻底改变了。你去年学到的关于这些东西的知识, 可能已经像是另一个星球的事了。哦对了,我也有计算机科学博士学位,而且我 确实在神经网络上做过不少工作——是的,我那个时代的所有知识也完全过时了。 另外,没有人知道人类智能是否也只是更细粒度的随机预测。也许有一天我们会 搞清楚,也许永远不会。底线是:我确实知道——至少大致知道——LLM 的工作 原理,但这并不妨碍它们有用。这确实意味着你必须谨慎;而我已经很谨慎了, 至少在我渴望出海航行、不想处理那帮所谓互联网专家的垃圾信息的前提下,已 经尽可能谨慎了。

05-old-wiser.svg

——是的,rsync 3.4.3 版本在某些使用场景下确实出现了回归问题。我有意在 该版本中优先修复安全问题,结果一些有效但不太常见的使用场景受到了波及。 这些场景既没有被现有的 rsync 测试套件覆盖,也没有被我的手动测试覆盖——是 的,我自己也用 rsync,不只是开发它。我正在逐个处理这些回归问题,也感谢 所有在 GitHub 仓库上提交 issue 或 PR 的人。我都在看,即使不一定能迅速 回复。如果你的 rsync 使用场景受到了影响,我道歉。如果你不介意安全风险, 当然可以继续用旧版本。

06-security-regressions.svg

——对于那些说「天哪,他居然没用 pytest,他到底懂不懂啊!」的人:我在 其他项目中大量使用过 pytest。但在这里它并不合适。这个测试套件有些需求 用 pytest 很难实现——至少基于我的使用经验——所以我针对具体任务设计了 合适的方法。我这辈子都在做这样的事:经常因为现有方法不太对路而创造新方 法。我个人认为这本身就是件好事。

07-pytest-nonsense.svg

现在说说未来,因为还远未结束。安全报告继续涌来。我目前正在处理一批 CVE。 幸运的是,一些拥有出色系统开发技能和安全知识的优秀开发者加入了我。其中 有些人之所以引起我的注意,部分原因正是最近这场愤怒风暴——所以愤怒的乌 云也有银边。下次发布时,请注意看一些优秀新贡献者的致谢名单。

08-silver-lining.svg

我现在正在犹豫:是发布一个缓和部分回归问题的 3.4.4,还是直接按计划推出 改动更大的 3.5.0。3.5 将在 rsync 安全性上大幅提高标准,但改动巨大。需 要这么大的改动集,正是我重写测试套件的主要动力——没有真正全面的测试套 件,你不可能对像 rsync 这样的软件进行快速的大规模改动。我曾想先在 master 分支上公开测试套件的核心结构,但鉴于由此引发的愤怒,也许这不是 个好主意。不管怎样,新的测试套件已经帮了大忙,我还准备了一大堆安全相关 的测试——等 3.5 发布时大家就能看到了。

09-roadmap.svg

我希望——也许太天真了——通过目前的努力,我能赶在前面,让洪流变成涓涓 细流,然后干涸。也许我只是在做梦。

10-honest-worker.svg

现在,如果那些发怒的人中有人愿意审查我发布的代码,提出建设性的批评,那 就太好了!如果你们只想继续发泄愤怒,我相信你们能在互联网的某个角落找到 欢迎你们的地方。

11-choose-path.svg

至于那些说「我要为 XXX 平台打包 openrsync,用那个代替 rsync!」的人——我 觉得挺有意思的。如果你真要走那条路,我建议你试试用新的 rsync 测试套件 跑一下 openrsync——如果你能忍受 AI 帮助写的代码的话。我今天试了一下, openrsync 在 98 个测试中失败了 85 个,所以我相信你很快就能把它搞定的。 运行方式:

./runtests.py — rsync-bin=../openrsync/openrsync — use-tcp

当然,很多失败只是因为 openrsync 缺少某些功能,但不管怎么说,这结果不 太好看。

12-perspectives.svg

最后,前两天我偶然看到这个页面 https://www.tridge.com ,忍不住笑了出来。 看来也许我这辈子一直都是个机器人——也许这就是为什么我不像别人那样讨厌 AI 工具的原因2

13-tridge-robot.svg

Andrew Tridgell Written by Andrew Tridgell

Footnotes:

1

dscli 是打算用系统容器云Incus来填补这块的空缺。

2

Andrew Tridgell 的名字常被简称为「Tridge」,听起来像个机器人名 字。早年有人拿这个做了个恶搞网站 tridge.com。如今这个域名成了一个真正 的 AI 驱动的农产品贸易平台,名字就叫 Tridge。所以他的笑点是:我名字听 起来像机器人 → 有人做了恶搞网站 → 如今这网站真成了 AI 公司 → 搞了半 天我可能真是个机器人,难怪我不讨厌 AI。