Полмиллиона строк за десять секунд. В Бристоле придумали, как быстро избавить операционные системы от опасного кода

Canonical и Бристольский университет запустят проект по автоматическому переводу системного кода Ubuntu с C на Rust.


5mx8ltecggqlxlstwsq5f3424st0z2uh.jpg

Canonical хочет превратить перенос старого системного кода с C на Rust из дорогой ручной работы в автоматизированный и проверяемый процесс. Компания запустила совместный исследовательский проект с Бристольским университетом, который должен научиться переводить целые репозитории размером в сотни тысяч строк на безопасный и пригодный для дальнейшей поддержки Rust. Исследование рассчитано на три года и получит дополнительное финансирование от UK Research and Innovation .

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

Canonical хочет решить проблему не простым переводчиком синтаксиса. Обычные средства преобразования исходного кода способны обработать большие программы, но часто слишком буквально переносят структуру C. В результате Rust-код продолжает активно использовать небезопасные операции, сохраняет характерные для C приемы и требует серьезной ручной переработки. Большие языковые модели сталкиваются с противоположной проблемой: LLM способны писать достаточно естественный Rust на небольших фрагментах, но хуже справляются с контекстом целого репозитория и не гарантируют сохранение поведения исходной программы.

Новая платформа объединит машинное обучение с классическим анализом программ, тестированием и формальными методами. Система сначала разделит большой репозиторий на части, сохранив сведения о типах, зависимостях и поведении. Затем языковая модель переведет фрагменты на Rust с использованием подходящих для языка конструкций вместо механического копирования C. Следующий этап сравнит поведение исходной и новой версий с помощью фаззинга и более строгих методов проверки эквивалентности. При обнаружении ошибки механизм автоматического ремонта попробует найти проблемный участок и исправить перевод.

Разработчики принципиально не собираются доверять коду только потому, что результат выглядит убедительно или успешно компилируется. Сгенерированный Rust будет считаться непроверенным до получения подтверждений, что программа сохраняет необходимое поведение. Такой подход должен снизить один из главных рисков применения генеративного ИИ в разработке, когда внешне правдоподобный код содержит трудно заметные логические ошибки.

Исследование продолжает курс Canonical на постепенный перенос критических компонентов Ubuntu на языки с безопасной работой с памятью. В Ubuntu 26.04 LTS реализация sudo-rs уже используется как стандартный поставщик команды sudo, а набор uutils coreutils заменил значительную часть традиционных GNU Coreutils. Canonical рассматривает Rust как способ устранить целые классы ошибок памяти в системном ПО. Компания прямо называет замену старого C-кода на Rust одним из направлений модернизации Ubuntu.

Проверять новую технологию будут не только на искусственных примерах. В качестве промышленных тестовых проектов Canonical выбрала AppArmor и snap-confine, два важных компонента защитной архитектуры Ubuntu. AppArmor ограничивает возможности программ с помощью политик доступа, а snap-confine формирует изолированное окружение для запуска приложений Snap. Canonical отдельно подчеркивает, что участие AppArmor и snap-confine в исследовании не означает планов обязательно заменить рабочий код автоматически сгенерированными версиями.

У Бристольского университета уже накоплен опыт подобных исследований. В 2023 году специалисты представили систему Crown , использующую анализ владения указателями для преобразования C в безопасный Rust. В экспериментах Crown обрабатывала кодовые базы объемом до полумиллиона строк менее чем за десять секунд. Позже группа изучила возможности LLM при переносе реальных программ на Rust, а в работе, опубликованной на PLDI 2025, разработала метод перевода целых проектов с разбиением кода и последующей проверкой семантической эквивалентности. На проектах Go объемом до 6600 строк и 369 функций исследователи в среднем подтвердили эквивалентность ввода и вывода для 73% функций. Новый проект Canonical должен перенести подобные идеи на намного более крупные репозитории C.

Исследованием в Бристоле руководит профессор Мен Ван . В работе участвуют специалист по верификации программ Кристина Дэвид и вице-президент Canonical по разработке Джон Сигер, а основную исследовательскую работу проведет аспирант Алекс Вуд. Бристольская группа языков программирования займется формальными методами и проверкой корректности, а Canonical предоставит реальные системные проекты и практические ограничения производственной среды.

Работа должна начаться до конца 2026 года. Максимальная цель проекта заключается в создании платформы, способной переводить крупные C-репозитории на поддерживаемый безопасный Rust с минимальным ручным вмешательством и убедительными доказательствами сохранения поведения. Даже без полного достижения цели исследование может дать новые методы разбиения больших программ, наборы данных для обучения переводчиков, более надежные способы проверки эквивалентности и инструменты автоматического исправления неудачных преобразований.