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

Но главным спором недели история стала из-за способа миграции. В посте от 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 не заменил инженерную дисциплину. Он сделал её важнее.
Comments
Sign in to comment.
No comments yet.