Systemd открывает дорогу Rust: первые компоненты на новом языке появятся в системном менеджере
В кодовую базу systemd официально принято изменение, которое открывает путь для разработки компонентов на языке Rust. Это не означает переписывания существующего кода — весь наработанный годами массив на C останется нетронутым. Речь идёт исключительно о новых частях системного менеджера, которые теперь можно будет создавать с использованием возможностей Rust.
Разработчики подчёркивают, что переводить старый код на Rust не планируется. Такой подход позволяет избежать рисков, связанных с масштабной миграцией, и одновременно даёт шанс оценить преимущества языка в реальных условиях. Новые компоненты будут появляться постепенно, не нарушая стабильности критически важного программного обеспечения.
При сборке systemd по-прежнему задействована только система Meson. Пакетный менеджер Cargo, привычный для экосистемы Rust, использоваться не будет. Это решение сохраняет единообразие сборочного процесса и упрощает интеграцию Rust-кода в существующую инфраструктуру проекта, не требуя дополнительных инструментов.
Rust-код в systemd будет работать в режиме no_std, то есть без стандартной библиотеки. Разрешены только библиотеки core, alloc и libc. Такой выбор даёт разработчикам полный контроль над окружением и зависимостями, что особенно важно для низкоуровневого системного компонента, где каждый лишний слой может сказаться на производительности и предсказуемости.
Использование Rust приносит в systemd современные механизмы безопасности памяти. Язык помогает избежать целых классов уязвимостей, связанных с ручным управлением памятью, которые десятилетиями преследовали программы на C. Для системного менеджера, работающего с привилегиями и запускающего критически важные службы, это особенно ценно.
Systemd остаётся одним из центральных элементов большинства дистрибутивов Linux. Его развитие напрямую влияет на загрузку, управление службами и журналирование во всей экосистеме. Поэтому любые изменения в проекте принимаются с осторожностью, а появление Rust — результат долгих обсуждений и тестирования.
Осторожный подход проявляется и в том, что Rust пока допущен только для новых компонентов. Это позволяет команде сопровождающих накопить опыт, не рискуя сломать то, что уже отлажено. Если эксперимент окажется удачным, в будущем круг задач для Rust может расшириться, но пока никаких обещаний не даётся.
Технически Rust-код будет взаимодействовать с системными вызовами через библиотеку libc, а для динамического выделения памяти использовать alloc. Такой набор даёт достаточно гибкости для реализации типичных задач системного менеджера, не прибегая к возможностям стандартной библиотеки, которые могли бы принести нежелательные зависимости. Этот шаг вписывается в более широкий тренд: ядро Linux также рассматривает Rust как второй язык для драйверов и модулей.
Systemd, будучи проектом, тесно связанным с ядром, теперь движется в том же направлении, что может упростить взаимодействие и привлечь разработчиков, уже знакомых с Rust. Для сообщества открытого кода появление Rust в systemd означает снижение порога входа для новых контрибьюторов. Многие молодые программисты предпочитают Rust из-за его выразительности и гарантий безопасности.
Теперь они смогут предлагать улучшения для systemd, не осваивая предварительно все тонкости многолетней кодовой базы на C. Решение выглядит взвешенным и прагматичным. Systemd не отказывается от проверенного временем C, но аккуратно вводит Rust там, где это оправдано.
Такой подход может стать образцом для других крупных проектов с открытым кодом, которые хотят воспользоваться преимуществами современного языка, не ставя под удар стабильность.