Canonical запустив автоматизацію перенесення з C на Rust

Canonical запустив дослідницький проект для автоматизації перенесення коду з C на Rust

Canonical підтримує новий трирічний дослідницький проект, метою якого є автоматичне перенесення великих, зрілих проектів з C на Rust. Цей проект є партнерством між Canonical та Університетом Бристоля у Великій Британії, а робота розпочнеться пізніше у 2026 році.

Основна мета проекту — платформа для переведення коду

Основна ціль полягає у створенні платформи, яка зможе переносити великі кодові репозиторії, іноді з сотнями тисяч рядків C, в безпечний, надійний та підтримуваний Rust.

Виклики для перенесення зрілого програмного забезпечення

Однак основним викликом є велика кількість зрілого програмного забезпечення на C, яке вже використовується. Вручну переписувати ці проекти є витратно і ризиковано, оскільки їх код містить роки виправлень, оновлень сумісності, оптимізацій продуктивності та прихованих знань.

Сучасні транслятори джерел тільки частково вирішують цю проблему. Canonical зазначає, що ці інструменти можуть обробляти багато коду, але вони часто занадто тісно копіюють структури C. Це призводить до того, що Rust код все ще залежить від небезпечних функцій, зберігає патерни стилю C і потребує багато підчищення, перш ніж розробники Rust захочуть його підтримувати.

Гібридний підхід у новій ініціативі

LLMs стикаються з іншими викликами. Вони здатні створювати хороший, ідіоматичний Rust для невеликих, ясних фрагментів коду, але управління контекстом цілого репозиторію є значно складнішим. Також код, який виглядає правильно, може не завжди працювати так само, як оригінальна версія на C.

Для вирішення цих викликів новий проект використовуватиме гібридний, або ‘нейросимволічний’, підхід. Це поєднує машинне навчання з традиційним аналізом програм, тестуванням та формальними методами.

Процес трансляції та перевірки коду

Згідно з Canonical, великі кодові репозиторії спочатку будуть розділені на менші частини, які можна буде перевести окремо, зберігаючи ключові деталі про типи, залежності та те, як працює програма.

Трансляція використовуватиме мовні моделі, натреновані на відомих прикладах C-to-Rust, з метою отримання Rust коду, що використовує правильні функції Rust, а не просто копіює синтаксис C. Після трансляції новий код буде перевірено, щоб дізнатися, чи працює він так само, як оригінальна версія на C.

Кейс-стаді AppArmor та snap-confine

Для користувачів Ubuntu важливо зазначити, що дослідження перевищить маленькі академічні приклади. Canonical планує використати AppArmor та snap-confine як реальні кейс-стаді.

Проте Canonical чітко зазначає, що AppArmor та snap-confine наразі не переписуються на Rust. Ці проекти використовуються лише як кейс-стаді для тестування технології, і немає планів замінити їх поточні версії на результати дослідження.

Впровадження Rust у Canonical

Зрештою, варто додати, що ця ініціатива також вписується в ширшу адаптацію Rust в Ubuntu. Компанія вказує на проекти, такі як uutils coreutils та sudo-rs, як на приклади імплементацій Rust, які отримали своє місце у дистрибутиві.

Для додаткових деталей, дивіться пост на офіційному сайті Ubuntu.