{"schema_version":"1.0","service":"Publicasta","type":"article","id":119,"slug":"bun_rust_rewrite_ai_agents_tests_2026_07_10","title":"Rust-rewrite Bun — это не просто спор Rust против Zig","excerpt":"Bun превратил миллионнострочную миграцию в публичный тест AI-assisted open-source engineering. Главный урок — не язык, а тесты, CI и ответственность maintainers.","language":"ru","default_language":"en","canonical_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=ru","image":{"url":"https://publicasta.com/storage/projects/10/pages/119/2026/07/59e940a3-24f6-438a-a939-38d10ec18c05.webp","alt":"Миграция open-source runtime под контролем тестов и CI"},"publisher":{"id":10,"slug":"open_source_radar","name":"Open Source радар","url":"https://publicasta.com/open_source_radar"},"author":{"name":"Anton R"},"published_at":"2026-07-10T06:40:45+00:00","updated_at":"2026-07-10T06:40:45+00:00","content_markdown":"Переход Bun с Zig на Rust был бы крупной open-source историей и без AI. Bun — заметный JavaScript/TypeScript runtime, package manager, bundler и test runner. У него миллионы загрузок в месяц, большая аудитория на GitHub и реальные пользователи среди developer tools.\n\n ![Миграция open-source runtime под контролем тестов и CI](https://publicasta.com/storage/projects/10/pages/119/2026/07/59e940a3-24f6-438a-a939-38d10ec18c05.webp)\n\n Но главным спором недели история стала из-за способа миграции. В посте от 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.\n\n Простая версия звучит как \"Rust победил Zig\". Она почти бесполезна. Более важная версия такая: Bun проверяет старое правило против больших rewrites на практике. Может ли крупный инфраструктурный проект теперь решиться на миграцию, которая раньше считалась почти запретной, если у него есть сильная test suite, compiler feedback, CI, человеческий review и много агентной мощности?\n\n ## Что изменилось\n\n 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.\n\n Эта широта сделала Bun полезным, но усложнила стабильность. В посте перечислены баги вокруг node:zlib, node:http2, UDP sockets, Buffer, TLS sessions, fs.watch, CSS parser и JavaScriptCore. Многие примеры — это use-after-free, double-free, leaks и ошибки cleanup в error paths.\n\n Важно: Sumner не говорит, что Zig плохой язык. Его аргумент уже. Bun находится на неприятной границе: JavaScript runtime, JavaScriptCore GC, native resources, C/C++ boundaries, asynchronous callbacks и manual memory management. В такой среде перенос большего числа ownership-правил в компилятор выглядит разумно.\n\n Rust не делает FFI безопасным автоматически. Он не убирает unsafe. Он не доказывает, что тесты покрывают всё. Но если проект регулярно ловит lifetime bugs, ownership model и Drop могут перевести часть ошибок из production crashes в compile-time work.\n\n ## Масштаб был необычным\n\n GitHub PR oven-sh/bun#30412 делает историю материальной. Проверки показывают merged PR с тысячами commits, более чем двумя тысячами changed files и примерно миллионом additions. GitHub сейчас показывает Rust как основной язык репозитория.\n\n Это не weekend refactor, а миграция кодовой базы.\n\n И это не обычный ручной 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, независимая от языка реализации.\n\n Это главный переносимый урок. Агентам не доверяли потому, что они умные. Их ограничивали внешним oracle: скомпилировать, прогнать тесты, сравнить поведение, повторить. Когда test suite не привязана к языку реализации, она становится целью миграции.\n\n ## Что AI изменил\n\n AI-агенты изменили экономику rewrite. Люди всё равно проектировали миграцию, читали outputs, настраивали процесс, принимали решение о merge и несут ответственность. Но agents могли превратить compiler errors и test failures в большую параллельную очередь задач.\n\n Это не значит, что миллионнострочные rewrites стали безопасными. Скорее, они стали возможными для очень узкого класса проектов.\n\n Разница в зрелости процесса. У Bun были runtime-agnostic tests, CI, memory testing, fuzzing claims, компилятор, заставляющий явно решать ownership, и команда, готовая следить за loop. Проект без таких условий не должен копировать заголовок. \"Пусть agents перепишут всё\" — не стратегия. \"Сначала построить tests, которые могут судить реализацию, и только потом поставить agents под этот контроль\" — гораздо ближе к стратегии.\n\n ## Почему спор стал таким острым\n\n Ответ Andrew Kelley — это не только техническая заметка. Там есть история отношений Bun и Zig community, критика engineering practices, разговор о code quality и более широкий тезис о том, как venture-backed open source меняет incentives. Одни читатели увидели нужную критику. Другие хотели больше технической защиты Zig и меньше личного тона.\n\n Это важно, потому что open source — не только код. Это community, reputation, donations, hiring pipeline и identity. Bun долго был одним из самых видимых Zig success stories и донатил Zig Software Foundation. После acquisition Anthropic и перехода на Rust эта связь стала частью публичного конфликта.\n\n Не стоит превращать это в табло. Zig не стал плохим языком из-за решения Bun. Rust не стал магией, потому что Bun его выбрал. Событие показывает, насколько хрупкими бывают отношения между приложением и языковым сообществом, которое помогло ему вырасти.\n\n ## Технические caveats остаются\n\n Rust уменьшает часть рисков, но не убирает сложность Bun. В проекте остаются JavaScriptCore, native libraries, FFI, unsafe Rust и callback-heavy runtime code. Issue про PathString::slice и Miri показывает: Rust-port всё равно требует undefined-behavior checks и CI discipline.\n\n Тесты тоже ограничены. Они доказывают только то поведение, которое проверяют. Большая conformance suite ценна, но это не математическое доказательство, что rewrite совпадает со всеми edge cases. Для runtime и Node-compatible APIs это особенно важно.\n\n Статус релизов тоже нужно проверять. На момент research последняя публичная release page показывала Bun v1.3.14 от мая. В постах говорится, что Rust-port уже используется в Claude Code v2.1.181 и новее, но обычным пользователям Bun не стоит автоматически считать, что их stable channel уже полностью на Rust.\n\n ## Что делать пользователям\n\n Если Bun используется в production, практический вывод простой: не паниковать и не радоваться вслепую. Проверить release channel. Прогнать собственные tests. Смотреть issues по platform differences, performance regressions, memory behavior, package manager edge cases и Node compatibility.\n\n Rewrite может уменьшить важные memory bugs. Он может принести новые compatibility differences. Оба утверждения могут быть правдой одновременно.\n\n Для команд, выбирающих между Bun, Node и Deno, Rust-port — сигнал, что Bun становится более институциональным, лучше финансируется и готов платить за глубокий technical debt. Но это также сигнал, что governance и roadmap Bun теперь связаны с приоритетами Anthropic.\n\n ## Что могут взять maintainers\n\n Копировать стоит не миллион строк diff. Копировать стоит подготовку.\n\n Нужна test suite, описывающая поведение без привязки к implementation details. Нужен быстрый CI. Нужны performance и compatibility baselines. Нужны fuzzing и memory checks там, где они имеют смысл. Нужны маленькие trial migrations до большого шага. Compiler errors должны быть feedback, а не шум. Review должен смотреть не только final patch, но и процесс генерации кода.\n\n А вот драму копировать не стоит. Language migrations и так эмоциональны. Если проект вырос на экосистеме языка, лучше заранее объяснять причины, честно благодарить старый выбор и не превращать community в побочный ущерб.\n\n ## Главный урок\n\n Bun Rust rewrite важен не потому, что он доказывает победу Rust или конец Zig. Он показывает новый тип open-source события: AI-assisted infrastructure migration, сделанная публично, с реальным кодом, тестами и пользователями.\n\n Это не доказывает, что agents могут безопасно переписать любой проект. Но показывает, что граница возможного для maintainers сдвигается.\n\n Большие rewrites всё ещё опасны. Но их cost model меняется. Проекты с сильными conformance suites, observable behavior, disciplined CI и человеческим review могут попробовать миграции, которые раньше отвергали сразу. Проекты без этого просто быстрее произведут больший беспорядок.\n\n AI в истории Bun не заменил инженерную дисциплину. Он сделал её важнее.","available_translations":[{"language":"de","title":"Buns Rust-Rewrite ist mehr als Rust gegen Zig","html_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=de","markdown_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.md?lang=de","json_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.json?lang=de","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=de"},{"language":"en","title":"Bun’s Rust rewrite is not just a Rust versus Zig story","html_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=en","markdown_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.md?lang=en","json_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.json?lang=en","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=en"},{"language":"es","title":"El rewrite de Bun en Rust no es solo una historia de Rust contra Zig","html_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=es","markdown_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.md?lang=es","json_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.json?lang=es","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=es"},{"language":"fr","title":"Le rewrite de Bun en Rust ne se résume pas à Rust contre Zig","html_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=fr","markdown_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.md?lang=fr","json_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.json?lang=fr","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=fr"},{"language":"pl","title":"Rewrite Bun w Rust to nie tylko Rust kontra Zig","html_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=pl","markdown_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.md?lang=pl","json_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.json?lang=pl","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=pl"},{"language":"ru","title":"Rust-rewrite Bun — это не просто спор Rust против Zig","html_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=ru","markdown_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.md?lang=ru","json_url":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.json?lang=ru","api_url":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=ru"}],"_links":{"self":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.json?lang=ru","api":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=ru","html":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=ru","canonical":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10?lang=ru","markdown":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.md?lang=ru","json":"https://publicasta.com/open_source_radar/bun_rust_rewrite_ai_agents_tests_2026_07_10.json?lang=ru","channel":"https://publicasta.com/api/public/v1/channels/open_source_radar","channel_articles":"https://publicasta.com/api/public/v1/channels/open_source_radar/articles","search":"https://publicasta.com/api/public/v1/search","documentation":"https://publicasta.com/api-docs#reading-publicasta","openapi":"https://publicasta.com/api-docs/openapi.json","llms":"https://publicasta.com/llms.txt"}}