Линус Торвальдс и Грег Кроа-Хартман поделились своими мнениями о том, как они видят работу на Rust в Linux. Ядро Linux написано на C, но Rust постепенно получает поддержку для использования в качестве системного языка.

В 2020 году разработчики ядра Linux всерьез задумались об использовании Rust для нового встроенного кода. В марте этого года в состав ветки linux-next, на основе которой будет сформирован выпуск ядра Linux 5.13, включили начальный набор компонентов для разработки драйверов устройств на Rust. Отдельно опубликована документация по использованию Rust в ядре Linux и пример модуля ядра с драйвером символьного устройства на Rust. Код добавил мейнтейнер ветки Стивен Ротвелл.

Amazon Web Services (AWS) недавно выпустила Bottlerocket Linux с Rust. Самарта Чандрашекхар, менеджер по продуктам AWS, сказал, что это «помогает обеспечить безопасность потоков и предотвратить ошибки, связанные с памятью, такие как переполнение буфера, которые могут привести к уязвимостям безопасности». На саммите Linux Security Summit 2019 Алекс Гейнор и Джеффри Томас заявляли, что около двух третей уязвимостей ядра Linux связаны с проблемами безопасности памяти.

Между тем Сильвестр Ледру, директор Mozilla ​​и разработчик Debian Linux, портировал версию Coreutils на Rust на Linux с помощью LLVM. Coreutils — это основные утилиты оболочки GNU. С их помощью Ледру загрузил Linux и запустил самые популярные пакеты Debian.

Разработчик Linux Нельсон Эльхаге, подводя итоги встречи по Rust, добавил, что сторонники этого языка не «предлагают переписать ядро ​​Linux на Rust; они сосредоточены только на движении к тому, что может быть написан новый код».

Однако при обсуждении поддержки Rust возникают следующие опасения: как будет реализовано использование существующих API-интерфейсов в ядре, поддержка архитектуры и совместимость бинарного интерфейса приложения (ABI) между Rust и C.

Торвальдс говорит, что ему интересен этот проект, но он уверен, что его продвигают энтузиасты Rust, и нужно посмотреть, как он «работает на практике». Создатель ядра Linux отметил, что он «открыт для нововведений, учитывая обещанные преимущества безопасности, но также понимает, что иногда обещания не сбываются».

Торвальдс отмечает: «Первая цель для Rust — это драйверы просто потому, что там вы найдете множество различных возможных путей реализации». По его словам, «многие драйверы актуальны только для пары целевых архитектур, поэтому проблема с кодом Rust, не поддерживаемым на некоторых архитектурах, не столь важна».

Кроа-Хартман соглашается, что «др��йверы, вероятно, являются первым местом для подобных попыток, поскольку они зависят от функциональности ядра, но от них ничего не зависит».

Торвальдс подчеркивает, что некоторым не по душе идея использования Rust в пользовательском пространстве. Кроа-Хартман добавляет, что «все будет сводиться к тому, насколько хорошо взаимодействие между структурами ядра и правилами времени, написанными на C, может быть отображено в структурах Rust и правилах времени жизни для драйверов» на этом языке.

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

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

Позднее Кроа-Хартман подтвердил, что в разрешении использования Rust для написания кода ядра наблюдается прогресс. По его словам, ожидается «несколько интересных взаимодействий с имеющимися у нас объектами C».

В феврале этого года AWS, Huawei, Google, Microsoft и Mozilla создали некоммерческую организацию Rust Foundation, которая займется развитием этого языка программирования. Бюджет на два года работы составит $1 млн.