Rust в Linux сейчас

Известные разработчики ядра Linux собрались, чтобы поделиться мнениями о текущем состоянии и будущем разработки ядра на недавнем круглом столе в рамках Open Source Summit Europe в Вене.

В дискуссии, которую вел Джонатан Корбет, разработчик ядра Linux и соучредитель Linux Weekly News, приняли участие Элис Рил, инженер-программист Google в команде Android Rust, Йозеф Бачик, технический руководитель команды файловой системы ядра Meta – Анна-Мария Бэнсен, разработчик ядра Linux в Linutronix, которая работала над Linux реального времени, и Дэн Уильямс, член команды Intel по архитектуре ядра Linux.

Одним словом, в состав группы вошли представители нескольких компаний. В мире Linux и открытых исходных кодов люди постоянно работают вместе, преодолевая границы компаний. Эти люди также получают доход, работая над Linux. Некоторые говорят, что вы не можете зарабатывать на жизнь, работая над открытым программным обеспечением и Linux. Это неправда. В Linux и работе с открытым исходным кодом есть реальные деньги.

Большая часть дискуссии была посвящена интеграции Rust в ядро Linux. На саммите мейнтейнеров ядра Linux, состоявшемся накануне, Корбет сказал: «В некоторых кругах было некоторое недовольство тем, как долго это длится. Я думаю, некоторые люди хотели, чтобы Rust захватил мир быстрее, чем это произошло».

На саммите мейнтейнеров Линус Торвальдс, которому нравится присутствие Rust в Linux, заметил, что некоторые функции ядра, такие как модверсии, в настоящее время несовместимы с Rust, но над ними ведется работа.

Райль, работающий с Rust, выразил оптимизм по поводу прогресса, хотя и признал, что для интеграции потребуется время:

«Есть вещи, которые я хотел бы видеть уже сейчас, и некоторые вещи можно было бы внедрить быстрее, но все всегда будет становиться лучше».

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

По словам разработчика Linux и Rust Мигеля Охеды, который выступал на Linux Plumbers Rust in Linux, ответ заключается в том, чтобы сопровождающие работали с разработчиками Rust для Linux. Сопровождающие привносят свое понимание подсистемы, а программисты на Rust – свои знания языка. Работая вместе, эти две группы могут помочь внедрить код Rust в Linux.

Рил согласился: «Для меня успешным подходом является объединение разработчика ядра и эксперта по Rust. Я общался с сопровождающим, и мы вместе изучали патч. Мы могли учиться друг у друга».

Это был пример того, что может произойти, когда все идет хорошо. Иногда, однако, это не так.

Уэдсон Алмейда, инженер-программист Microsoft и один из сопровождающих Rust for Linux, недавно покинул проект, написав об этом в списке рассылки Linux Kernel Mailing List. Он ушел потому, что «после почти четырех лет я обнаружил, что мне не хватает энергии и энтузиазма, чтобы отвечать на некоторые нетехнические глупости, так что лучше оставить это тем, у кого это еще есть». Охеда сказал, что, несмотря на это, «основная команда Rust продолжает расти».

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

Например, Аль Виро, сопровождающий Linux Virtual Filesystem, сказал, что Йозеф Бацик переработал 65 страниц документации. Это, в свою очередь, сделало связанный с ней код на языке C гораздо проще для будущих разработчиков. Теперь в документации даны четкие правила, что и зачем делает код.

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

Корбет также заметил, что некоторая напряженность вокруг документации возникает из-за того, что Rust и C принципиально разные способы решения проблем:

Если вы посмотрите на то, как API на языке C в ядре вызывается таким образом, вы должны убедиться, что вызываете его именно так, и этот указатель лучше не должен быть null, и не трогайте вон ту кнопку, иначе все взорвется. Подход Rust заключается в том, что мы разрабатываем API, поэтому ваш код, скорее всего, будет корректным, если компилятор позволит вам его вызвать. C просто не позволяет вам этого сделать. Но когда мы пытаемся разработать Rust API для ядра, они должны располагаться поверх этих C API. Таким образом, существует фундаментальное несоответствие в используемом подходе, и я вижу, что это толкает обратно в C API и пытается заставить изменения там. Я думаю, что изменения хороши, но я думаю, что это создает некоторое сопротивление со стороны сопровождающих существующих API, которые десятилетиями создавали и использовали эти API, знают, где находятся подводные камни, и могут инстинктивно их избегать.

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

Охеда также отметил, что некоторые дистрибутивы Linux, в частности Debian и Ubuntu, принимают Rust. Короче говоря, он заключил, что «Rust сейчас находится в хорошем положении». Может быть, Rust и не вошел в Linux так быстро, как хотелось бы некоторым, но он успешно развивается.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Комментарии (0)