BunのRust書き換えについての私の考え
(andrewkelley.me)- Zigの創始者 Andrew Kelley は、BunのRust書き換えを、言語機能の勝敗というよりも、Zig Software Foundation(ZSF)とBun/Ovenの間の関係崩壊が表面化した出来事だと解釈している
- 初期のBunは、Zigを性能面での成果の基盤として認め、ZSFに年間 $60,000 規模で寄付していたが、VC-backedスタートアップになった後、組織運営とコード品質をめぐる不満が大きくなった
- ZSFはBunのコードベースにおけるハック的な実装、assertionの乱用、迅速な機能追加に比べて不足しているバグ修正・技術的負債の解消を懸念し、BunがZigの代表事例のように見える状況も負担と捉えていた
- Kelleyは、BunのRust移行記事がバグ削減をスタイルガイド vs 言語機能という構図にしていると批判し、実際の核心はバグ除去に投じたエンジニアリング時間とコード品質管理にあると見ている
- ZSFはBunからの寄付に感謝しているが、Anthropicによる買収後に寄付と関係は終了し、Rust書き換えによってZigとBunの事業上の利害関係が切り離されたことを前向きに受け止めている
BunとZigの初期の関係
- Jarredは約5年前にZigコミュニティに参加し、Kelleyは彼を、素早く試し多くを学ぶ「beginner energy」が強い人物と見ていた
- BunがJavaScriptツールチェーンとして注目されるにつれ、Zigにもより多くの関心が集まり始めた
- Kelleyは、Jarredならクラウドファンディングだけでもサンフランシスコ基準で安定した収入を作れたはずだと見ているが、Thiel Fellowship的な考え方とSilicon Valley流のアプローチを受け入れ、ベンチャーキャピタルを選んだと見ている
- 初期のBunはZigプロジェクトに好意的だった
- BunのWebサイトで、性能面の成果についてZigを評価していた
- Zig Software Foundationに年間 $60,000 規模の月次寄付を設定していた
- BunのRust書き換え記事でも、Zigプロジェクトへの感謝は本心に見えると評価している
VC-backedスタートアップになった後の亀裂
- BunがVC-backedスタートアップになった後、Jarredはコミュニティとともにオープンソースを育てる開発者から、事業運営者に近い存在になった
- Ovenの採用メッセージは、当初約9カ月間の高強度の仕事を予告し、work-life balanceが「働かない時間が多いという意味」なら合わないかもしれないと明らかにしていた
- Kelleyは、Ovenの面接者や社員と話す中で、Jarredのマネージャーとしての役割について否定的な話を繰り返し聞いたという
- 問題として挙げられたのは、コミュニケーション不足、非現実的な期待、共感の低さ、経験不足だった
- その結果、Zigで働きたいと考えていたコミュニティメンバーがOvenとBunを避けるようになった
- Jarredが生産性とスタートアップのexit戦略に集中するほど、KelleyのZigに対する長期ビジョンからは離れていった
- 例として、JarredはLanguage Server Protocolの実装とVSCode統合を優先してほしいと求めたが、Kelleyにはより大きな計画があった
ZSFが見たBunのコード品質問題
- Kelleyが挙げる核心的な問題はコード品質である
- Zigチームはユーザープロジェクトのソースコードを読み、言語の変更がユーザーにどのような影響を与えるかを確認し、変更による破損や性能回帰をテストしている
- Bunのコードベースでは、ZSFが懸念するプログラミング慣行が増えていった
- ハック的な実装が積み重なり続けた
- assertionの乱用があった
- 機能を素早く追加する一方で、振り返り、バグ除去、技術的負債の解消に費やす時間が少なかった
- Kelleyは、Bunのこうしたやり方がZigに対するメモリ安全性批判と結び付く可能性を懸念し、Zigプロジェクトとの社会的距離を置きたいと考えていた
- ZSFはBunをより良いプログラミング慣行へ導こうとしたが、効果を上げられなかった
Anthropicによる買収とRust書き換え
- ZSF内部では、Bunは純負債(net liability) に近いという判断が生まれた
- BunはZigの代表事例のように見えるが、実際には「Zigコードはこのように書くべきではない」という例に近い点が負担だった
- Kelleyは、Bunの「cloudの何かを売る」という事業計画を最初から粗いものと見ており、いつか売却されればZigも間接的にネガティブな宣伝を受ける可能性があると見ていた
- Anthropicによる買収後、ZSFは安堵した
- 寄付は静かに停止し、ZSFはそれを予想していた
- Bun側は月次ミーティングをキャンセルすることも出席することもなく、関係は終わったものと受け止められた
- ZSFは、数日以内にRust書き換えが来るのではないかと疑い、それを応援していた
- Anthropicによる買収後、ClaudeがBunで、BunがZigで書かれているという間接的なつながりだけでも、Zigコミュニティに負担が生じた
- drive-by slop contributionsが増えた
- LLMの出力をフォーラム投稿に貼り付けるAI熱心ユーザーが流入した
- Kelleyは、ZigがAIと結び付いたプログラミング言語として知られることを懸念している
- JarredがRust書き換えを発表すると、Kelleyはそれを大いに歓迎し、もはや「自分の問題ではない」という感覚を表明した
BunのRust書き換え記事への反論
- KelleyはBunのRust書き換え記事はよく書かれていると見つつも、いくつかの核心的な問題を指摘している
-
バグ削減の核心
- Bunの記事は、バグを避けるにはスタイルガイドとプログラミング言語機能のどちらかを選ばなければならないかのような構図を作っている
- Kelleyにとって、バグ除去の主な方法は、エンジニアリングリソースを投入してバグを見つけ、取り除くことだ
- TigerBeetleは時間をかけてバグを見つけて除去し、ZSFと健全な関係を維持したが、Bunはそのどちらもしなかったと見ている
-
テストスイートに関する矛盾
- Bunの記事は、100万行のレビューされていないコードをデプロイできる理由として、テストスイートが十分であることを挙げていると見ている
- Kelleyは、そうであればZigコードにはなぜ厄介なバグが多かったのか、テストスイートはZigコードのバグは捕まえられないが、100万行の未レビューコードのバグは捕まえられるのか、と問い返している
-
性能とLTO
- Bunの記事は性能向上をLTOのおかげとしているが、ZigはBunの全期間を通じてLTOをサポートしていたという
- Zigは以前LTOをデフォルトで有効にしていたが、LLVMのバグがあまりに多かったためデフォルトから外し、それらのバグはRustにも影響するという
- Kelleyは、ZSFがLTO有効化を勧めた可能性が高く、Bunはそれを聞かなかったのだろうと見ている
-
fuzzing
- Bunの記事はZigコードに対して誠実にfuzzingを行ったかのように示唆しているが、Kelleyは通話でBunチームが何もfuzzingしていないと言っていたという
-
バイナリサイズと
comptime- Bunの記事はバイナリサイズを削減するための複数のエンジニアリング作業をRust書き換えの根拠のように提示しているが、Kelleyはそれらの作業は書き換え自体とは無関係だと見ている
- それらの作業は、最初からZigコードベースで行うべきだったエンジニアリング作業に近い
- ZSFは何年にもわたり、Bunの
comptime乱用について警告しており、comptime/inlineの使用量とコンパイル時間を監査できるようにするtime report機能も作った
-
コンパイル速度
- Kelleyは、Bunの記事がコンパイル速度に触れていないと指摘している
- Zigコンパイラプロジェクトは約 600,000行 で、書き換え前のBunと同程度の規模である
- Kelleyの測定では、クリーンなキャッシュから最初からビルドするのに 16秒、インクリメンタルコンパイル有効化後の各 subsequent edit には 90ms かかる
- Rust書き換え後のBunの対応する測定値は何かと問うている
Kelleyの結論
- Kelleyにとって核心的な問題は、プログラミング言語機能ではなく関係崩壊である
- ZSFはBunから受け取った寄付に心から感謝しており、その資金をZig貢献者への報酬に使った
- Kelleyは、Jarred個人を悪意を持って批判しようとしているわけではないと線を引いている
- Jarredは自分とは好みや人生の目標が違うが、自分が望む人生を成功裏に築いたと見ている
- Jarredが幸せで成功していると受け止めており、悪意は持っていないという
- ただしKelleyは、ZSFとBunの事業上の利害関係がこれ以上絡み合わなくなったことを喜んでいる
- Rust書き換えの良し悪しを言語選択の基準として争う公開論争が終われば、双方の相互作用も終わると見ている
2件のコメント
記事を読んでみると、zig も bun もどちらも使いたくなくなりますね。
Hacker Newsでの意見
Andrewのコードを読んで本当に多くを学んだし、原文でも述べられているように、ZigなしにBunもなかったはず
「記事ではZigコードをファジングしたと主張しているが、通話中にBunチーム全員が何もファジングしていないと言っていた。これは露骨な捏造に見える」という部分については、Fuzzilli統合のPRがある: https://github.com/oven-sh/bun/pull/24826
FuzzilliがBunのZigコードで見つけた問題を修正したマージ済みPRもある: https://github.com/oven-sh/bun/pull/28926, https://github.com/oven-sh/bun/pull/28934, https://github.com/oven-sh/bun/pull/29255, https://github.com/oven-sh/bun/pull/29210, https://github.com/oven-sh/bun/pull/29199
「Fuzzilli」で検索すると、さらに多くのPRが出てくる: https://github.com/search?q=repo%3Aoven-sh%2Fbun+is%3Apr+Fuz...
zig build test --fuzz、つまりZig内蔵のファザーのことで、彼の範囲内にあるツールはそちらだと思うどちらも崇拝しているわけではなく、ただ会話全体が良い方向に進むどころか悪化しているように見えるので気になっている
事実確認の質問をしたという理由で低評価されるのは、かなり意味深だ。「最近まではファザーを使っていなかったので、どちらも正しい」のような簡単な答えかもしれないが、分からないので聞いているだけ
この記事はZigにとってプロらしくなく、気まずいものだ
Jarredについてはほとんど知らないが、昨日読んだ彼の記事はZigに感謝している雰囲気だったし、今見るとZigにかなりの金額も寄付している
この記事全体は、別の製品を選んだという理由で彼を公然と、個人的に攻撃している
Andrewがこの記事でZigの釈明になると思っているなら奇妙だし、実際には幼稚に見えるだけだ。あるいは単にJarredを攻撃したいだけなのかもしれない
誰もが歩くブランドになって常に発言を選別し、薄氷を踏むように歩き、「プロらしく」見せるために会社的な表現の陰に隠れなければならないのか?
今の世の中に必要なのは、率直さの少ない議論ではなく、より率直な議論であり、オンラインでのやり取りはますます本物らしさを失っているように思う
Zigは事実上、1人プロジェクトに近く、その1人がますます不安定な判断を下している
もちろん自分のプロジェクトなのだから権利はあるが、ほぼ兆ドル規模の価値を持つ企業なら、このようなサプライチェーンリスクを負いたくはないはずだ
Anthropicの立場では、Zigエコシステムにさらに投資するよりも、not-so-BDFLが一線を越えるリスクが明らかになった時点で芽を摘むほうがよい
一方でZigは、採用規模と開発期間を考えると、テストカバレッジが恥ずかしいほど低い
AIに対するZigの態度は完全に幼稚だ。大きな利益を得られる可能性があるにもかかわらず、どんな活用可能性も検討していない
PRスパムを防ごうとすることと、手足を縛って内部でも最も簡単で効果の高い領域にAIをまったく使わないことは別だ
AIでPRスパム内の実際のバグ候補を選別することもできるのに、まったく助けを借りないため、実際のバグが必要以上に長く放置されている
残念ながら、このような書き方にあまりにも慣れているオープンソース開発者が多く、それが私がオープンソース活動をやめた理由の一つでもある
まともな職場なら、このように振る舞えば解雇されるか、少なくとも懲戒処分を受けるだろう
「Jarredに対する個人的な批判はない」という文は、ほとんど全体が薄く覆い隠された個人批判のように見える文章の最後に置くには、かなり強い言い方だと思う
誰かに初心者エネルギーがあると言いながら、「失敗して学ぶ人」のような偽のポジティブさで包んだり、噂では「臭いマネージャー」と呼ばれていると書いたりするようなもの
「自分が悪いと言っているわけではないが、みんながこの人は悪いと同意していることをブログに書いておきたい」に近く、たとえ事実でもかなり趣味が悪く見える
自分もひどいマネージャーたちと働いているが、個人的な恨みは抱いていない
「噂網は大きく健全で、果汁たっぷりのブドウで満ちており、そのブドウの果汁はすべて同じメッセージを含んでいた:Jarredは臭いマネージャーだった」
「JarredはLLMを使う前から、すでにカスみたいな文章を書いていた」
奇妙なほど幼稚な文章だ。企業的なフィルターを通さず本音を語る文章は好きだが、そういう文章はその人がどう考え、どう動くのかも示す
優れたリーダーシップなら、企業的なフィルターを外しても結果はなおプロフェッショナルなものになるが、この文章はそれよりずっと劣る何かを露呈している
安全で、依存している人がいないときには完全に普通のことだ。マネジメント業務とは違う
Anthropicによる買収が終わるとZSFが安堵のため息をついた、というくだりが印象的だった。寄付が静かに止まったときも口座は用意されていて、月例ミーティングをキャンセルもせず出席もしなかったときにも驚かなかったということだ。関係はすでに終わっていた
こういうことは何度も見てきた。プロジェクトや組織が買収されると、彼らがしていた「良いこと」は派手に終了するのではなく、支援者が静かに無視し始めることでそのまま消えていく
彼らが兆候を読み取って備えていたというのは幸いだ。自分で苦労して学ぶ必要のない素晴らしい教訓であり、1~2人の大口寄付者に依存する自由・オープンソースプロジェクトは注意すべきだ
今後、開発者ツールのエコシステムでこういうことをはるかに多く見ることになりそうだ
このスレッドのほかの場所には文章のトーンに対する鋭い反応があるが、この文章でZigへの期待がしぼんだ
ドラマは面白いし、Andrewの本心はもしかすると尊敬に値するのかもしれないが、真剣なプロジェクトに必要なプロフェッショナリズムはこういうものではない
退屈で刺激がないように見えても、技術スタックとその運営にはそういう安定感を求めたい
Jarredが純損失だった可能性はあるが、BunはZigを使っていた非常に大きなプロジェクトであり、そのプロジェクトが離れることはAndrewが言うほどZigにとって良いことではない
彼は言語の成長よりも純粋性と理念にはるかに高い優先順位を置いているように見える。真剣なプログラミング言語にとっては、採用とクリティカルマスも重要な要素だ
Linusのメールの口調のせいでLinuxは真剣なプロジェクトになれなかった、と言うのに似ている
しかも直接書いたわけでもなく、個人ブログに書いた文章だ
重要なのは彼が言語に貢献してきたことではないのか?
なぜ必ず採用とクリティカルマスが重要なのか? より広い採用を諦めても、自分が望む純粋性と理念に合った言語を作ってはいけない理由は何なのか?
なぜすべてがユーザー成長と認知度に最適化されなければならないのか?
彼らがそう装っているとしても
この文章はとても新鮮だった。Bunの文章のPR的な表現をもっと洗練された形で返す誘惑は大きかったはずだが、そうしなかった
Jarredに否定的に見える事実を入れつつ自分の意見は慎重に隠す、たとえば「人々が彼を臭いマネージャーと呼んでいると聞いた。自分がそう言っているわけではなく、他の人たちがそう言っている」というようなやり方もできたはずだが、ただ率直でよかった
ただし、その性格や考えの中身はかなり受け入れがたい
文章の最初かつ最大の部分を推測的な人格攻撃に割いているせいで、著者の言葉を信頼しにくい
Zigの長所を整理する良い機会だった。mitchellhの布教と刺激的な記事のおかげで最近Zigを学んでみたいと思っていたが、この文章はZigを学びたい気持ちを冷ましてしまった
AndrewがJarredと彼の仕事の進め方・仕事への態度をどう見ているかについての内容はかなり見えるが、何が人格攻撃で、何が推測なのかどうかははっきり見えない
Jarred への個人攻撃は、Zig を使おうという主張にはあまり役立っていないように思う
言語に集中すべきで、「臭い管理者」みたいな表現を使うべきではなかった
正直、この文章を見ると Jarred と同じくらい Andrew も避けたくなる
ここ数か月、コミュニティの多くの人が目撃してきたことでもある
「Jarred が職業上の役割において、私たちのコミュニティの多くの人を離れさせたので、私たちは距離を置きたい」というのは、「Jarred は私生活で悪い人だ」という意味ではない
もちろんこの業界では、VC が仕事以外の私生活をどれだけ残してくれているかを考えると、ほとんど同じ意味に受け取られるかもしれないが、それは Andrew の問題ではない
Andrew の文体を擁護するつもりはない。より広いニューロタイプの読者に向けて話すときは、自身のニューロダイバーシティをもう少し抑えることもできたかもしれない
それでもこれは彼のプロジェクトであり、彼のコミュニティではすでに知られている特性で、これも既知の変数だ
「Andrew が Jarred の人格を暗殺しようとしている」という副次的な含意を付け加えず、Andrew が完全に本気だと仮定して読み直すと助けになるかもしれない
あからさまに悪意があると感じた文章を見たのは今回が初めてではない。婉曲に「率直」と呼べる程度ではない
「沈黙は選択肢ではなかったのか?」
「Jarred に対する個人的な批判はない」という言葉とは裏腹に、文章全体がJarred への個人批判のように感じられた
たとえ事実だとしても、この形で公開するのは賢明ではない。目的が Zig を擁護することだったなら、もっと個人的でないやり方でも可能だった
Bun を Zig から Rust に書き直すこの作業全体は、大きなマーケティング施策のように見える
Anthropic AI が本当にそこまで強力なら、なぜバグを直し、既存の Bun の Zig コードベースを再設計して、現在のバグだけでなく似たようなバグが今後生じないようにする、より野心的な作業を任せないのか?
それが Anthropic の感情を害したのだ
Anthropic はこうした仕掛けがなくても Bun を買収したがっていた可能性があると想像できる
数週間後、Bun は Rust への書き直しを始めた。明示はされていないが、二つの出来事は関連している可能性があると思う
どちらがより悪いのかは分からない