Prijedlog za raspravu o dodavanju Rust razvojnih alata u Linux kernel

Nick Desagnier (Nick Desaulniers), koji radi u Googleu na pružanju usluga podrška izgradnju Linux kernela pomoću Clang prevoditelja i također pomažući popravi greške u Rust kompajleru, ponudio održati na konferenciji Linux vodoinstalaterska konferencija 2020 sesije za raspravu o omogućavanju razvoja komponenti jezgre u Rustu. Nick organizira mikrokonferenciju posvećenu LLVM-u i smatra da bi bilo lijepo razgovarati o tehničkim aspektima moguće integracije podrške za Rust u kernel (on je već pripremio radni prototip za KBuild) i razumjeti treba li takva podrška uopće dodati i koja ograničenja upotrebe Rusta treba prihvatiti.

Podsjetimo se da je u nedavnoj raspravi na konferenciji Open Source Summit and Embedded Linux Linus Torvalds nije isključio pojava vezanja za razvoj non-core podsustava jezgre (na primjer, upravljačkih programa) u jezicima kao što je Rust. Sposobnost razvoja upravljačkih programa u Rustu bi nam omogućila stvaranje sigurnijih i boljih upravljačkih programa uz minimalan napor, bez problema kao što je pristup memoriji nakon oslobađanja, dereferenciranja nultog pokazivača i prekoračenja međuspremnika. Već postoji nekoliko projekata trećih strana za implementaciju ove značajke:

  • Programeri iz tvrtke "Riba u bačvi" pripremljeni skup alata za pisanje modula koji se mogu učitavati za jezgru Linuxa u jeziku Rust, korištenjem skupa apstraktnih slojeva preko sučelja i struktura jezgre za povećanje sigurnosti. Slojevi se automatski generiraju na temelju postojećih datoteka zaglavlja kernela pomoću uslužnog programa bindgen. Clang se koristi za izgradnju slojeva. Osim međuslojeva, sklopljeni moduli koriste staticlib paket.
  • Istraživači s Kineskog sveučilišta u Hong Kongu razviti projekt za razvoj upravljačkih programa za ugrađene sustave i uređaje Internet of Things u Rustu, koji također koristi bindgen za generiranje slojeva na temelju datoteka zaglavlja kernela. Okvir vam omogućuje da poboljšate sigurnost upravljačkih programa bez promjena u kernelu - umjesto stvaranja dodatnih razina izolacije za upravljačke programe u jezgri, predlaže se blokiranje problema u fazi kompilacije, korištenjem sigurnijeg jezika Rust. Pretpostavlja se da bi takav pristup mogao biti tražen od strane proizvođača opreme koji žurno razvijaju vlasničke upravljačke programe bez provođenja odgovarajuće revizije.
  • Programeri okvira C2Rust za emitiranje C koda u Rust, provedena eksperimenti na pretvaranju modula jezgre uz minimalna ručna uređivanja. Jedan od uočenih problema je korištenje u mnogim dijelovima kernela koda koji koristi GCC ekstenzije koje još nisu podržane u C2Rust. Kako bi riješio ovaj problem, C2Rust planira dodati podršku za GCC atribute inline, cold, alias, used i section, kao i proširiti mogućnosti inline asemblera i riješiti probleme sa strukturama koje su i poravnate i pakirane (na primjer, xregs_state) . Značajni problemi koji zahtijevaju ručni rad uključuju nemogućnost prevođenja netrivijalnih C makronaredbi u Rust makronaredbe i potrebu za redefiniranjem tipova, budući da C2Rust prevodi C tipove u definicije u paketu libc, ali ovaj paket se ne može koristiti u modulima kernela.

Izvor: opennet.ru

Dodajte komentar