systemd офіційно підтримує Rust для нових компонентів
systemd офіційно підтримує Rust: що відомо?
Після нещодавнього рішення systemd офіційно підтримати Rust, розробники Крістіан Браунер і Леннарт Поттерінг опублікували детальне пояснення того, як ця мова буде інтегрована в проект і де вона не буде використовуватись.
Обмеження для бібліотек systemd
Основне обмеження стосується спільних бібліотек core systemd. Хоча Rust може використовуватись для розробки самостійних виконуваних файлів, центральні бібліотеки проекту, зокрема libsystemd-shared.so, залишаться написаними на C.
Згідно з розробниками, основною перешкодою є відсутність підтримки спільних бібліотек першого класу у Rust і стабільного ABI. Без цього впровадження Rust в спільні бібліотеки systemd призведе до дублювання коду Rust у кількох бібліотеках і виконуваних файлах.
Проблеми з інтеграцією та безпекою
Це викликатиме особливі проблеми для systemd, яка наразі має понад 180 двійкових файлів. Статичне зв’язування може працювати добре для самостійних програм, але розробники вважають його незручним для основної інфраструктури проекту.
Замість цього systemd використовуватиме свої існуючі функціональні можливості C через Rust crates, дозволяючи виконуваним файлам на основі Rust отримувати доступ до тих же внутрішніх API, що й їхні C-аналоги. Це забезпечує, щоб програми, написані на будь-якій з мов, діяли послідовно, включаючи обробку команд, повідомлення про допомогу і звіти про помилки.
Використання Cargo та зовнішніх crate
Розробники пояснили, чому systemd відмовився від Cargo, стандартного інструмента управління збіркою та залежностями Rust. Проект продовжить використовувати виключно Meson, уникаючи складності підтримки двох систем збірки. Також були озвучені проблеми безпеки та постачання програмного забезпечення, пов’язані з Cargo.
Зовнішні Rust crates — ще одна сфера, де systemd буде діяти обережно. Хоча сторонні залежності не виключаються, куратори прагнуть здобути більше досвіду з екосистемою Rust перед їх прийняттям.
Підтримка Rust без стандартної бібліотеки
Наразі компоненти Rust працюватимуть без стандартної бібліотеки Rust, використовуючи підхід no_std. Натомість вони покладаються на існуючу функціональність systemd, включаючи чутливі до безпеки операції з файловою системою.
Ще одним важливим уточненням стосується існуючого коду на C. Куратори чітко відмовляються переписувати встановлені компоненти на Rust лише для зміни мови програмування. Вони стверджують, що заміна C на Rust не автоматично вирішує проблеми безпеки, зокрема, коли основна поверхня атак пов’язана з обробкою шляхів файлової системи, а не безпекою пам’яті.
Таким чином, підтримка Rust залишиться необов’язковою. Розробники підтверджують, що Rust не підтримує всі архітектури, які наразі підтримує systemd, тому збірки без Rust залишаться повнофункціональними і підтримуваними.




