systemd Rust: підтримка розробки програм на Rust
systemd впроваджує підтримку Rust для розробки програм
Проект systemd офіційно запровадив підтримку розробки програм на Rust. Це стало можливим після об’єднання pull request, який надіслав розробник ядра Linux Крістіан Браунер. Зміни, інтегровані в основну гілку проекту, відкривають нові можливості розробки для systemd з збереженням існуючої архітектури на C.
Обмежений підхід до використання Rust
Перш ніж хтось припустить, що systemd готує повний перепис на Rust, зазначимо, що це не так. Підтримувачі погодилися на обмежений підхід: Rust можна використовувати лише для нових, автономних компонентів, які не залежать від інших частин systemd. Існуючий код на C залишиться незмінним.
Процес збірки та обмеження на залежності
Ще одне важливе рішення стосується процесу збірки. Натомість того, щоб впроваджувати Cargo, стандартний менеджер пакетів і інструмент збірки Rust, systemd продовжує використовувати Meson для всіх збірок. Це дозволяє інтегрувати розробку на Rust у вже існуючу інфраструктуру збірки проекту.
Імплементація також накладає суворі обмеження на залежності. Програми на Rust використовують підхід no_std, що означає, що вони не покладаються на стандартну бібліотеку Rust або зовнішні пакунки. Натомість, вони взаємодіють з існуючими бібліотеками на C через згенеровані зв’язки.
Управління пам’яттю та нові можливості
Для управління пам’яттю systemd надає власні імплементації загальних контейнерних типів на Rust. Випадки невдалого розподілу пам’яті обробляються явно, а не призводять до аварійного завершення програми. Нова інфраструктура також включає обгортки для ведення журналів, обробки аргументів командного рядка, обробки подій та управління помилками, що дозволяє утилітам Rust поводитися послідовно з їхніми відповідниками на C.
Підтримка Rust є необов’язковою і автоматично виявляється під час конфігурації. Розробники, які бажають увімкнути цю функцію, повинні мати Rust 1.85 або новіше, bindgen 0.71.1 або новіше та Meson 1.4 або новіше. Системи без необхідного інструментального комплекту можуть продовжити збірку systemd без підтримки Rust.
Тестування та перші застосування
Цікаво, що початкові тести показують, що спрощена утиліта командного рядка на Rust займає приблизно 32 КБ. Це в порівнянні з 20 КБ для її C-еквівалента, зібраного з оптимізацією часу зв’язування. Це дає раннє уявлення про додаткові витрати, хоча порівняння стосується лише маленької тестової програми.
Першим запланованим реальним застосуванням цієї інфраструктури є systemd-keyring-setup. Це нова утиліта, яка допоможе управляти сертифікатами в ключах ядра Linux. Її імплементація розробляється окремо разом з додатковими обгортками Rust для спільних бібліотек systemd.
Упаковка для Linux дистрибутивів
Для дистрибутивів Linux ця зміна вносить роздумування про пакування. Збірки, які активують усі доступні функції, потребуватимуть відповідного компілятора Rust і залежностей bindgen. Або ж доведеться вимкнути підтримку Rust, щоб уникнути збоїв при збірці.
Чи стане Rust широко використовуваним у systemd, залежатиме від майбутньої розробки. Але необхідна база для цього вже створена.




