
В ядре Linux происходят постепенные изменения, и для программистов это самое главное: сам язык, на котором они пишут. К такому значительному шагу нужно подходить осторожно, но это повод для празднования.
Какое ядро Linux написано в данный момент?
Ядро Linux — это основа операционной системы, осуществляющая низкоуровневое управление такими ресурсами, как память, процессор и файловые системы. Это программное обеспечение, скрытое от 99.99% пользователей, но влияющее на всё, что происходит на вашем компьютере.

Линус Торвальдс начал разработку ядра в 1991 году, используя язык программирования C (низкоуровневый язык) и ассемблер (настолько низкоуровневый, насколько это вообще возможно). Несмотря на попытки реализовать поддержку языков более высокого уровня, таких как C++, в 1997 году, ядро с тех пор остаётся на языке C. Даже сегодня, согласно репозиторию ядра на GitHub, 98% его кода написано на C:

Помимо неудачного эксперимента с C++, единственным языком, потенциально претендовавшим на роль в ядре, был Rust. Rust 1.0, относительно новый язык, появился в 2015 году. Его синтаксис был похож на C, но в его дизайне прослеживаются влияния языков программирования всех остальных. Программисты уже экспериментировали с более ранними версиями этого языка как с вариантом для программирования модулей ядра, и в 2013 году был разработан прототип.
С тех пор разработчики Linux предприняли шаги по использованию Rust в разработке ядра, хотя прогресс шёл медленнее, чем ожидалось. Проект Rust для Linux стартовал в 2020 году и ознаменовал начало целенаправленной работы по портированию драйверов ядра на Rust в попытке уменьшить количество ошибок. Это привело к включению драйверов, написанных на Rust, в версию ядра 6.8, выпущенную в декабре 2023 года.

Что сейчас меняется?
В ядро Linux добавляется всё больше драйверов Rust. Хотя код Rust составляет всего 0.1% от общей кодовой базы, это всё равно 143 отдельных файла, охватывающих все аспекты ядра.
В версии ядра 6.16 реализованы улучшения Rust для Linux, устраняющие состояния гонки. Обновления ядра обычно выпускаются каждые два месяца, поэтому работа над Rust продолжается, и проект по-прежнему очень активен. Похоже, разработчики ядра по-прежнему полны решимости продолжать работу над этим проектом, несмотря на отдельные голоса несогласных.
Драйвер Tyr для графических процессоров ARM Mali — современный пример работы над Rust для Linux. Этот графический драйвер ядра написан на Rust и призван расширить теоретические разработки, проделанные к настоящему времени. Наличие реального драйвера, работающего на основе существующей совместимости, означает возможность тестирования проделанной работы в реальных условиях. Это должно способствовать более быстрому развитию инициативы Rust для Linux.
Почему это хорошо?
На сайте Rust он в настоящее время описывается следующим образом:
Язык, позволяющий каждому создавать надежное и эффективное программное обеспечение.
Это утверждение не касается непосредственно программирования ядра, но код, лежащий в основе ОС, должен быть надежным и эффективным.
Одно из ключевых преимуществ Rust — безопасность памяти. Способ, которым язык распределяет память, — один из факторов, определяющих, является ли он низкоуровневым или высокоуровневым. Низкоуровневые языки предоставляют программистам огромные возможности, позволяя им вручную управлять памятью, но ожидая от них ответственного подхода. Высокоуровневые языки, как правило, защищают программиста, самостоятельно распределяя память. Для автоматической очистки памяти часто используется сборщик мусора, но это может привести к снижению эффективности.
В Rust используется другой подход: система владения используется для реализации безопасных для памяти методов без необходимости использования ресурсоёмкого сборщика мусора. Язык также обрабатывает параллелизм аналогичным образом, устраняя ещё одну особенность, которая часто становится источником ошибок.

Ошибки в ядре особенно коварны, поскольку могут повлиять на любой другой запущенный программный код. Их также трудно обнаружить, а поскольку код, в котором они находятся, высокооптимизирован, их сложно диагностировать и исправить. Ошибки ядра могут быть гораздо более катастрофическими, чем ошибки в приложениях: они могут вывести из строя целые системы и открыть уязвимости в системе безопасности, которыми могут воспользоваться злоумышленники.
Чтобы избежать этих ошибок, разработчикам ядра нужно не торопиться и уделять больше внимания своей работе. Короче говоря, ошибки ядра замедляют прогресс. Это одна из причин, по которой я с нетерпением жду перехода на Rust. Устранение определённых типов ошибок может ускорить разработку ядра и повысить её скорость.
Rust также набирает популярность. Хотя C всё ещё более популярен (20.3% против 12.6% по данным опроса StackOverflow за 2024 год), Rust догоняет его, и вполне возможно, что больше новых программистов, сейчас или в скором времени, начнут использовать Rust. Даже если ядро пока медленно принимает модули, написанные на Rust, работа по его подготовке ценна.
И это подводит меня к заключительному пункту: даже простое рассмотрение альтернативного языка уже полезно. Контроль над всеми частями кодовой базы, анализ архитектуры и повышение её адаптируемости к другим языкам — это, должно быть, хорошо.
