Promt-Hub
Новости

Миграция рантайма GitHub Copilot на Rust с помощью самого Copilot

GitHub Copilot runtime переписан на Rust. AI-агенты написали большую часть кода в рамках 128 pull requests. Это позволило сократить время разработки с года до месяцев и повысить производительность.

Миграция рантайма GitHub Copilot на Rust с помощью самого Copilot
Лид

Команда GitHub полностью переписала агентный рантайм GitHub Copilot с TypeScript на Rust, используя для этого собственный инструмент Copilot. Проект объемом более 800 000 строк кода был реализован одним разработчиком за несколько месяцев благодаря инкрементальному подходу и автоматизации.

Кратко

Главные тезисы

  • Рантайм GitHub Copilot переписан с TypeScript на Rust.
  • AI-агенты написали большую часть кода в рамках 128 pull requests.
  • Один разработчик завершил работу за несколько месяцев вместо года-двух.
  • Производительность рантайма улучшилась на порядки.
  • Миграция проходила инкрементально, чтобы избежать регрессий.

Масштаб и результаты миграции

Рантайм агентов GitHub Copilot, обеспечивающий работу CLI, приложений VS Code, Visual Studio, Copilot Studio, а также интеграций в Excel, Outlook, PowerPoint и Word, был полностью переписан с TypeScript на Rust. Изначально проект оценивался в 130 000 строк кода, но в процессе работы объем вырос до 430 000 строк TypeScript, которые были заменены на более чем 800 000 строк производственного кода на Rust.

Основную часть кода написали AI-агенты. Миграция прошла через 128 pull requests, которые были объединены в ветку main инкрементально. Проект, который ранее требовал бы команды разработчиков на один-два года, был завершен одним разработчиком за несколько месяцев. При этом основная команда продолжала расширять функциональность рантайма.

Причины перехода на Rust

Рантайм является общей основой для множества продуктов Microsoft и GitHub. Использование TypeScript и Node.js создавало проблемы при масштабировании:

  • Высокие требования к памяти: каждый SDK-клиент (C#, Python, Go, Java, Rust) должен был поставляться с Node.js или бинарником V8, что добавляло минимум 100 МБ к рабочему набору.
  • Низкая производительность: запуск процесса Node.js, парсинг JavaScript, генерация байт-кода и JIT-оптимизация требовали времени и ресурсов.
  • Сложность архитектуры: SDK был реализован как надстройка над CLI, что требовало создания новых процессов для каждого вызова и использования JSON-RPC для межпроцессного взаимодействия.
  • Надежность: сбой в Node.js приводил к падению всей сессии, а также требовал мониторинга и отладки нескольких процессов.

Выбор Rust был обусловлен необходимостью минимальных зависимостей, низких накладных расходов, предсказуемого использования ресурсов и возможности чистого in-process встраивания через C ABI.

Стратегия инкрементальной миграции

GitHub отказался от подхода «big-bang cutover» (одновременной замены) в пользу поэтапной миграции. Каждая pull request заменяла существующую TypeScript-реализацию тонкой оберткой, вызывающей Rust-код, с последующим удалением старого кода.

Ключевые принципы:

  1. Ветка main всегда остается пригодной к выпуску.
  2. Малый объем изменений в каждой PR упрощает ревью как для людей, так и для AI-агентов.
  3. Инкрементальное развертывание позволило тестировать изменения в реальных условиях. За период миграции было выпущено 135 релизов (100 пре-релизов и 35 стабильных).

К 21 августа рантайм стал на 100% состоять из Rust: 832 378 строк производственного кода и 468 689 строк юнит-тестов. Также было добавлено 174 675 строк E2E TypeScript-тестов и около 130 000 строк тестового кода в репозитории GitHub Copilot SDK.

Процесс реализации

Миграция начиналась с чистых логических примитивов без ввода-вывода и общего состояния. Затем последовательно переносились подсистемы с состоянием, инструменты, хуки, клиенты моделей и MCP. Самая сложная часть — оркестрация сессий, обладающая высокой связностью, была перенесена ближе к концу.

AI-агенты не только писали код, но и помогали разработчикам, не вовлеченным в миграцию, адаптировать их текущие pull requests к новым реалиям, переключаясь между языками в рамках одной задачи.

Источники
Был ли материал полезен?

Поделитесь в социальных сетях

Подпишись на нас в

Следите за новыми материалами, обновлениями каталога и полезными находками в наших соцсетях.

Комментарии

0 комментариев

Хотите принять участие в обсуждении, оставить комментарий или поделиться своим мнением? Зарегистрируйтесь или войдите в аккаунт.

Пока никто не оставил комментарий. Будьте первым.

Что почитать дальше

Все материалы