Rust жүйесінде Linux ядросы үшін қауіпсіз драйверлерді жазуға арналған құрылым

Intel-де жұмыс істейтін және Crates.io-ның дамуын қадағалайтын комитетте жұмыс істейтін Джош Триплетт ашық бастапқы технологиялар саммитінде сөйлеген сөзінде енгізілді жүйелік бағдарламалау саласында Rust тілін Си тілімен паритетке келтіруге бағытталған жұмыс тобы.

Жасалу үстіндегі жұмыс тобында Rust әзірлеушілері Intel инженерлерімен бірге жүйелік бағдарламалау үшін Rust жүйесінде іске асырылуы қажет функционалдылықты анықтайтын спецификацияларды дайындайды. Жүйені бағдарламалау көбінесе процессордың артықшылықты нұсқауларын орындау және процессордың күйі туралы егжей-тегжейлі ақпарат алу сияқты төмен деңгейлі манипуляцияларды қажет етеді. Rust үшін қазірдің өзінде әзірленіп жатқан ұқсас мүмкіндіктердің ішінде атаусыз құрылымдарға, одақтарға, ассемблер тілінің кірістірулеріне («asm!» макросы) және BFLOAT16 өзгермелі нүкте сандар пішіміне қолдау көрсетілген.

Джош жүйелік бағдарламалаудың болашағы Rustқа тиесілі деп санайды, ал Си тілі қазіргі заманғы шындықта өткен жылдары Ассамблея иеленген орынды талап етеді. Тот
әзірлеушілерді жадпен төмен деңгейде жұмыс істеуге байланысты туындайтын Си тіліне тән мәселелерден босатып қана қоймайды, сонымен қатар оны қазіргі заманғы бағдарламалау парадигмаларын әзірлеуде пайдалану мүмкіндігін береді.

Кезде пікірталастар қойылымдар
Джош Linux ядросында драйверлерді Rust тілінде әзірлеу мүмкіндігін қосу идеясын ұсынды, бұл аз күш жұмсап, босатқаннан кейін жадқа қол жеткізу сияқты проблемаларсыз қауіпсіз және жақсырақ драйверлерді жасауға мүмкіндік береді, null меңзерді жою және буфердің асып кетуі.

Linux ядросының тұрақты тармағын қолдауға жауапты Грег Кроа-Хартман, ядроға Rust тілінде драйверлерді әзірлеу үшін негізді қосуға дайын екенін білдірді, егер ол C тілінен нақты артықшылықтарға ие болса, мысалы, ол қауіпсіздікті қамтамасыз етеді. ядро API арқылы байланыстыру. Бұған қоса, Грег бұл құрылымды тек әдепкі бойынша белсенді емес опция ретінде қарастырады, сондықтан Rust ядроға құрастыру тәуелділігі ретінде қосылмауы үшін.

Бұл бағытта қазірдің өзінде бірнеше ұжым жұмыс істеп жатқаны белгілі болды. Мысалы, «Бөшкедегі балық» компаниясының әзірлеушілері дайындалды қауіпсіздікті арттыру үшін интерфейстер мен ядро ​​құрылымдарының үстіндегі дерексіз қабаттар жинағын пайдаланып, Linux ядросы үшін жүктелетін модульдерді Rust тілінде жазуға арналған құралдар жинағы. Қабаттар утилитаны пайдаланып бар ядро ​​​​тақырып файлдары негізінде автоматты түрде жасалады байланыстырушы. Clang қабаттарды салу үшін қолданылады. Құрастырылған модульдер аралық қабаттардан басқа staticlib бумасын пайдаланады.

Параллель дамиды Тағы бір жоба кірістірілген жүйелер мен IoT құрылғылары үшін драйверлерді әзірлеуге бағытталған, ол сонымен қатар ядро ​​тақырыбы файлдарына негізделген қабаттарды жасау үшін bindgen пайдаланады. Фреймворк ядроға өзгерістер енгізбей драйвер қауіпсіздігін жақсартуға мүмкіндік береді - ядродағы драйверлер үшін қосымша оқшаулау деңгейлерін жасаудың орнына, қауіпсіз Rust тілін пайдалана отырып, компиляция сатысында мәселелерді блоктау ұсынылады. Мұндай тәсілді тиісті аудит жүргізбестен асығыс жеке драйверлерді дамытатын жабдық өндірушілері сұранысқа ие болуы мүмкін деп болжануда.

Барлық жоспарланған функционалдық әлі іске асырылған жоқ, бірақ негіз қазірдің өзінде жұмысқа әбден жарамды және Raspberry Pi 9512 тақтасында жеткізілетін LAN3 USB Ethernet контроллері үшін жұмыс драйверін жазу үшін пайдаланылды. Қолданыстағы smsc95xx драйвері C тілі. Rust-та драйверді әзірлеу кезінде модуль өлшемі мен жұмыс уақыты құрамдастарының үстеме шығындары шамалы екені атап өтіледі, бұл рамканы ресурстары шектеулі құрылғылар үшін пайдалануға мүмкіндік береді.

Ақпарат көзі: opennet.ru

пікір қалдыру