Canonical поддерживает проект по автоматическому переводу крупных кодовых баз C в безопасный Rust
Canonical финансирует новый исследовательский проект, цель которого - упростить перенос больших и давно развивающихся программных систем с C на Rust. Трёхлетняя инициатива реализуется совместно с британским Бристольским университетом, а начало работ запланировано на 2026 год.
Главная задача проекта - создать полноценную платформу для перевода масштабных репозиториев. Речь идёт о кодовых базах объёмом в сотни тысяч строк, которые нельзя быстро переписать вручную без серьёзных затрат, риска появления ошибок и потери накопленных за годы знаний.
Многие зрелые проекты на C включают исправления уязвимостей, обновления совместимости, оптимизации производительности и множество неочевидных технических решений. Поэтому миграция проектов с C на Rust - это не простая замена синтаксиса, а сложный процесс, требующий сохранения поведения, архитектурных зависимостей и особенностей эксплуатации программного обеспечения.
Как отмечается в [проекте по переводу крупных кодовых баз C в безопасный Rust](https://linuxiac.com/canonical-backs-new-project-to-translate-large-c-codebases-into-safe-rust/), существующие трансляторы исходного кода решают лишь часть проблемы. Они способны обработать значительный объём программ, однако нередко слишком буквально воспроизводят структуру C. В результате получается Rust-код, который продолжает активно использовать `unsafe`, сохраняет характерные для C шаблоны и нуждается в существенной ручной доработке.
Другой подход связан с большими языковыми моделями. Они уже умеют создавать качественный идиоматичный Rust для небольших и хорошо изолированных фрагментов. Но при работе со всем репозиторием возникают сложности: модели трудно удерживать контекст многочисленных файлов, зависимостей, типов и взаимосвязей между компонентами. Кроме того, внешне корректный результат не всегда сохраняет поведение оригинальной программы.
Для решения этих задач исследователи намерены использовать гибридную, или нейросимвольную, модель. Она объединит машинное обучение с традиционным статическим анализом, автоматизированным тестированием и методами формальной верификации. Такой баланс должен снизить количество ошибок, которые возникают при попытке полагаться только на генеративные модели или только на механическое преобразование синтаксиса.
Предполагается, что крупные репозитории будут предварительно разделяться на более компактные части. При этом система должна сохранять сведения о типах, зависимостях и логике взаимодействия компонентов. После этого автоматическая конвертация C в Rust будет выполняться с учётом контекста, а не как последовательная замена конструкций в отдельных файлах.
Для обучения планируется применять примеры уже выполненного преобразования C-кода в Rust. Цель заключается не в том, чтобы получить "C на Rust", а в создании программы, использующей сильные стороны самого Rust: систему владения памятью, проверку заимствований, выразительные типы и более безопасную работу с ресурсами. Таким образом, инструменты для перевода C-кода в Rust должны будут формировать результат, пригодный для дальнейшего сопровождения разработчиками Rust.
После генерации кода система проверит, соответствует ли его поведение исходной реализации на C. Для этого могут использоваться тесты, анализ выполнения и формальные методы. Такой этап особенно важен для системного программного обеспечения, где даже небольшое изменение логики способно привести к сбоям, проблемам совместимости или нарушению безопасности.
В качестве практических примеров Canonical выбрала AppArmor и snap-confine. Эти проекты позволят проверить технологию на реальных зрелых кодовых базах, а не только на небольших учебных программах. Однако компания подчёркивает: речь не идёт о немедленном переписывании AppArmor или snap-confine. Они используются исключительно как исследовательские кейсы, и планов заменить текущие реализации результатами эксперимента сейчас нет.
Инициатива соответствует более широкой стратегии Canonical по внедрению Rust в экосистему Ubuntu. В компании уже упоминают uutils coreutils и sudo-rs - проекты, предоставляющие реализации традиционных системных инструментов на Rust. Их развитие показывает, что безопасный Rust вместо C постепенно становится практическим вариантом для отдельных компонентов Linux-дистрибутива, особенно там, где критичны надёжность и защита памяти.
При этом перевод кода C в Rust в промышленном масштабе по-прежнему требует осторожности. Даже полностью автоматизированный процесс не отменяет архитектурного аудита, проверки производительности, анализа совместимости ABI и длительного тестирования. Вероятно, наиболее реалистичным сценарием станет поэтапная миграция: сначала преобразование отдельных модулей, затем их проверка и постепенное расширение области применения.
У проекта есть и более широкое значение для индустрии. Огромное количество важного системного ПО написано на C, а полная ручная переработка таких программ может занять годы. Если исследователям удастся совместить скорость автоматического преобразования с качеством современного Rust-кода, это создаст новый путь обновления критической инфраструктуры без отказа от накопленной функциональности.
Однако итоговый успех будет зависеть не только от качества генерации. Не менее важны удобство интеграции с существующими системами сборки, способность работать с нестандартными расширениями компиляторов, поддержка платформенных особенностей и понятные инструменты для разработчиков. Поэтому проект Canonical может стать не просто экспериментом по конвертации языков, а основой для целой методологии безопасной модернизации наследуемого программного обеспечения.


