Медленно, но верно язык Rust проникает в Linux. Это разговор с Линусом Торвальдсом и Грегом Кроа-Хартманом о том, где они видят, что Rust и Linux работают вместе.
Linux — это пример языка C. Но времена меняются. Язык Rust постепенно получает поддержку для использования в качестве системного языка в Linux. Например, на Linux Plumbers Conference 2020 года разработчики серьезно подумали об использовании языка Rust для нового кода Linux. Итак, где это сегодня? Я спросил создателя Linux Линуса Торвальдса и разработчика стабильного ядра Linux Грега Кроа-Хартмана, что они думают.
Это не просто теория, выдвигаемая энтузиастами Rust. Большая часть Rust в Linux уже выходит на рынок. Amazon Web Services (AWS) недавно выпустила Bottlerocket Linux для контейнеров, и в нем много Rust.
Сильвестра Ledru, директор Mozilla днём и разработчик Debian ночью, портировал версию Coreutils Rust на Linux с использованием инфраструктуры LLVM компилятора и и ее интерфейсную и инструментальную инфраструктуру языка Clang C. Coreutils — это основные утилиты оболочки GNU. С их помощью Ледру загрузил Linux и запустил самые популярные пакеты Debian. Ледрю признает, что он сегодня он еще не готов, но в конце концов, он может заменить GNU Coreutils.
Зачем вообще это нужно?
Rust популярен, потому что с его помощью легче писать безопасное программное обеспечение. Самарта Чандрашекар, менеджер по продуктам AWS, сказала, что это «помогает обеспечить безопасность потоков и предотвратить связанные с памятью ошибки, такие как переполнение буфера, которое может привести к уязвимостям безопасности». Многие другие разработчики согласны с Чандрашекаром.
В кругах Linux Алекс Гейнор и Джеффри Томас на саммите Linux Security Summit 2019 заявили, что около двух третей уязвимостей ядра Linux связаны с проблемами безопасности памяти. В теории Rust может полностью избежать этого, используя более безопасные интерфейсы прикладного программиста (API) Rust.
Разработчик Linux Нельсон Эльхаге в своем докладе по Rust в Linux, на Linux Plumbers Conference добавил, что сторонники Linux Rust не «предлагают переписать ядро Linux на Rust; они сосредоточены только на движении к миру, где новый код может быть написан на Rust». Три области потенциального беспокойства для поддержки Rust:
- использование существующих API-интерфейсов в ядре
- поддержка архитектуры
- совместимость двоичного интерфейса приложения (ABI) между Rust и C.
Что Торвальдс обо всем этом думает?
Он находится в лагере «подожди и посмотри» — мне интересен проект, но я думаю, что им движут люди, которые очень воодушевлены Rust, и я хочу увидеть, как он на самом деле работает на практике».
Торвальдс «никоим образом не настаиваю на Rust, но я открыт для этого, учитывая обещанные преимущества и избегая некоторых ловушек безопасности, но я также знаю, что иногда обещания не сбываются».
Торвальдс считает, что «Основной первой целью Rust, по-видимому, являются драйверы, просто потому, что именно там вы находите множество различных возможных целей, и у вас есть эти отдельные части ядра, которые довольно малы и независимы. Возможно, это не очень интересная цель для некоторых людей, но она очевидна.»
Другой момент — сначала взять драйверы, поскольку «любые начальные испытания драйверов — это просто архитектурная сторона», — сказал Торвальдс. «Многие драйверы актуальны только для пары целевых архитектур, поэтому проблема с кодом Rust, не поддерживаемым на некоторых архитектурах, не столь важна».
Кроа-Хартман соглашается, что «драйверы, вероятно, являются первым местом для подобных попыток, поскольку они являются «конечными листами» дерева зависимостей в исходном коде ядра. Они зависят от функциональности ядра, но от них ничего не зависит».
Торвальдс знает, что некоторым людям вообще не нравится идея Rust в пользовательском пространстве. «Люди, жалующиеся на «русификацию» в пользовательском пространстве, это не очень хороший знак для любого будущего использования ядра, но посмотрим. Ядро отличается от проектов пользовательского пространства — более сложным в некоторых отношениях (мы используем много очень странных заголовочных файлов, которые раздвигают границу того, что можно назвать «C»), но проще во многих других отношениях (в основном в том смысле, что ядро является самодостаточным, а затем не полагается на другие проекты для окончательного двоичного файла)».
С того места, где сидит Кроа-Хартман, «все будет сводиться к тому, насколько хорошо взаимодействие между основными структурами ядра и правилами жизненного цикла, написанными на языке С, может быть отображено в структурах Rust и правилах времени жизни для драйверов в Rust, чтобы они могли их использовать. Правильно. Разработчикам, желающим все это подключить, потребуется много тщательной работы, и я желаю им удачи».
Таким образом, хотя вы почти наверняка не увидите, как Linux будет портирован с C на Rust в ближайшее время, существует большой интерес по внедрению основанных пользовательских программ на Rust, драйверов и, в конечном счете, основанном на Rust ядер Linux в операционную систему GNU/Linux.
Будьте на связи. В ближайшие несколько лет все станет очень интересно.
Источник: ZDNet