Переход Bun с Zig на Rust был бы крупной open-source историей и без AI. Bun — заметный JavaScript/TypeScript runtime, package manager, bundler и test runner. У него миллионы загрузок в месяц, большая аудитория на GitHub и реальные пользователи среди developer tools.

Миграция open-source runtime под контролем тестов и CI

Но главным спором недели история стала из-за способа миграции. В посте от 8 июля Jarred Sumner написал, что Bun был куплен Anthropic в декабре 2025 года, команда теперь работает в Anthropic, а для значительной части переноса с Zig на Rust использовалась pre-release версия Claude Fable 5. На следующий день Andrew Kelley, создатель Zig, ответил резким длинным текстом. Два треда на Hacker News превратили rewrite в публичный разбор языков, AI-агентов, тестов, code quality, денег и отношений внутри open source.

Простая версия звучит как "Rust победил Zig". Она почти бесполезна. Более важная версия такая: Bun проверяет старое правило против больших rewrites на практике. Может ли крупный инфраструктурный проект теперь решиться на миграцию, которая раньше считалась почти запретной, если у него есть сильная test suite, compiler feedback, CI, человеческий review и много агентной мощности?

Что изменилось

Bun начинался как Zig-проект. Sumner прямо пишет, что Zig сделал ранний Bun возможным. Проект вырос из быстрого порта esbuild с Go на Zig, а затем стал гораздо шире: transpiler, minifier, bundler, npm-compatible package manager, Jest-like test runner, module resolver, HTTP/WebSocket client и реализации Node.js APIs.

Эта широта сделала Bun полезным, но усложнила стабильность. В посте перечислены баги вокруг node:zlib, node:http2, UDP sockets, Buffer, TLS sessions, fs.watch, CSS parser и JavaScriptCore. Многие примеры — это use-after-free, double-free, leaks и ошибки cleanup в error paths.

Важно: Sumner не говорит, что Zig плохой язык. Его аргумент уже. Bun находится на неприятной границе: JavaScript runtime, JavaScriptCore GC, native resources, C/C++ boundaries, asynchronous callbacks и manual memory management. В такой среде перенос большего числа ownership-правил в компилятор выглядит разумно.

Rust не делает FFI безопасным автоматически. Он не убирает unsafe. Он не доказывает, что тесты покрывают всё. Но если проект регулярно ловит lifetime bugs, ownership model и Drop могут перевести часть ошибок из production crashes в compile-time work.

Масштаб был необычным

GitHub PR oven-sh/bun#30412 делает историю материальной. Проверки показывают merged PR с тысячами commits, более чем двумя тысячами changed files и примерно миллионом additions. GitHub сейчас показывает Rust как основной язык репозитория.

Это не weekend refactor, а миграция кодовой базы.

И это не обычный ручной rewrite. Sumner описывает agentic process: workflows, trial runs, compiler errors, test failures, adversarial review и исправление самого процесса, когда агенты делали глупости. Simon Willison назвал пост detailed case study in agentic engineering и отдельно выделил ключевой фактор: большая TypeScript test suite Bun могла работать как conformance suite, независимая от языка реализации.

Это главный переносимый урок. Агентам не доверяли потому, что они умные. Их ограничивали внешним oracle: скомпилировать, прогнать тесты, сравнить поведение, повторить. Когда test suite не привязана к языку реализации, она становится целью миграции.

Что AI изменил

AI-агенты изменили экономику rewrite. Люди всё равно проектировали миграцию, читали outputs, настраивали процесс, принимали решение о merge и несут ответственность. Но agents могли превратить compiler errors и test failures в большую параллельную очередь задач.

Это не значит, что миллионнострочные rewrites стали безопасными. Скорее, они стали возможными для очень узкого класса проектов.

Разница в зрелости процесса. У Bun были runtime-agnostic tests, CI, memory testing, fuzzing claims, компилятор, заставляющий явно решать ownership, и команда, готовая следить за loop. Проект без таких условий не должен копировать заголовок. "Пусть agents перепишут всё" — не стратегия. "Сначала построить tests, которые могут судить реализацию, и только потом поставить agents под этот контроль" — гораздо ближе к стратегии.

Почему спор стал таким острым

Ответ Andrew Kelley — это не только техническая заметка. Там есть история отношений Bun и Zig community, критика engineering practices, разговор о code quality и более широкий тезис о том, как venture-backed open source меняет incentives. Одни читатели увидели нужную критику. Другие хотели больше технической защиты Zig и меньше личного тона.

Это важно, потому что open source — не только код. Это community, reputation, donations, hiring pipeline и identity. Bun долго был одним из самых видимых Zig success stories и донатил Zig Software Foundation. После acquisition Anthropic и перехода на Rust эта связь стала частью публичного конфликта.

Не стоит превращать это в табло. Zig не стал плохим языком из-за решения Bun. Rust не стал магией, потому что Bun его выбрал. Событие показывает, насколько хрупкими бывают отношения между приложением и языковым сообществом, которое помогло ему вырасти.

Технические caveats остаются

Rust уменьшает часть рисков, но не убирает сложность Bun. В проекте остаются JavaScriptCore, native libraries, FFI, unsafe Rust и callback-heavy runtime code. Issue про PathString::slice и Miri показывает: Rust-port всё равно требует undefined-behavior checks и CI discipline.

Тесты тоже ограничены. Они доказывают только то поведение, которое проверяют. Большая conformance suite ценна, но это не математическое доказательство, что rewrite совпадает со всеми edge cases. Для runtime и Node-compatible APIs это особенно важно.

Статус релизов тоже нужно проверять. На момент research последняя публичная release page показывала Bun v1.3.14 от мая. В постах говорится, что Rust-port уже используется в Claude Code v2.1.181 и новее, но обычным пользователям Bun не стоит автоматически считать, что их stable channel уже полностью на Rust.

Что делать пользователям

Если Bun используется в production, практический вывод простой: не паниковать и не радоваться вслепую. Проверить release channel. Прогнать собственные tests. Смотреть issues по platform differences, performance regressions, memory behavior, package manager edge cases и Node compatibility.

Rewrite может уменьшить важные memory bugs. Он может принести новые compatibility differences. Оба утверждения могут быть правдой одновременно.

Для команд, выбирающих между Bun, Node и Deno, Rust-port — сигнал, что Bun становится более институциональным, лучше финансируется и готов платить за глубокий technical debt. Но это также сигнал, что governance и roadmap Bun теперь связаны с приоритетами Anthropic.

Что могут взять maintainers

Копировать стоит не миллион строк diff. Копировать стоит подготовку.

Нужна test suite, описывающая поведение без привязки к implementation details. Нужен быстрый CI. Нужны performance и compatibility baselines. Нужны fuzzing и memory checks там, где они имеют смысл. Нужны маленькие trial migrations до большого шага. Compiler errors должны быть feedback, а не шум. Review должен смотреть не только final patch, но и процесс генерации кода.

А вот драму копировать не стоит. Language migrations и так эмоциональны. Если проект вырос на экосистеме языка, лучше заранее объяснять причины, честно благодарить старый выбор и не превращать community в побочный ущерб.

Главный урок

Bun Rust rewrite важен не потому, что он доказывает победу Rust или конец Zig. Он показывает новый тип open-source события: AI-assisted infrastructure migration, сделанная публично, с реальным кодом, тестами и пользователями.

Это не доказывает, что agents могут безопасно переписать любой проект. Но показывает, что граница возможного для maintainers сдвигается.

Большие rewrites всё ещё опасны. Но их cost model меняется. Проекты с сильными conformance suites, observable behavior, disciplined CI и человеческим review могут попробовать миграции, которые раньше отвергали сразу. Проекты без этого просто быстрее произведут больший беспорядок.

AI в истории Bun не заменил инженерную дисциплину. Он сделал её важнее.