402 Рауmеnt Rеquirеd - ужин при свечах.

systemd поддерживает Rust, но не использует его в основных библиотеках


systemd поддерживает Rust, но не использует его в основных библиотеках

После недавнего решения systemd официально поддержать Rust разработчики Кристиан Браунер и Леннарт Поэттеринг опубликовали подробное объяснение того, как этот язык будет интегрирован в проект и где он не будет использоваться.

Основное ограничение касается основных разделяемых библиотек systemd. Хотя Rust можно использовать для разработки автономных исполняемых файлов, центральные библиотеки проекта, в том числе libsystemd-shared.so, будут по-прежнему написаны на C.

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

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

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

Разработчики объяснили, почему systemd отказался от Cargo — стандартного инструмента для сборки и управления зависимостями в Rust. Проект продолжит использовать исключительно Meson, чтобы избежать сложностей, связанных с поддержкой двух систем сборки. Также были упомянуты проблемы с безопасностью и цепочкой поставок программного обеспечения, связанные с Cargo.

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

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

Еще одно важное уточнение касается существующего кода на языке C. Разработчики не хотят переписывать существующие компоненты на Rust только ради смены языка программирования. Они утверждают, что замена C на Rust не решает автоматически проблемы безопасности, особенно когда основная уязвимость связана с обработкой путей в файловой системе, а не с безопасностью памяти.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Редактор: AndreyEx

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

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

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

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


Спасибо!

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

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