Поиск по сайту:

Rust в Linux сейчас: прогресс, подводные камни и почему разработчики и сопровождающие нуждаются друг в друге

Куда дальше пойдут Linux и Rust? Круглый стол разработчиков ядра делится своими мыслями.

Джонатан Корбет, разработчик ядра Linux и редактор LWN, на Open Source Summit Europe 2024.

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

В дискуссии, которую модерировал Джонатан Корбет, разработчик ядра Linux и соучредитель Linux Weekly News (LWN), приняли участие разработчики Элис Рил, инженер-программист 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 для Linux, недавно покинул проект, написав в списке рассылки ядра Linux (LKML). Он ушел, потому что: «Спустя почти четыре года мне не хватает энергии и энтузиазма, которые мне когда-то требовались, чтобы реагировать на некоторую нетехническую ерунду, поэтому лучше оставить это тем, у кого они еще есть». Охеда сказал, что, несмотря на это, «основная команда Rust все еще растет».

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

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

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

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

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

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

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

Статьи по данной тематике