GitHub полностью переписала среду выполнения Copilot с TypeScript на Rust, причём большую часть нового кода создали ИИ-агенты самого Copilot. Перенос занял около трёх с половиной месяцев и превратил первоначально оценённые в 130 тыс. строк TypeScript в 832 378 строк рабочего кода на Rust.
Среда выполнения лежит в основе GitHub Copilot CLI, приложения Copilot и набора средств разработки Copilot, а также используется в VS Code, Visual Studio, Copilot Studio и некоторых продуктах Microsoft 365. GitHub решила отказаться от прежней связки TypeScript, Node.js и движка V8 из-за расходов памяти, задержек при запуске и сложности встраивания Copilot непосредственно в другие программы.
Работу начали в мае 2026 года. Первоначальная оценка в 130 тыс. строк быстро потеряла актуальность: разработчики продолжали менять проект параллельно с миграцией, а части кода переносили из других компонентов в среду выполнения. В результате за время проекта через перенос прошло около 430 тыс. строк рабочего TypeScript, хотя итоговый объём Rust оказался почти вдвое больше.
Команда не стала создавать новую версию отдельно и переключать пользователей одним обновлением. Компоненты переводили на Rust по очереди прямо в основной ветке разработки. За 14,5 недели GitHub объединила 128 запросов на слияние, связанных с миграцией, и выпустила 135 версий, включая 35 стабильных. К 21 августа рабочая часть среды выполнения уже на 100% состояла из Rust.
Выбор Rust объясняется не только скоростью. GitHub требовался нативный исполняемый код с небольшими накладными расходами, предсказуемым потреблением ресурсов и возможностью работать внутри процесса другого приложения. Дополнительным аргументом стала безопасность памяти: Rust предотвращает многие ошибки обращения с памятью ещё во время компиляции, хотя не избавляет программу от логических ошибок и других классов уязвимостей.
На отдельных тестах разница с прежней архитектурой оказалась очень заметной. Создание клиента, запуск сеанса, выполнение одного обращения к модели и завершение работы раньше занимали 5,25 с, а при запуске новой среды внутри процесса заняли около 55 мс. В другом испытании пропускная способность выросла с 7,55 до 120 коротких сеансов в секунду. GitHub отдельно предупреждает, что подобные цифры относятся к конкретным сценариям и не означают универсального ускорения Copilot в 16 раз.
Сократилось и потребление памяти. В тесте с десятью клиентами старая реализация увеличивала объём занятой памяти примерно на 1383 МБ. Rust при работе отдельным процессом требовал около 247 МБ, а встроенный вариант около 126 МБ. Последний показатель на 91% ниже исходного.
Масштаб работы особенно заметен по активности ИИ-агентов. Журналы проекта содержат более 1,85 млн запусков инструментов, а 61% из примерно 1,13 млн зафиксированных вызовов сделали дочерние агенты. Разработчик Стивен Тауб оценил собственное непосредственное участие примерно в три недели рабочего времени: вместо ручного написания основной массы кода ему приходилось задавать границы задач, проверять решения, контролировать тесты и возвращать агентам недоделанные участки.
Автоматизация не избавила проект от ошибок. К 14 сентября команда обнаружила несколько десятков регрессий, включая расхождения в поведении старой и новой реализаций, проблемы с состоянием и временем жизни объектов, неполный перенос функций и ошибки на границах между компонентами. Все известные к тому моменту регрессии исправили, причём часть проблем успели поймать до стабильных выпусков.
На работу ИИ ушло около 136,3 млрд токенов, подавляющее большинство которых пришлось на повторно использованные данные из кеша. Счёт за токены составил примерно $120 тыс. GitHub подчёркивает, что сумма не отражает полную стоимость проекта, поскольку к ней нужно прибавить человеческий труд и участие других инженеров в архитектуре, упаковке, проверке и интеграции кода.
По оценке Тауба, без ИИ-агентов подобная перепись крупной действующей системы могла бы потребовать отдельной команды и занять год или два. При этом опыт миграции показал и пределы нынешней автоматизации: агенты хорошо справились с большими объёмами переноса, но требовали постоянного контроля, строгих сквозных тестов и независимой проверки того, что новая реализация действительно сохраняет прежнее поведение.
