Любимая многими Unix-система инициализации добавляет поддержку самого популярного в Unix-мире нового языка программирования. Что может пойти не так?
Не волнуйтесь, это произойдет не скоро. Агент P и его верная команда около месяца назад выпустили systemd версии 262. Это означает, что systemd 263 уже находится в разработке, и разработчик Кристиан Браунер объявил в Mastodon, что его новая функция была интегрирована.
Предыдущая работа, представлявшая собой pull request #44144, теперь разделена на пять отдельных частей. Часть 1 содержит keyring-util и voa-util, описанные как «вспомогательные средства для регистрации сертификатов в системных кольцах ядра». Часть 2, программы поддержки, написанные на Rust, является главной. Затем следуют еще несколько: привязка только заголовков, используемых кодом Rust, обертка для вспомогательных средств libsystemd-shared, необходимых systemd-keyring-setup, и, наконец, добавление systemd-keyring-setup.
К анонсу прилагается несколько важных оговорок, изложенных во втором PR:
«Rust используется только для новых конечных компонентов. Существующий код на C не портируется, и ничего, от чего зависят другие компоненты, не пишется на Rust».
Другими словами, прежде чем кто-либо слишком возбудится, это не означает начало работы по переписыванию systemd на Rust. Все, что это значит, — это то, что новые модули systemd могут быть написаны на Rust.
Второй пункт будет более значимым для существующих разработчиков Rust: «Никакого cargo. Все собирается с помощью meson».
Cargo — это менеджер пакетов и система сборки языка Rust. Это обычный способ сборки приложений Rust, а также распространения модулей кода Rust для использования другими разработчиками Rust. Однако у systemd уже есть современная система сборки. Она называется Meson, и она не уникальна для systemd — ее также широко используют проект GNOME и библиотека 3D-графики Mesa. Сам Meson написан на Python и использует Ninja для управления процессом компиляции. Ninja был разработан для ускорения сборки Chrome, а также используется для Android.
Третье условие заключается в том, что любой код Rust не должен использовать стандартную библиотеку. Для тех, кто больше знаком с C, это может показаться экстремальным, но это нормально для встраиваемого программирования на Rust.
Проект документирует системные требования. Требуется Rust версии 1.85 или новее. Это скромно: эта версия была выпущена в феврале 2025 года, а версия 1.99.1 появилась ранее в этом месяце. Также требуется bindgen версии 0.71.1 (от декабря 2024 года) или новее, и Meson 1.4.0 (от марта 2024 года). Это относительно старые версии — например, это версия Meson, включенная в Debian 13.
Браунер добавил интересное небольшое дополнение во втором посте в Masto: команда хотела бы поддержать Rust в ядре systemd, но в настоящее время поддержка динамических библиотек в Rust еще не готова.
Возможно, стоит отметить, что написание модулей systemd на Rust — это совсем не то же самое, что вызов systemd из кода Rust. Для этого существует несколько инструментов, и они существуют уже много лет: например, крейт systemd впервые появился в 2015 году. ®
Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.
Автор – Liam Proven




