Линус Торвальдс рассказал о том, где Rust впишется в Linux
Линус Торвальдс и Грег Кроа-Хартман поделились своими мнениями о том, как они видят работу на 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 млн.