LINUX.ORG.RU
ФорумTalks

Грег Кроа-Хартман рассказал о том, как Rust может помочь в борьбе с ошибками в ядре Linux

 , ,


0

5

https://www.opennet.ru/opennews/art.shtml?num=65549:

Грег Кроа-Хартман (Greg Kroah-Hartman), отвечающий за поддержку стабильной и «staging» веток ядра Linux, и занимающий пост мэйнтейнера в 16 подсистемах ядра, выступил с докладом на конференции Rust Week 2026, в котором рассказал, как язык Rust может помочь в предотвращении появления в ядре уязвимостей, возникающих из-за типичных ошибок разработчиков на языке Си при работе с памятью, блокировками, обработкой ошибок и работой с незаслуживающими доверия данными. В качестве основного преимущества Rust называется возможность выявлять подобные ошибки на этапе сборки, а не рецензирования кода людьми. При этом, Rust не рассматривается как панацея, способная избавить от всех проблем, и никто не собирается переписывать ядро на Rust - ожидается постепенное внедрение Rust через его использования для новых драйверов и подсистем.

В качестве примера ошибок в ядре, которые удалось бы избежать при использовании Rust, упомянута ошибка в подсистеме Bluetooth, остававшаяся незамеченной 15 лет, и проблема в гипервизоре Xen. В первом случае разработчик выполнил разыменование указателя без проверки, а во втором забыл снять блокировку в коде обработки ошибок. По словам Грега, большинство ошибок в ядре вызваны подобными мелочами, которые со временем накапливаются и всплывают как уязвимости. В Rust многие из подобных проблемы предотвращаются компилятором, например, Rust-абстракции для блокировок в ядре допускают получение доступа к внутренним указателям структур только после захвата соответствующей блокировки, которая снимается автоматически. Без захвата блокировки получить доступ к указателям структур на Rust не получится.

Грег считает, что подобные возможности Rust недопустили бы появления 60% ошибок, выявляемых в ядре, а выполняемые компилятором проверки избавили бы сопровождающих от траты времени на обсуждение с авторами корректности обработки ошибок и обоснованности выставления блокировок в нужном месте. Более того, внедрение поддержки Rust уже оказало благотворное влияние и на Си код в ядре, благодаря приведению в порядок Си-кода и интерфейсов, а также заимствованию некоторых приёмов разработки (например, были реализованы блокировки с ограниченной областью видимости).

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

Последнее время команда, отвечающая за безопасность в ядре, публикует каждый день примерно 13 отчётов об уязвимостях, что на фоне прошлой динамики выявления уязвимостей воспринимается как какое-то безумие (для примера за вчерашний день было опубликовано 277 отчётов об уязвимостях в ядре). По мнению Грега, использование Rust является одним из реальных способов добиться снижения числа ошибок в ядре, вызванных традиционными оплошностями при обработке ошибок и управлении ресурсами. В ядре поддержка Rust уже вышла за рамки эксперимента и в конце прошлого года была признана штатной возможностью ядра.

★★★★★
Ответ на: комментарий от splinter

$ gccrs-16 hello_world.rs:

crab1: fatal error: gccrs is not yet able to compile Rust code properly. Most of the errors produced will be the fault of gccrs and not the crate you are trying to compile. Because of this, please report errors directly to us instead of opening issues on said crate's repository.

Our github repository: https://github.com/rust-gcc/gccrs
Our bugzilla tracker: https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=__open__&component=rust&product=gcc

If you understand this, and understand that the binaries produced might not behave accordingly, you may attempt to use gccrs in an experimental manner by passing the following flag:

`-frust-incomplete-and-experimental-compiler-do-not-use`

or by defining the following environment variable (any value will do)

GCCRS_INCOMPLETE_AND_EXPERIMENTAL_COMPILER_DO_NOT_USE

For cargo-gccrs, this means passing

GCCRS_EXTRA_ARGS="-frust-incomplete-and-experimental-compiler-do-not-use"

as an environment variable.
compilation terminated.
dataman ★★★★★
() автор топика

DEI и леваки так пропихивают транс-агенду и прочее говно в ядро

Хотя, после того как Линус сдулся, принял CoC, и извинялся, что еще ожидать

lovesan ★★☆
()
Ответ на: комментарий от lovesan

А может, вместо борьбы просто сдаться и довериться borrow-checker’у? Я в том смысле, что даже с т.з. идеалистов человек был создан чтобы радоваться жизни, а не грустить…

seiken ★★★★★
()
Ответ на: комментарий от lovesan

Я просто не согласен такой концепцией, когда проводятся прямые параллели между социальной повесткой и технологиями.

Скажем, в 60е, когда Лисп появился, и постепенно всех стала захватывать идея символьных вычислений на списках, разве МакКарти как-либо намекал на какую-то там повесточку? Ну хотя бы хиппи он был? Ганджубасик курил?

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 1)
Ответ на: комментарий от seiken

Так это невозможно. У ядра же ГИГАНТСКАЯ кодовая база на C. Если они сейчас поддавшись модными веяниями начнут её пере-писывать, то просто угробят ядро наплодив сотни тысяч новых ошибок (не с памятью). В контексте безопасности тогда бы уж имело смысл завязаться на Fil-C или что-то аналогичное для операций с ненадёжными входными данными.

thunar ★★★★★
()
Последнее исправление: thunar (всего исправлений: 1)
Ответ на: комментарий от seiken

Я просто не согласен такой концепцией, когда проводятся прямые параллели между социальной повесткой и технологиями.

Именно этим ржавчина и отвратительна. И даже не сам этот средненький язычок как таковой, а его проповеднки и апологеты. Абсолютно вся растопропаганда растёт из книжонки двух тридварасов 1990-х о том, как ЛГБТ пропихивать везде. Никаких заслуг у самого языка при этом нет вообще. Только последствия активности Rust Evangelism Strike Force.

Если сравнить с эволюцией такого же безынтересного и нетакусечного питонв - эта проблема раста становится особенно выпуклой.

В общем, как говорят в америцах - «go woke - go broke». Так что перспектив у раста нет никаких, как бы всякие евангелисты не пыжились.

Stanson ★★★★★
()
Ответ на: комментарий от seiken

И, отвечая на свой же вопрос… Факты говорят о том, что МакКарти было пофиг на повесточку, он занимался тем, что интересно, и плевал, откуда идёт финансирование:

On July 1, 1963, Project MAC (the Project on Mathematics and Computation, later backronymed to Multiple Access Computer, Machine Aided Cognitions, or Man and Computer) was launched with a $2 million grant from the Defense Advanced Research Projects Agency (DARPA).

Так почему же в 2026г. апологеты раста должны быть ассоциированы с повесточкой?

seiken ★★★★★
()
Ответ на: комментарий от Stanson

Если сравнить с эволюцией такого же безынтересного и нетакусечного питонв

Питон - это лучшее, что случилось с айтишечкой со времён Лиспа.

seiken ★★★★★
()
Ответ на: комментарий от WatchCat

Надеются, что местные комментаторы что-то новое скажут?

Ну вот уже пошла связь раста с ЛГБТ) Раньше такое было? И при чем тут вообще ЛГБТ, разве Трамп все это не похерил?)

goingUp ★★★★★
()
Ответ на: комментарий от seiken

borrow checker это новые «типы», или там «шаблоны»

Суть одна - задротство, и strange set of limitations.

Про всё это еще Марвин Мински говорил

https://www.youtube.com/watch?v=YaWVHyIBVeI

Я просто не согласен такой концепцией, когда проводятся прямые параллели между социальной повесткой и технологиями.

В случае Rust она есть. И прямая.

Скажем, в 60е, когда Лисп появился, и постепенно всех стала захватывать идея символьных вычислений на списках, разве МакКарти как-либо намекал на какую-то там повесточку? Ну хотя бы хиппи он был? Ганджубасик курил?

Диалекты лиспа развивались бородатыми хакерами, а не поехавшими аутистами с транс-агендой с их хендлерами в леволиберальных элитах и спецслужбах.

lovesan ★★☆
()
Ответ на: комментарий от seiken

Python это Visual Basic, вот абсолютно.

И вспоминать про него так же будут, и еще плеваться - потому что придется поддерживать кучу говна которого на нем понаписали

lovesan ★★☆
()
Ответ на: комментарий от goingUp

И при чем тут вообще ЛГБТ, разве Трамп все это не похерил?)

Можно подумать это легко так вот похерить.

Он только на уровне государственных служб итп, это запретил. Активисты, леволиберальные элиты, итп - никуда вдруг не исчезли

lovesan ★★☆
()

В качестве примера ошибок в ядре (…) упомянута ошибка в подсистеме Bluetooth, остававшаяся незамеченной 15 лет

Раст помогает избегать ошибок, которые никому не мешают.

thesis ★★★★★
()

Линус Торвальдс рассказал о том, как Swift сможет помочь в борьбе с ошибками в ядре Linux

Линус Торвальдс рассказал о том, как Carbon сможет помочь в борьбе с ошибками в ядре Linux

Линус Торвальдс рассказал о том, как <…> сможет помочь в борьбе с ошибками в ядре Linux

Лоровец рассказал о том, как <…> никогда бы не помог в борьбе с ошибками в ядре Linux

dataman ★★★★★
() автор топика
Ответ на: комментарий от lovesan

В классическом VB не было:

1) REPL;
2) интроспекции;
3) функции как first-class citizen;
4) list comprehensions (абсолютная киллер-фича, самый удачный синтаксический сахар в мире);
5) полиморфизма на уровне классов (не инстансов);
6) и сам ВБ рантайм, и расширения можно было пилить только под Винду и только виндовыми средствами через COM;
7) компилятора.

.NET VB это уже просто не ВижлБейсик, а клон тогдашнего C#. А C# - это уже фундаментальный подход для Энтерпрайза, с полным фаршем корпоративного ПО разработчика от МС. Это уже принципиально иная ниша ПО.

А питон - это инструмент практикующего хакера. Захотел - влез в кишки опенсорсной либы элементарно поставив брейкпоинт в исходнике (заметьте, без IDE вообще). Захотел - лепишь в стиле ООП. Захотел - процедурная лапша. Но с целью хакинга во вне, а не написанию крипто-кода в самом исходнике, как в перле. Захотел быстро и дёшево слепить недо-биндинг на ctypes к сишной либе - Э-ЛЕ-МЕН-ТАР-НО!

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 1)
Ответ на: комментарий от lovesan

А в какой ряд идти леволиберальному Столлману с отсутствующими у него «хэндлерами»?

seiken ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)