Predlog za razpravo o vprašanju dodajanja razvojnih orodij Rust v jedro Linuxa

Nick Desagnier (Nick Desaulniers), ki dela pri Googlu in zagotavlja podpora gradnjo jedra Linuxa z uporabo prevajalnika Clang in tudi pomagati popravi napake v prevajalniku Rust, predlagal imeti na konferenci Konferenca vodovodarjev Linux 2020 sejo za razpravo o tem, da bi bilo mogoče razvijati komponente jedra v Rustu. Nick organizira mikrokonferenco, posvečeno LLVM, in meni, da bi bilo lepo razpravljati o tehničnih vidikih možne integracije podpore za Rust v jedro (pripravil je že delujoč prototip za KBuild) in razumeti, ali bi bila taka podpora potrebna sploh dodati in katere omejitve pri uporabi Rusta je treba sprejeti.

Spomnimo se, da je Linus Torvalds v nedavni razpravi na konferenci Open Source Summit and Embedded Linux ni izključil pojav povezav za razvoj nejedrnih podsistemov jedra (na primer gonilnikov) v jezikih, kot je Rust. Zmožnost razvoja gonilnikov v Rustu bi nam omogočila ustvarjanje varnejših in boljših gonilnikov z minimalnim naporom, brez težav, kot je dostop do pomnilnika po sprostitvi, dereferenciranje ničelnega kazalca in prekoračitev medpomnilnika. Obstaja že več projektov tretjih oseb za izvajanje te funkcije:

  • Razvijalci iz podjetja "Fish in a Barrel" pripravljeni komplet orodij za pisanje modulov, ki jih je mogoče naložiti za jedro Linuxa v jeziku Rust, z uporabo nabora abstraktnih plasti prek vmesnikov in struktur jedra za povečanje varnosti. Sloji se samodejno generirajo na podlagi obstoječih datotek glave jedra s pomočjo pripomočka bindgen. Clang se uporablja za gradnjo plasti. Poleg vmesnih slojev sestavljeni moduli uporabljajo paket staticlib.
  • Raziskovalci s kitajske univerze v Hong Kongu razvijati projekt za razvoj gonilnikov za vgrajene sisteme in naprave interneta stvari v Rustu, ki prav tako uporablja bindgen za ustvarjanje plasti na podlagi datotek glave jedra. Ogrodje vam omogoča izboljšanje varnosti gonilnikov brez spreminjanja jedra - namesto ustvarjanja dodatnih ravni izolacije za gonilnike v jedru je predlagano, da se težave blokirajo v fazi prevajanja z uporabo varnejšega jezika Rust. Predpostavlja se, da bi lahko proizvajalci opreme, ki razvijajo lastniške gonilnike, potrebovali takšen pristop v naglici, ne da bi opravili ustrezno revizijo.
  • Razvijalci ogrodja C2Rust za oddajanje kode C v Rust, ravnanje poskusi pretvorbe modulov jedra z minimalnimi ročnimi popravki. Ena od opaženih težav je uporaba v številnih delih jedra kode, ki uporablja razširitve GCC, ki še niso podprte v C2Rust. Da bi rešil to težavo, namerava C2Rust dodati podporo za atribute GCC inline, cold, alias, used in section ter razširiti zmožnosti inline sestavljalnika in rešiti težave s strukturami, ki so tako poravnane kot zapakirane (na primer xregs_state). . Pomembne težave, ki zahtevajo ročno delo, vključujejo nezmožnost prevajanja netrivialnih makrov C v makre Rust in potrebo po redefiniranju vrst, saj C2Rust prevede vrste C v definicije v paketu libc, vendar tega paketa ni mogoče uporabiti v modulih jedra.

Vir: opennet.ru

Dodaj komentar