Rust重写Bun背后:Zig创始人首次回应分手真相


代码写完就完事了?不,写代码的人才是最复杂的变量。

本文深入分析Bun从Zig重写为Rust这一技术决策背后的复杂动因,探讨开源项目、创业公司与编程语言选择之间的微妙关系。

从Zig项目创始人的视角,揭示了Bun项目从获得关注到被收购的完整过程,以及团队管理、代码质量、技术债务等问题如何影响项目走向,最终导致重写决策。文章直面编程语言选择背后的管理哲学、社区文化和个人发展等深层次问题。

历史总是惊人地相似

五年之前,Jarred第一次出现在Zig社区的时候,身上带着一股独特的气质。这种气质怎么说呢,就像那种刚学会骑自行车就敢去参加环法自行车赛的选手,勇气可嘉,但技术嘛,实在不敢恭维。他快速尝试各种想法,碰到问题就直接往里跳,也不管自己有没有准备好。这种做法的结果就是,工程水平马马虎虎,但他本人倒是学了不少东西。

说实话,这种态度放在年轻人身上其实挺健康的。特别是对于学生来说,这种莽撞的探索精神反而是最好的成长方式。就像你打游戏,如果一直只打简单模式,永远也学不会高级操作。Jarred就是这样,通过不断地犯错、尝试,他在快速积累经验。

后来他把精力都投入到Bun这个项目上,很快就吸引了很多人的注意。JavaScript本来就是世界上使用人数最多的编程语言,所以但凡出现一个看起来很有前途的新工具,都会有很多人关注。这不难理解,就像一条美食街上新开了一家店,大家都想去尝尝鲜。

创业之路的诱惑与选择

这种关注度其实可以有很多种利用方式。比如说,Jarred完全可以靠众筹过得很滋润,就算是旧金山那种物价高得离谱的地方也不成问题。但他走的是另一条路,他接受了Thiel Fellowship的教育理念,这跟传统大学教育完全是两个路子。说白了他从很早就被培养成了那种无条件接受硅谷思维模式的人,所以他选择了拿风投。

从最开始的时候,Jarred对Zig项目还是很感激的。他在Bun官网上特别提到Zig对项目性能提升的贡献,还每个月给Zig软件基金会捐5000美元,一年下来就是6万美元。说实话,他不这么做也没人会说啥,但他做了,这一点确实挺够意思的。就连在他那篇宣布重写Rust的博客文章里,也能看出他对Zig项目是真心实意地感谢。

但是问题来了,一旦Bun变成了一家拿了风投的创业公司,事情就开始变得不一样了。Jarred不再是在做一个自由开源的软件项目,他是在经营一家企业。他不再只是跟社区一起学习和成长,而是开始当起了老板。就在这个转变发生的时候,他身上的那种特气质就让我感觉不太对劲了。

管理者的迷之操作

一个人选择牺牲自己的生活平衡,那是他的自由。但要求别人也这么做,这就完全是另一回事了。Oven公司发过一条推特,说公司前九个月会很辛苦,如果工作生活平衡对你来说很重要的话,那可能不太适合这里。这话说的,等于是在告诉求职者:我们这里就是要把你榨干。

有意思的是,人们是会互相交流的。我认识一些去Oven面试过的人,也认识一些在那里工作过的人,他们之间也会互通有无。经过这一圈下来,大家达成了一个共识:Jarred当管理者真的很糟糕。沟通能力差,期望值不符合实际,对员工缺乏同理心,完全没有管理经验。从就业角度来说,简直就是一场灾难。

这就导致了一个很尴尬的局面:虽然Zig社区的人都挺想找一份写Zig代码的工作,但大多数人都对Oven和Bun敬而远之。你想啊,谁愿意去一个管理者风评这么差的地方上班?这就好比一家餐厅,虽然菜可能不错,但听说老板脾气特别差,服务员态度也不好,你还会想去吗?

代码质量成了致命伤

与此同时,Zig项目和Jarred之间的裂痕也越来越大。他一心只想着提高生产效率和创业公司的退出策略,这跟我对Zig项目的长远规划越来越不合拍。记得他老是催我放下其他所有事情,先去做语言服务器协议和VSCode集成,可我那时候有更大的计划要忙。

但最关键的问题出在代码质量上。Zig团队会定期检查用户项目的代码,看看语言对用户的影响怎么样,测试新改动会不会造成问题,还要检查有没有性能退化。当我们看到Bun代码库的时候,真的被吓到了。各种黑科技堆叠,滥用断言,最要命的是,功能开发得飞快,但几乎不花时间反思和修bug。

说句实在话,Jarred在有LLM这种AI工具之前就已经在写这种代码了。虽然我们没权力去管用户怎么写代码,但你也能理解,当有人整天对着你喊内存安全的时候,你肯定想跟这种不靠谱的项目保持距离。我们试图指导他们改进编程实践,但效果不大。公司内部确实有几个非常优秀的人在努力做好,但面对整个公司的问题,个人能做的实在太有限了。

分道扬镳的前奏

到这个时候,ZSF内部都觉得Bun已经成了一个累赘,而且这还是RoboBun成为第一大贡献者之前的事情。Bun被很多人当成Zig语言的代言项目,可实际上它恰恰是反面教材。这就让人很不舒服了。再加上迟早有一天他们要卖掉公司,到时候我们肯定会被牵连,还会失去那笔定期捐款。

说实话,他们那个所谓的卖点云计算服务的商业模式,从一开始就很虚。所以当Anthropic最终收购Bun的时候,我们反而松了一口气。当捐款悄无声息地停了,我们的账户早有准备。当他们既没有取消每月例会也没有出席的时候,我们一点都不意外。这段关系就这么结束了。

重写Rust这件事其实早有预兆。收购发生没几天,我们就猜到他们要用Rust重写了。而且我们还挺支持的!被一家大AI公司收购本身就很麻烦,因为Claude用Bun写的,Bun用Zig写的,这种间接关联不仅带来了大量垃圾代码贡献,还引来了一堆没品位的AI狂热分子,往论坛里贴AI生成的内容。

我当时真怕Zig就此被人当成是跟AI绑定的编程语言,那可真是够呛。所以当Jarred宣布要用Rust重写的时候,我们都高兴坏了。这简直好得不太真实。说真的,我没想到技术层面能做到这一步,但他确实做到了。现在我可以端着一杯茶,慢慢欣赏这一切了。

细细品读那篇博客

那篇博客写得很专业,几乎就像是万亿市值公司的市场部花了大价钱写出来的。但是有些地方我实在忍不住要吐槽。文章里暗示你要么依赖代码规范,要么依赖编程语言特性来避免bug,这种说法其实是在偷换概念。避免bug最核心的方法,是投入足够的工程资源去做这件事。他们给TigerBeetle的赞许明显不够,人家就是踏踏实实地花时间找bug修bug,跟ZSF保持良好关系,而Bun完全没有这么做。

他们说要靠测试套件来把关那一百万行未经审查的代码,那既然测试套件这么厉害,怎么之前写Zig代码的时候老说有那么多烦人的bug?测试套件能抓Zig代码的bug,换成Rust就能抓一百万行垃圾代码的bug了?这个逻辑说不通啊。

性能提升被归结于LTO,但Zig从一开始就支持这个功能。以前默认是开启的,后来遇到太多LLVM的bug才改成默认关闭,这些问题在Rust里同样存在。我们肯定提醒过他们去试试开启LTO,但他们压根没听。

博客里说他们给Zig代码做了模糊测试,可在我们开会的时候,整个Bun团队明明说他们什么模糊测试都没做。这基本就是在胡编乱造了。文章还列举了一大堆减少二进制大小的工程工作,想证明Rust版的Bun更好,但这些工作跟重写本身根本没关系。我猜这就是为什么博客文章拖了那么久才发出来,你们是在做那些本来就应该在Zig代码库里做的事情。

我们早就警告过你们滥用comptime的问题,还专门做了时间报告工具,就是给那些需要审查comptime和编译时间的大型项目用的。我注意到他们完全没提编译速度。Zig编译器项目大概有60万行代码,跟重写前的Bun差不多大,从头编译只要16秒,之后每次增量编译就90毫秒。Bun重写后对应的数据是多少呢?

这一切告诉我们什么

回过头来看,我想把几件事情说清楚。

第一,我真心感谢Bun给ZSF的捐款,这些钱我们都用来支付贡献者做Zig开发了。
第二,我对Jarred个人没什么意见。他跟我品味不同,追求的东西不一样。但他现在确实活得挺开心的,也成功了。他找到了实现自己所有愿望的方法,活在了他的效率幻想里,钱也赚够了,还有点小名气。

说真的,我觉得他混得挺好的,我也不希望他倒霉。但我真的很高兴我们的利益不再绑在一起了!等网上这些人停止争论这次重写对Bun到底好不好,我相信我们之间也就没什么交集了。

总结:原本以为编程语言之争才是重写核心,结果发现代码之外的利益关系才是真正的修罗场。人散了,戏完了,茶凉了,只有键盘侠还在敲着谁对谁错。

网友观点

根据Reddit r/rust板块的网友评论,各方观点总结如下:

支持Andrew Kelley的网友认为:
这篇文章是对Bun团队不负责工程实践的正当警告。网友指出Bun代码库存在严重漏洞,有实际的安全问题被曝光,而且整个PR讨论过程全是AI机器人在自说自话。他们认为Jarred用Rust重写并贬低Zig的做法本身就很不厚道,Andrew的回应已经算客气了。

批评Andrew Kelley的网友认为:
这篇文章完全是一次人身攻击,嘴上说不是针对个人,实际上从编程能力到管理能力全都骂了个遍。网友觉得Jarred至少给ZSF捐了那么多钱,也一直在感谢Zig项目,Andrew这样公开撕破脸很掉价。有人直言看了这文章更不想碰Zig了,觉得作者太自以为是。

中立理性的网友指出:
双方都不太靠谱,一个是被硅谷资本洗脑的创业者,一个是ego爆棚的语言作者,这整件事就是行业最糟糕一面的缩影。技术争论被个人恩怨绑架了,谁也说不清到底谁对谁错。但有个共识:Bun本来就不稳定,现在让AI重写一遍,生产环境谁敢用啊?