Линус Торвальдс заявил, что продолжит интеграцию кода Rust, несмотря на возражения мейнтейнеров ядра Linux

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

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

В то же время Торвальдс в частном порядке уточнил Хеллвигу и другим участникам проекта, что обязательно объединит ветки кода с Rust. «Так что на данный момент, как разработчик или сопровождающий Linux, вы должны иметь дело с Rust, хотите вы этого или нет. Сейчас правила таковы, что Линус может заставить вас сделать всё, что захочет. Это, очевидно, его проект, и я думаю, ему нужно очень четко это изложить, включая ожидания для участников», — пояснил Хеллвиг.

Где код Rust не просто означает код Rust [1] — привязки (bindings) не выглядят как идиоматический код Rust, они совсем другой вид зверя, пытающегося преодолеть огромный семантический разрыв. И они не делают этого в нескольких местах, потому что они показаны в каждой маленькой подсистеме и библиотеке прямо сейчас.

Таким образом, мы заставим эти привязки ползать повсюду, как раковая опухоль, и очень быстро перейдём от программного проекта, который допускает и стремится к глобальным изменениям, которые улучшают общий проект, к увеличению компартментализации [2]. Это превращает Linux в проект, написанный на нескольких языках, без чётких указаний, какой язык должен использоваться для чего [3]. Даже за пределами привязок большая часть кода не будет очень идиоматичным Rust из-за структур данных ядра, которые навязчивы и ссылаются на себя, как структуры данных, такие как вездесущие связанные списки. Разве мы не оказываем медвежью услугу как тем, кто пытается перенести существующую кодовую базу в лучшее, более безопасное пространство, так и разработчикам, занимающимся системным программированием на Rust?

Работая с такой кодовой базой, это стало моим худшим кошмаром, потому что постоянно приходится переписывать части с языка A на язык B по причине X, а затем обратно по причине Z. И это без обычного «творческого» процесса Linux, когда мейнтейнеры борются друг с другом.

Я хотел бы понять, в чём заключается цель этого «эксперимента» Rust: если мы хотим исправить существующие проблемы с безопасностью памяти, нам нужно сделать это для существующего кода и найти способы его модернизации. В последнее время в это было вложено много работы, и нам нужно гораздо больше. Но это также показывает, как основных мейнтейнеров отпугивают тривиальные вещи, такие как проверка на переполнение целочисленных значений или принудительная синхронизация компилятора (как в clang thread sanitizer). Как мы собираемся преодолеть разрыв между частью ядра, которая даже не принимает относительно простые правила для улучшения безопасности, и другой, которая применяет даже строгие правила?

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

Что касается меня, то я могу справиться и справляюсь с самим Rust, мне бы хотелось перенести ядро ​​в более безопасный для памяти мир, но работа с неконтролируемой многоязыковой кодовой базой — это довольно верный способ заставить меня тратить своё свободное время на что-то другое. Я слышал, как несколько других разработчиков бормочут что-то подобное, но не все столь откровенны.

[1] Я написал и работал над довольно большим количеством пользовательского кода Rust, но я ни в коем случае не эксперт, так что отнеситесь к этому с долей скепсиса.

[2] Идея драйверов в eBPF, как это сделано HID, также не помогает в этом так же, как мне нравится eBPF для некоторых случаев использования.

[3] Если только Линус не заставит его встроиться в вашу подсистему, или Дэйв не решит, что все, что касается оборудования Nvidia, должно быть в Rust, конечно.

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

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

В начале сентября 2024 года команда разработчиков проекта по внедрению Rust для ядра Linux потерпела поражение в сражении с разработчиками на С. Лидер Rust для Linux объявил, что уходит из проекта из‑за «нетехнической ерунды» (nontechnical nonsense). Он пояснил, что возглавлял команду уже 4 года, но у него нет того энтузиазма, который был ранее, чтобы продолжать отстаивать место Rust в ядре, которое в основном написано на C.

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

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии