Bun завершил перенос с Zig на Rust, после чего разработчики проектов публично разругались

good-penguin.png

Команда Bun завершила перенос основной кодовой базы среды исполнения JavaScript и TypeScript с Zig на Rust. Изменения были влиты в main 14 мая 2026 года, а 8 июля руководитель проекта Джарред Самнер опубликовал отчёт о миграции. Последней стабильной версией на Zig пока остаётся Bun 1.3.14, тогда как Rust-реализация доступна в Bun 1.4 Canary. Порт уже используется в Claude Code начиная с версии 2.1.181 и в публичной бете Prisma Compute.

Перенос затронул 535 496 строк Zig-кода и занял 11 дней. Самнер задействовал около 50 автоматизированных процессов Claude Code, одновременно запускавших до 64 экземпляров Claude. Итоговый diff добавил более миллиона строк и включил 6502 коммита без учёта слияний. По оценке автора, запросы обошлись бы примерно в 165 тысяч долларов по тарифам API; вручную работа потребовала бы трёх разработчиков и около года.

Один ИИ-агент создавал код, два других искали ошибки, ещё один применял исправления. Перед слиянием прежний набор тестов полностью прошёл на шести платформах, причём тесты не удалялись и не пропускались. После переноса команда провела 11 циклов проверки безопасности и запустила непрерывный фаззинг парсеров.

Причиной миграции разработчики называют не недостатки Zig как такового, а устройство Bun. Среда объединяет JavaScriptCore со сборкой мусора и нативный код с ручным управлением памятью, что приводило к утечкам, use-after-free и double-free. Rust позволяет обнаруживать часть таких ошибок раньше и освобождать ресурсы через Drop. По данным команды, Bun 1.4 исправляет 128 ошибок из 1.3.14, уменьшает бинарник примерно на 20% в Linux и Windows и в отдельных тестах работает на 2–5% быстрее.

Порт пока далёк от идиоматического Rust: около 4% кода находится внутри unsafe — примерно 27 тысяч строк и 13 тысяч употреблений ключевого слова. Кроме того, были обнаружены 19 известных регрессий, которые, по утверждению разработчиков, уже исправлены.

На следующий день основатель Zig Эндрю Келли опубликовал резкий ответ. По его мнению, проблемы Bun возникли не из-за модели памяти Zig, а из-за инженерной культуры проекта: слишком быстрого добавления функций, накопления технического долга и злоупотребления comptime и assert. Келли утверждает, что Zig Software Foundation неоднократно пыталась обратить внимание команды Bun на качество кода.

Келли поставил под сомнение и проверку миллиона строк автоматически созданного кода. Если прежний набор тестов пропускал ошибки Zig-версии, считает он, то этот же набор не доказывает отсутствие ошибок в Rust-порте. Команда Bun указывает на проверку несколькими ИИ-агентами, тестирование, фаззинг и частичное ручное чтение. Традиционного построчного рецензирования людьми не было, но и полностью непроверенным перенос назвать нельзя.

Другие претензии касаются результатов. Келли отметил, что прирост скорости связывается с межъязыковой LTO, хотя Zig тоже поддерживает LTO. Сокращение бинарника частично обеспечили оптимизация ICU и настройки линковки, а сравнение времени компиляции в отчёте отсутствует. Он также увидел противоречие между рассказом о фаззинге и прежними разговорами, в которых команда Bun якобы сообщала, что фаззинг не используется.

Технический спор быстро перешёл в конфликт между проектами. По словам Келли, компания Oven перечисляла Zig Software Foundation около 60 тысяч долларов в год, но после покупки Bun компанией Anthropic выплаты прекратились, а представители Bun не пришли на регулярную встречу. Он также раскритиковал управленческий стиль Самнера, ссылаясь на рассказы бывших работников и соискателей. Независимых подтверждений этим обвинениям опубликовано не было.

Позднее Келли изменил заключение статьи и признал, что накопившаяся обида сделала текст похожим на личную атаку. Таким образом, перенос Bun на Rust технически завершён и уже применяется, хотя стабильный выпуск Bun 1.4 ещё впереди. Сам конфликт оказался не столько спором Zig против Rust, сколько столкновением взглядов на темп разработки, роль ИИ и способы обеспечения качества открытого проекта.

Bun — это среда выполнения ECMAScript / JavaScript, по многим параметрам аналогичная nodejs. Bun старается быть максимально совместимым с nodejs по опциям командной строки, поддерживает модули ECMAScript (ESM) и CommonJS. Управление пакетами npm и поддержка typescript встроены прямо в приложение как нативный код, и программы на typescript могут исполняться напрямую интерпретатором без предварительной конфигурации.

>>> Подробности

©  Linux.org.ru