私は今年,Vue.js や Markdown のツールチェインを開発し,微力ながら Vite+ や Vue.js へのコントリビュートも続けてきた.その中で,何度も実感したことがある.自分の成果は,自分だけの努力でできているわけではない.
Vue のコンパイラ,vuejs/language-tools,eslint-plugin-vue,Storybook,SWC,esbuild,Biome,Deno,Prettier,VitePress.さらに,Vetur,Vue DX,JSLint,Acorn,Babel,VuePress,Knockout,Backbone.js.直接利用してきたものもあれば,設計や考え方から学んできたものもある.
これらの名前の向こうには,数え切れない人や企業と,費やされてきた時間がある.動くコードだけでなく,失敗した実装,採用されなかった案,不具合の調査,議論,保守の積み重ねがある.私が今から作れるのは,誰かが先にそこを歩いてくれたからでもある.
成果は屍の上にある.ここでいう屍には,役目を終えた実装や,表に残らなかった試行錯誤も含まれる.もちろん,今も開発が続くプロジェクトと,それを支える人たちの努力も,私の成果の土台になっている.
だから私は,先人への敬意と,その成果を踏まえて新しく作る自由を,どちらも大切にしたい.
ここから挙げる Bun と VoidZero の話は,あくまで一つの例である. 私が考えたいのは,特定の企業同士の対立に限った話ではない.ソフトウェアのリライトや移植に限らず,先人の成果を受け継いで新しいものを作る営みには,同じ問いがあると思っている.
最近の一例として,Bun に型チェッカーやリンター,フォーマッターを実装する動きが話題になっている.Jarred Sumner による PR では,typescript-go の型チェッカーの移植や,ESLint・Oxlint,Prettier・Oxfmt との互換性を目指す実装が公開されている.
こうした動きに対する反応を見て,私は少し複雑な気持ちになった.
たとえば,Christoph Nakazawa は,VoidZero の積み重ねに対する謝意の乏しさを強く批判している.Evan You は,Anthropic が蒸留への防御を掲げる姿勢と Bun の動きを並べて皮肉っている.この二つを,同じ理由から出た反応として扱うことはできないし,これだけで本人たちの意図のすべてが分かるわけでもない.ここでは,考えるきっかけになった例として挙げている.
私も VoidZero の取り組みを長く応援してきた.チームで積み重ねた仕事が,別の実装の登場によって軽く扱われるように感じたら,穏やかではいられないだろう.その気持ちは理解できる.ただ,少し立ち止まって考えたいこともある.
Rollup に対する Rolldown,ESLint に対する Oxlint,Prettier に対する Oxfmt.既存の道具が担ってきた役割を,別の設計や実装で引き受け,より良いものを目指す営みは,これまでも続いてきた.私自身も,その流れの中にいる.
もちろん,すべての再実装が同じというわけではない.元のプロジェクトとの関係,成果の紹介の仕方,貢献の還元,ライセンスの扱いには違いがある.だから,謝意や姿勢への批判に対して「あなたたちも再実装している」と返すだけでは,答えにならない.
それでも,自分たちが作り直す自由を肯定するなら,他の誰かが作り直す自由にも,同じ基準を向けたい.
AI が変えつつあるのは,この営みの速度と規模なのだと思う.長い時間をかけて育てたものに,少人数の開発が短期間で追いつくように見える.そこに戸惑いや不公平感が生まれることはあるだろう.ただし,それは私の推測であって,誰かの発言の動機を決めつけたいわけではない.
そして,AI を使ったからといって,作った人の努力がなくなるわけではない.何を作るかを決め,動作を確かめ,互換性を詰め,保守を引き受ける仕事は残る.先人の努力を尊重するために,後から作った人の努力をゼロとして扱う必要はない.
同時に,短期間で作れたからといって,それまでの年月が無駄だったことにもならない.仕様やテスト,実装例,使う人たちの知見がすでに存在する場所から始めることと,それらを一つずつ作ることは違う.先人の成果を土台にした速さなら,その土台も含めて語ってほしい.新しく作る側にも,その姿勢を求めたい.
AI プロバイダー自身が,その力を使って既存の OSS と競合する実装を作って良いのか.他の開発者とは比べものにならない計算資源を持つ企業が,同じ競争の場に入ってくることを,どう考えるのか.そこに倫理的な問いがあることも,もちろん理解している.
それでも,AI の活用が広がることは,もはや時代の流れだと私は思う.そして,私たち自身も,AI を開発してきた人たちの努力の上にあるツールを使っている.自分たちが恩恵を受けるときには道具として受け入れ,その作り手が競争相手になった途端に,彼らの積み重ねを見なくなることは避けたい.
Bun が Anthropic に買収されたことも,そこまでの価値を築いてきた Bun の努力と切り離せない.Anthropic が優れた AI ツールを生み出したことも,彼ら自身の成果である.その成果によって得た資金や計算資源,技術を,次の開発に活用することには,当然,正当性があるだろう.
資源に差があることは事実として考えるべきだが,差があるというだけで,その活用が直ちに不当になるとは思わない.具体的にどこに不公正があるのかを問うことと,競争相手が築いた成果を認めることは両立できる.先人への敬意を求めるなら,AI を作る側の努力も,その視野に入れておきたい.
ここで,OSS を「誰の所有物でもないもの」と言い切るのは正確ではない.個々のコードには著作権があり,利用にはライセンスの条件がある.オープンソースは,改変や再配布を認める条件のもとで開かれているのであって,権利が消えるわけではない.
ただ,そのソフトウェアの権利を持つことと,JavaScript のツールチェインという分野そのものを所有することは違う.先に努力したことによって,後から別の実装が現れない保証を得られるわけではない.私たちは,自分たちも先人から学びながら,そういう場所でものを作っている.
資本主義の中で,企業やチームが自分たちの事業を守ることに正当性があるのも,もちろんよく分かる.開発を続けるには資金が要るし,雇用も投資も守らなければならない.競合の登場に対して,自分たちの立場を表明する必要もあるだろう.
ただし,事業を守るための主張は,その限りでは資本主義上の防衛である.その正当性が,そのまま技術全体やコミュニティ全体にとっての正しさになるわけではない.「自分たちの事業にとって困る」と「その実装が存在するべきではない」のあいだには,距離がある.守る側も,それを応援する側も,自分たちが何を守ろうとしているのかは自覚していたい.
これは,今回の批判がすべて事業上の都合でできている,という意味ではない.権利の侵害や不正確な宣伝,敬意を欠く振る舞いがあるなら,その具体的な問題を批判すれば良い.事業上の利害と,技術上の評価と,他者への態度を,一つの敵意にまとめてしまいたくないのである.
私が最も望まないのは,その対立が,帰属する企業やコミュニティによる分断へ変わることだ.どちらの道具を使うか,誰を応援しているかによって,相手の話を聞けなくなる.一緒に良いものを作れたはずの人や企業が,互いを敵として扱うようになる.それは本当に悲しい.
AI より前から,再実装も競争も,それに伴う摩擦もあった.AI がその速度を上げる今だからこそ,私たち自身も似た営みをしてこなかったか,何に対して異議を唱えているのか,その言葉がどんな関係を残すのかを,もう少し冷静に考えたい.
私は,Bun と VoidZero のどちらの活動も,引き続き応援したい.そして,これは他のプロジェクトでも同じだ.先に道を拓いた人と,そこから新しく作る人の両方を応援したい.私自身も,作りたいソフトウェアを作り続けたい.そのとき,自分の成果を構成している先人の努力への感謝を,忘れずにいたい.
そしていつか,私が作ったものを踏まえて,誰かが別のソフトウェアを作ったとしても,私はそのソフトウェアを応援したい.自分が学び,作り直す側であるときだけでなく,誰かに学ばれ,作り直される側になったときにも,同じ敬意を持っていたい.
私たちの成果には,先人の努力が含まれている.そして,私たちの努力も,いつか誰かの成果の土台になる.そのつながりを,感謝し,応援し合えるものとして続けていきたい.