JavaScript运行时Bun最近完成了一次重大重写——从Zig语言迁移到Rust。这次重写据称大量使用了AI辅助翻译,但很快就暴露出了严重的安全问题。
事件经过
2026年5月14日,GitHub用户AwesomeQubic在Bun仓库提交了一个issue #30719,标题直接写道:”代码库未通过基本的Miri检查,safe Rust中存在未定义行为。请考虑不要用vibe coding写Rust,AI不擅长写Rust,建议雇一个真正的Rust开发者。”
Miri是Rust官方提供的未定义行为(Undefined Behavior)检测工具,能够发现编译器无法捕获的内存安全问题。整个Bun的Rust代码库未能通过Miri检查,这意味着在理论上”安全”的Rust代码中,实际上存在内存安全漏洞。
具体技术问题
报告者展示了一个具体的问题:PathString::init()函数被标记为safe,但实际上它会擦除切片的生命周期信息,导致编译器接受会产生悬空引用的代码。
fn main() {
let test = Box::new(*b"Hello World");
let init = PathString::init(&*test);
drop(test);
println!("{:?}", init.slice()); // 悬空引用 = 未定义行为
}
这段代码在Miri下运行会产生明确的错误:Undefined Behavior: constructing invalid value of type &[u8]: encountered a dangling reference。
简单来说,这个Bug允许程序在对象被释放后仍然访问其内存——这是最经典的内存安全漏洞类型之一,在C/C++中很常见,但Rust的设计初衷就是要在编译期杜绝这类问题。
修复情况
Bun的自动化账号”robobun”(一个AI协作者机器人)很快做出了回应,指向了PR #30728。该PR将PathString::init和dir_iterator::next()标记为unsafe fn,添加了生命周期约束文档,审计了约70个调用点并添加了安全注释,还增加了编译失败的文档测试。
社区反应
这个issue在Hacker News上获得了471个赞和337条评论,引发了广泛讨论:
- AI代码质量担忧:这次重写据称增加了100万行代码,在大约一周内完成,且人工审查极少。社区质疑大规模使用AI翻译代码的可靠性。
- PR与现实的落差:Bun官方大张旗鼓地宣传”用内存安全的Rust在几周内完成重写”,但实际的质量问题只在一个GitHub issue中被提及。信息传播的不对称性令人担忧。
- 信任危机:有用户表示,他们原本尊重Bun基于Zig的技术决策,但这次AI驱动的重写代表了一种他们”无法尊重”的决策方式。
- AI机器人回复引发不满:第一个回复来自AI机器人”robobun”而非真人开发者,这让很多人感到不安。考虑到Bun已被Anthropic收购,有人讽刺道”这就是Anthropic想要的:让用户干活,训练机器人,然后邀功”。
对站长和开发者的启示
- 不要盲目信任AI生成的代码:即使是”安全”语言Rust,AI生成的代码也可能引入未定义行为。在生产环境中使用AI辅助生成的代码前,务必进行充分的审查和测试。
- 关注依赖项的代码质量:如果你的项目依赖Bun,建议关注相关修复的进展。在修复完全落地前,可以考虑暂时使用Node.js或其他运行时。
- vibe coding的边界:AI辅助编程在快速原型开发中很有价值,但对于系统级基础设施软件(如运行时、编译器),过度依赖AI而减少人工审查是危险的。
- 工具链很重要:如果你使用Rust开发,建议在CI/CD中集成Miri检查,及早发现类似的内存安全问题。
简评
Bun从Zig到Rust的重写本身就是一个有争议的决定,而大量使用AI辅助翻译更是雪上加霜。这个事件提醒我们:AI是强大的编程助手,但它不能替代工程师对代码质量的把控。尤其是在安全敏感的基础设施代码中,”能跑”和”安全可靠”之间还有很长的距离。
本文参考来源:
GitHub Issue #30719: Codebase fails basic miri checks, allows for UB in safe Rust
Hacker News讨论
















暂无评论内容