Rust в ядре Linux: позиция Торвальдса, спор о DMA и конец эксперимента

Rust в ядре Linux: позиция Торвальдса, спор о DMA и конец эксперимента

21 февраля 2025 года, как пересказал OpenNET, Линус Торвальдс объяснил свою позицию по коду на Rust в ядре Linux. Поводом стал спор вокруг Rust-обвязок над подсистемой DMA, в котором участвовал и Грег Кроа-Хартман. Коротко: Rust никто не обязан учить, но и заблокировать его просто потому, что не нравится, нельзя. Спустя почти два года история закончилась: в декабре 2025 года эксперимент с Rust в ядре официально признали успешным.

Rust и Си: выбор, а не принудительный переход

По словам Торвальдса, никто не заставляет мейнтейнеров изучать Rust, использовать код на нём или вообще учитывать его в своей работе. Можно спокойно оставаться в Си. Но у этого есть обратная сторона: кто не участвует в развитии Rust-части, тот не может и решать, как Rust-код стыкуется с его подсистемой.

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

Спор вокруг DMA: где заканчиваются полномочия мейнтейнера

Острый момент был с Кристофом Хелвигом, одним из мейнтейнеров DMA. Он пытался не пустить в ядро Rust-обвязки над DMA API. Торвальдс эти действия раскритиковал: код лежал в отдельном подкаталоге, подсистему DMA не трогал и только пользовался её API. По сравнению Линуса, это как запретить какому-то драйверу использовать DMA лишь потому, что тебе не нравится драйвер.

Вывод из письма короткий: мейнтейнер отвечает за свой код, но не за то, как и кто использует результат его работы. Обвязки в итоге приняли, а Хелвиг вскоре ушёл из мейнтейнеров DMA-mapping, этот слой теперь ведёт Марек Шипровский. Тогда же на фоне напряжения вокруг Rust сложил с себя обязанности мейнтейнера в ядре Гектор Мартин из Asahi Linux.

Зачем ядру Rust

Си мощный, но опасный: переполнения буферов, use-after-free и гонки живут в ядре годами, а одна такая ошибка роняет систему или превращается в уязвимость. Rust проверяет владение памятью ещё при компиляции и убирает целый класс таких дефектов. Переписывать миллионы строк на Си при этом никто не собирается: Rust идёт в новые драйверы и модули, а со старым кодом общается через явные интерфейсы, как те самые обвязки DMA.

Декабрь 2025: эксперимент закончен, Rust остаётся

Поддержку Rust влили в ядро в версии 6.1 как эксперимент: нужно было понять, стоит ли язык своих издержек технически, организационно и по людям. 10 декабря 2025 года LWN сообщил, что на ежегодном Maintainers Summit разработчики сошлись: Rust в ядре больше не эксперимент, а его постоянная часть, и метку experimental снимают.

Через три дня Мигель Охеда, руководитель Rust for Linux, отправил патч, который убирает из документации раздел об эксперименте. В письме он пишет, что раздел и так уже был не совсем правдой: Rust в ядре используют в продакшене, его включают известные дистрибутивы, и через Android он работает на миллионах устройств. Работы ещё много, а некоторые сочетания, например смешанные сборки GCC и LLVM и будущая поддержка GCC, пока экспериментальные.

Что это значит на практике

  • Новые драйверы всё чаще будут на Rust или с Rust-обвязками над существующими API.
  • Для сборки ядра с Rust нужен свой тулчейн: rustc, bindgen и подходящий LLVM, это стоит учесть в CI.
  • Мейнтейнеры Си-подсистем могут не учить Rust, но и блокировать Rust-код поверх своих API не могут.
  • Компаниям, которые разрабатывают драйверы, есть смысл учить своих разработчиков Rust: на это прямо намекает Охеда.

В итоге позиция Торвальдса и Кроа-Хартмана оказалась не фанатизмом, а прагматизмом: Си и Rust живут рядом, никого не заставляют менять язык, но и вето на чужой корректный код нет. История с DMA была последним громким спором, а к концу 2025 года Rust стал постоянной частью ядра Linux.

Источники и ссылки


Комментарии загружаются…