Rust ичинде Linux ядросу үчүн коопсуз драйверлерди жазуу үчүн алкак

Джош Триплетт, Intelде иштеген жана Crates.ioнун өнүгүшүн көзөмөлдөгөн комитетте, Ачык булак технологиялары саммитинде сүйлөп жатып берилген системалык программалоо жаатында Rust тилин Си тили менен паритеттүү кылууга багытталган жумушчу топ.

Түзүлүп жаткан жумушчу топтун ичинде Rust иштеп чыгуучулары Intel инженерлери менен бирге системалык программалоо үчүн Rust программасында ишке ашырылышы керек болгон функцияларды аныктаган спецификацияларды даярдашат. Системалык программалоо көбүнчө процессордун артыкчылыктуу көрсөтмөлөрүн аткаруу жана процессордун абалы жөнүндө толук маалымат алуу сыяктуу төмөнкү деңгээлдеги манипуляцияларды талап кылат. Rust үчүн буга чейин иштелип чыккан окшош функциялардын ичинен аты аталбаган структураларды, бирикмелерди, ассемблер тилинин кошумчаларын («asm!» макро) жана BFLOAT16 калкыма чекиттик сан форматтарын колдоо белгиленген.

Джош системалык программалоонун келечеги Rustка таандык деп эсептейт, ал эми Си тили заманбап реалдуулукта өткөн жылдарда Ассамблея ээлеген орунду талап кылууда. Rust
Эстутум менен төмөнкү деңгээлдеги иштөөдөн улам келип чыккан Си тилине мүнөздүү көйгөйлөрдөн иштеп чыгуучуларды бошотпостон, аны заманбап программалоонун парадигмаларын иштеп чыгууда колдонууга мүмкүнчүлүк берет.

Жүрүшүндө талкуулоо аткаруулар
Джош Linux ядросунда драйверлерди Rust тилинде иштеп чыгуу мүмкүнчүлүгүн кошуу идеясы менен чыкты, бул бошоткондон кийин эстутумга жетүү сыяктуу көйгөйлөрдөн арылбаган коопсуз жана жакшыраак драйверлерди минималдуу күч менен түзүүгө мүмкүндүк берет, null көрсөткүчтү жокко чыгаруу жана буфер ашыкча.

Linux ядросунун туруктуу бутагын сактоого жооптуу Грег Кроах-Хартман, мисалы, C тилине караганда реалдуу артыкчылыктарга ээ болсо, ядрого Rust тилинде драйверлерди иштеп чыгуу үчүн негизди кошууга даяр экенин билдирди. ядро API аркылуу байланыштар. Кошумчалай кетсек, Грег бул алкакты демейки боюнча активдүү эмес вариант катары гана карайт, андыктан Rust ядрого куруу көз карандылыгы катары кирбейт.

Бул багытта азыртан эле бир нече бригада иштеп жаткандыгы маалым болду. Мисалы, компаниянын иштеп чыгуучулары "Балык баррель" даяр коопсуздукту жогорулатуу үчүн интерфейстердин жана ядро ​​түзүмдөрүнүн үстүнөн абстракттуу катмарлардын топтомун колдонуу менен Rust тилинде Linux ядросу үчүн жүктөлүүчү модулдарды жазуу үчүн инструменттер топтому. Катмарлар утилитаны колдонуу менен учурдагы ядро ​​​​файлдарынын негизинде автоматтык түрдө түзүлөт биндген. Clang катмарларды куруу үчүн колдонулат. Чогулган модулдар аралык катмарлардан тышкары staticlib пакетин колдонушат.

Параллель иштеп Дагы бир долбоор кыналган системалар жана IoT түзмөктөрү үчүн драйверлерди иштеп чыгууга багытталган, ал ошондой эле ядронун баш файлдарынын негизинде катмарларды түзүү үчүн bindgen колдонот. Алкак өзөккө өзгөртүүлөрдү киргизбестен драйвердин коопсуздугун жакшыртууга мүмкүндүк берет - ядродогу драйверлер үчүн кошумча изоляция деңгээлин түзүүнүн ордуна, компиляция стадиясында көйгөйлөрдү коопсузураак Rust тилин колдонуу менен бөгөттөө сунушталат. Мындай мамиле талап кылынышы мүмкүн деп болжолдонууда жабдууларды өндүрүүчүлөр үчүн проприетардык айдоочуларды иштеп чыгуу, шашылыш текшерүү жүргүзүү жок.

Белгиленген функциялардын баары али ишке аша элек, бирок алкак жумушка абдан ылайыктуу жана Raspberry Pi 9512 тактасында берилген LAN3 USB Ethernet контроллери үчүн жумушчу драйверди жазуу үчүн колдонулган. Учурдагы smsc95xx драйвери, C тили. Rust'та драйверди иштеп чыгууда модулдун өлчөмү жана иштөө убактысынын компоненттеринин кошумча чыгымы анча чоң эмес экендиги белгиленет, бул алкакты ресурстары чектелген түзмөктөр үчүн колдонууга мүмкүндүк берет.

Source: opennet.ru

Комментарий кошуу