Доброе — это прекрасное в действии (Ж.-Ж. Руссо).

systemd официально добавляет поддержку Rust для новых компонентов


systemd официально добавляет поддержку Rust для новых компонентов

Проект systemd официально представил поддержку разработки программ на языке Rust после слияния запроса на слияние, отправленного разработчиком ядра Linux Кристианом Браунером. Это изменение, внесенное в основную ветку проекта, открывает новые возможности для разработки systemd, сохраняя при этом существующую архитектуру на основе языка C.

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

Еще одно важное решение касается процесса сборки. Вместо того чтобы внедрять Cargo, стандартный менеджер пакетов и инструмент сборки Rust, systemd продолжает использовать Meson для всех сборок. Это позволяет интегрировать разработку на Rust в существующую инфраструктуру сборки проекта.

Реализация также накладывает строгие ограничения на зависимости. Программы на Rust используют подход no_std, то есть не полагаются на стандартную библиотеку Rust или внешние сторонние модули. Вместо этого они взаимодействуют с существующими библиотеками C в systemd через сгенерированные привязки.

Для управления памятью 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 это изменение влечет за собой необходимость учитывать особенности упаковки. Для сборок, в которых включены все доступные функции, потребуются соответствующие зависимости компилятора Rust и bindgen, либо необходимо отключить поддержку Rust, чтобы избежать сбоев при сборке.

Станет ли Rust широко использоваться в systemd, зависит от дальнейшего развития, но необходимая основа уже заложена.

Редактор: AndreyEx

Если статья понравилась, поделитесь ей в социальных сетях

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Это может быть вам интересно


Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала