Рамка за пишување безбедни драјвери за кернелот Линукс во Rust

Џош Триплет, кој работи во Интел и е член на комисијата што го надгледува развојот на Crates.io, говорејќи на Самитот за технологија со отворен код воведено работна група насочена кон усогласување на јазикот Rust со јазикот C во областа на системското програмирање.

Во работната група која е во процес на креирање, програмерите на Rust, заедно со инженерите од Интел, ќе подготват спецификации за дефинирање на функционалноста што треба да се имплементира во Rust за програмирање на системи. Системското програмирање често бара манипулација на ниско ниво, како што е извршување на привилегирани инструкции за процесорот и добивање детални информации за состојбата на процесорот. Од сличните карактеристики што веќе се развиваат за Rust, се забележува поддршка за неименувани структури, синдикати, инсерти на асемблерски јазик (макрото „asm!“) и форматот на броеви со подвижна запирка BFLOAT16.

Џош верува дека иднината на системското програмирање му припаѓа на Rust, а јазикот C во современите реалности го зазема местото што во изминатите години го заземаше Собранието. Рѓа
не само што ги ослободува програмерите од проблемите својствени на јазикот C што се јавуваат поради работата на ниско ниво со меморијата, туку и дава можност да го користат во развојот на современи програмски парадигми.

Во текот на дискусии настапи
Џош дојде до идеја да додаде можност за развивање драјвери во кернелот на Linux на јазикот Rust, што ќе овозможи да се создадат побезбедни и подобри драјвери со минимален напор, без проблеми како што се пристап до меморијата по ослободувањето, нула дереференци на покажувачот и пречекорувања на баферот.

Грег Кроа-Хартман, кој е одговорен за одржување на стабилната гранка на кернелот Линукс, ја изрази својата подготвеност да додаде рамка за развој на драјвери на јазикот Rust во кернелот доколку има вистински предности во однос на C, на пример, ќе обезбеди безбедна врзување преку Kernel API. Дополнително, Грег ја смета оваа рамка само како опција, не е стандардно активна, за да не го вклучи Rust како build зависност од кернелот.

Се покажа дека неколку екипи веќе работат во оваа насока. На пример, програмерите од компанијата „Риба во буре“ подготвени комплет со алатки за пишување модули што може да се вчитаат за кернелот Линукс на јазикот Rust, користејќи збир на апстрактни слоеви преку интерфејсите и структурите на јадрото за да се зголеми безбедноста. Слоевите автоматски се генерираат врз основа на постоечките датотеки за заглавие на кернелот користејќи ја алатката bindingen. Clang се користи за изградба на слоеви. Покрај меѓуслојните, собраните модули го користат пакетот staticlib.

Паралелно се развива Друг проект се фокусираше на развивање двигатели за вградени системи и уреди за IoT, кој исто така користи bindgen за да генерира слоеви базирани на датотеки со заглавие на јадрото. Рамката ви овозможува да ја подобрите безбедноста на возачот без да правите промени во кернелот - наместо создавање дополнителни нивоа на изолација за драјверите во кернелот, се предлага да се блокираат проблемите во фазата на компилација, користејќи го побезбедниот јазик Rust. Се претпоставува дека таквиот пристап може да биде баран од производителите на опрема кои развиваат сопственички драјвери набрзина без да спроведат соодветна ревизија.

Сè уште не е имплементирана целата предвидена функционалност, но рамката е веќе сосема погодна за работа и се користеше за пишување работен двигател за контролерот за USB етернет LAN9512 испорачан во плочката Raspberry Pi 3. Постоечкиот двигател smsc95xx, напишан од во C јазик. Забележано е дека големината на модулот и горните трошоци од компонентите на траење при развивање на драјвер во Rust се незначителни, што овозможува рамката да се користи за уреди со ограничени ресурси.

Извор: opennet.ru

Додадете коментар