Другая рэдакцыя патчаў для ядра Linux з падтрымкай мовы Rust

Мігель Охеда (Miguel Ojeda), аўтар праекта Rust-for-Linux, прапанаваў для разгляду распрацоўшчыкамі ядра Linux абноўлены варыянт кампанентаў для распрацоўкі драйвераў прылад на мове Rust. Падтрымка Rust разглядаецца як эксперыментальная, але ўжо ўзгоднена для ўключэння ў галінку linux-next. У новым варыянце ўхіленыя заўвагі, выказаныя падчас абмеркаванняў першай версіі патчаў. Лінус Торвальдс ужо падключыўся да абмеркавання і прапанаваў змяніць логіку апрацоўкі некаторых бітавых аперацый.

Нагадаем, што прапанаваныя змены даюць магчымасць выкарыстоўваць Rust у якасці другой мовы для распрацоўкі драйвераў і модуляў ядра. Падтрымка Rust падаецца як опцыя, не актыўная па змаўчанні і не якая прыводзіць да ўключэння Rust у лік абавязковых зборачных залежнасцяў да ядра. Выкарыстанне Rust для распрацоўкі драйвераў дазволіць з мінімальнымі намаганнямі ствараць бяспечныя і больш якасныя драйверы, пазбаўленыя ад такіх праблем як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў і выхад за межы буфера.

Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі і ўлік часу жыцця аб'ектаў (вобласці бачнасці), а таксама праз адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.

Найбольш прыкметныя змены ў новай версіі патчаў:

  • Код для размеркавання памяці пазбаўлены ад магчымых генерацый стану "panic" пры ўзнікненні памылак, такіх як недахоп памяці. У склад уключаны варыянт Rust-бібліятэкі alloc, у якой перароблены код для апрацоўкі збояў, але канчатковай мэтай з'яўляецца перанос у асноўную рэдакцыю alloc усіх магчымасцяў, неабходных для ядра (змены ўжо падрыхтаваны і перададзены ў склад стандартнай бібліятэкі Rust).
  • Замест начных зборак для кампіляцыі ядра з падтрымкай Rust зараз можна выкарыстоўваць бэта выпускі і стабільныя рэлізы кампілятара rustc. У сапраўдны момант у якасці эталоннага кампілятара выкарыстоўваецца rustc 1.54-beta1, але пасля вынахаду рэлізу 1.54 у канцы месяца, у якасці эталоннага будзе падтрымлівацца менавіта ён.
  • Дададзена падтрымка напісання тэстаў з выкарыстаннем штатнага для Rust атрыбута "#[test]" і магчымасць прымянення doctests для дакументавання тэстаў.
  • Дададзена падтрымка архітэктур ARM32 і RISCV у дадатак да раней падтрымоўваных x86_64 і ARM64.
  • Палепшаны рэалізацыі GCC Rust (GCC-франтэнда для Rust) і rustc_codegen_gcc (бэкенд rustc для GCC), які зараз праходзіць усе базавыя тэсты.
  • Прыкладзены новы ўзровень абстракцыі для выкарыстання ў праграмах на мове Rust механізмаў ядра, напісаных на мове Сі, такіх як чырвона-чорнае дрэва, аб'екты з падлікам спасылак, стварэнне файлавых дэскрыптараў, задачы, файлы і вектары ўводу/высновы.
  • У кампанентах для распрацоўкі драйвераў палепшана падтрымка модуля "file_operations", макраса "module!", рэгістрацыі макрасаў і рудыментарных драйвераў (probe і remove).
  • У Binder рэалізавана падтрымка перадачы файлавых дэскрыптараў і LSM-хукаў.
  • Прапанаваны больш функцыянальны прыклад драйвера на Rust – bcm2835-rng для апаратнага генератара выпадковых лікаў поплаткаў Raspberry Pi.

Дадаткова згадваюцца праекты некаторых кампаній, злучаныя з выкарыстаннем Rust у ядры:

  • Кампанія Microsoft выказала цікавасць да ўдзелу ў працы па інтэграцыі падтрымкі Rust у ядро ​​Linux і гатова ў бліжэйшыя месяцы даць рэалізацыі драйвераў для Hyper-V на Rust.
  • Кампанія ARM працуе над паляпшэннем падтрымай Rust для сістэм на базе працэсараў ARM. Праекту Rust ужо прапанаваны змены, якія перакладаюць 64-разрадныя сістэмы ARM у лік платформаў першага ўзроўня падтрымкі (Tier-1).
  • Кампанія Google наўпрост забяспечвае падтрымку праекту Rust for Linux, развівае новую рэалізацыю механізму міжпрацэснага ўзаемадзеяння Binder на Rust і разглядае магчымасць перапрацоўкі на Rust розных драйвераў. Праз ISRG (Internet Security Research Group) кампанія Google забяспечыла фінансаванне працы па інтэграцыі ў ядро ​​Linux падтрымкі Rust.
  • Кампанія IBM рэалізавана падтрымку Rust у ядры для сістэм PowerPC.
  • Лабараторыя LSE (Systems Research Laboratory) распрацавала SPI-драйвер на Rust.

Крыніца: opennet.ru

Дадаць каментар