Rust в ядре Linux: лекарство или яд? Споры о будущем

в 9:07, , рубрики: C, linux, Rust, selecterl, Программирование
Rust в ядре Linux: лекарство или яд? Споры о будущем - 1

В мире разработки программного обеспечения, особенно в области системного программирования, языки C и Rust занимают особое место. C, как проверенный временем язык, десятилетиями служил основой для создания операционных систем, включая Linux. Однако с появлением Rust, который позиционируется как более безопасный и современный ЯП, начались жаркие споры о том, стоит ли переписывать части ядра Linux на Rust или оставить всё как есть. Дискуссия вышла на новый уровень, когда разработчики Linux начали активно сопротивляться внедрению Rust. Кристоф Хеллвиг даже сравнил нововведение с «раковой опухолью». Что стоит за этим противостоянием, и почему Rust вызывает такие полярные мнения?

Почему Rust вызывает бурные дискуссии?

Rust в ядре Linux: лекарство или яд? Споры о будущем - 2

Rust был создан с целью устранить недостатки C и C++, такие как уязвимости, связанные с управлением памятью, и неопределенное поведение. Rust действительно устраняет целый класс проблем, связанных с use-after-free, double free, null dereference и data race благодаря системе владения (ownership) и строгой проверке заимствования (borrowing). Однако именно эти особенности делают его сложным для интеграции в существующие проекты, написанные на C, такие как ядро Linux.

Кристоф Хеллвиг (Christoph Hellwig), один из ключевых разработчиков ядра Linux, высказал резкую критику в адрес Rust. Он заявил, что поддержка многоязыковых проектов, таких как ядро Linux, где одновременно используются C и Rust, является «болью» и усложняет процесс разработки. Хеллвиг, как сказано выше, сравнил внедрение Rust с «раковой опухолью», подчеркнув, что это не относится к самому языку, а скорее к проблемам, которые возникают при смешивании разных языков в одной кодовой базе.

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

Хеллвиг подчеркивает, что интерфейсы к API, таким как DMA (Direct Memory Access), должны оставаться в читаемом коде на C, чтобы их было легче поддерживать. Он также выразил сомнение в том, что Rust сможет стать полноценной заменой C в ядре Linux, учитывая его относительную новизну и отсутствие опыта использования в таких масштабных проектах.

Rust сам по себе не является универсальным решением. У этого языка и его интеграции в ядро Linux есть свои недостатки, которые нельзя игнорировать.

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

Есть и проблемы с производительностью из-за рантайм-проверок. Одной из ключевых особенностей Rust является его система владения и заимствования, которая предотвращает множество ошибок на этапе компиляции. Однако в некоторых случаях это требует дополнительных проверок во время выполнения, что может негативно сказаться на производительности. Для ядра Linux, где каждая микросекунда на счету, такие накладные расходы могут стать серьёзной проблемой.

Более того, внедрение Rust в ядро Linux — это не только технический, но и организационный вызов. Многие разработчики, годами работающие с C, не готовы переходить на новый язык. Кто-то не согласен с таким решением, кто-то не хочет тратить время на изучение Rust, а кто-то просто считает, что текущий подход с использованием C достаточно эффективен. Это приводит к конфликтам и длительным дискуссиям, которые часто выходят за рамки технических вопросов. Именно такие «нетехнические споры» и упоминал Ведсон Алмейда Фильо, когда говорил о «бесполезной ерунде», которая мешает прогрессу.

Rust в ядре Linux: лекарство или яд? Споры о будущем - 3

Аргументы в пользу Rust

Rust в ядре Linux: лекарство или яд? Споры о будущем - 4

Несмотря на критику, у Rust есть множество сторонников, которые видят в нем будущее системного программирования. Кис Кук (Kees Cook), разработчик из Google, утверждает, что Rust может значительно повысить безопасность ядра Linux. По его словам, многие уязвимости в ядре связаны с ошибками управления памятью, которые Rust помогает предотвратить на этапе компиляции.

Проект Rust for Linux, запущенный в 2020 году, ставит своей целью внедрение Rust в ядро Linux. Однако этот проект столкнулся с серьезными трудностями. В сентябре 2024 года один из ключевых разработчиков проекта, Ведсон Алмейда Фильо (Wedson Almeida Filho), покинул его, сославшись на «бесполезную нетехническую ерунду» и отсутствие прогресса.

Мини-драйвер как катализатор конфликта


Одним из триггеров для обострения споров стал небольшой патч, который позволял драйверам, написанным на Rust, использовать функцию C API DMA dma_alloc_coherent(). Этот патч вызвал бурную реакцию Хеллвига, который потребовал не добавлять код Rust в раздел kernel/dma. Хотя позже выяснилось, что патч был добавлен в другой раздел, это не остановило критику.

Мигель Охеда (Miguel Ojeda), один из участников проекта Rust for Linux, попросил Хеллвига предложить альтернативу, но получил резкий ответ: «Сохраняйте оболочки в своем коде, вместо того чтобы усложнять жизнь другим». Хеллвиг также заявил, что интерфейсы к API DMA должны оставаться в читаемом коде на C, чтобы их было легче поддерживать.

Несмотря на сопротивление, многие разработчики продолжают выступать за внедрение Rust в ядро Linux. Они считают, что Rust может стать важным инструментом для повышения безопасности и надёжности ядра. Однако процесс интеграции Rust в Linux замедлился, и будущее проекта Rust for Linux остается под вопросом.

Гектор Мартин (Hector Martin), руководитель проекта Asai Linux, считает, что последнее слово в этом споре должно остаться за Линусом Торвальдсом (Linus Torvalds), создателем Linux. По его мнению, если Торвальдс примет pull request с кодом на Rust, то это станет сигналом для дальнейшего развития проекта. Если же нет, то Rust for Linux, скорее всего, будет заброшен. В ответ Торвальдс отметил, что медиа-кампании не способствуют решению технических вопросов и предложил сосредоточиться на технических обсуждениях.

Споры вокруг Rust в ядре Linux отражают более широкую дискуссию о будущем системного программирования. С одной стороны, Rust предлагает современные решения для повышения безопасности и надёжности кода. С другой, его интеграция в существующие проекты, такие как Linux, сопряжена с серьёзными техническими и организационными трудностями.

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

Автор: erbanovanastasia

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js