Propunere pentru discutarea problemei adăugării instrumentelor de dezvoltare Rust la kernel-ul Linux

Nick Desagnier (Nick Desaulniers), care lucrează la Google pentru a oferi a sustine construirea nucleului Linux folosind compilatorul Clang și, de asemenea ajutand remediați erori în compilatorul Rust, El a oferit ține la o conferință Conferința instalatorilor Linux 2020 sesiune pentru a discuta despre faptul că este posibilă dezvoltarea componentelor nucleului în Rust. Nick organizează o micro-conferință dedicată LLVM și consideră că ar fi bine să discutăm despre aspectele tehnice ale posibilei integrări a suportului Rust în kernel (a pregătit deja un prototip de lucru pentru KBuild) și să înțeleagă dacă un astfel de suport ar trebui să fie adăugate deloc și ce restricții privind utilizarea Rust ar trebui să fie acceptate.

Să ne amintim că, într-o discuție recentă la conferința Open Source Summit și Embedded Linux, Linus Torvalds nu a exclus apariția legăturilor pentru dezvoltarea subsistemelor de nucleu non-core (de exemplu, drivere) în limbi precum Rust. Capacitatea de a dezvolta drivere în Rust ne-ar permite să creăm drivere mai sigure și mai bune cu un efort minim, fără probleme precum accesul la memorie după eliberare, dereferențele pointerului nul și depășirile de buffer. Există deja câteva proiecte terță parte pentru implementarea acestei funcții:

  • Dezvoltatori de la compania „Fish in a Barrel” pregătit un set de instrumente pentru scrierea modulelor încărcate pentru nucleul Linux în limbajul Rust, folosind un set de straturi abstracte peste interfețe și structuri de kernel pentru a crește securitatea. Straturile sunt generate automat pe baza fișierelor de antet existente ale nucleului folosind utilitarul bindgen. Clang este folosit pentru a construi straturi. Pe lângă straturile intermediare, modulele asamblate folosesc pachetul staticlib.
  • Cercetători de la Universitatea Chineză din Hong Kong dezvolta un proiect pentru dezvoltarea de drivere pentru sistemele încorporate și dispozitivele Internet of Things în Rust, care utilizează, de asemenea, Bindgen pentru a genera straturi bazate pe fișierele de antet ale nucleului. Cadrul vă permite să îmbunătățiți securitatea driverului fără a face modificări la kernel - în loc să creați niveluri de izolare suplimentare pentru driverele din nucleu, se propune să blocați problemele în etapa de compilare, folosind limbajul Rust mai sigur. Se presupune că o astfel de abordare poate fi solicitată de către producătorii de echipamente care dezvoltă drivere proprietare în grabă, fără a efectua un audit adecvat.
  • Dezvoltatori de cadru C2Rugina pentru difuzarea codului C către Rust, conduită experimente de conversie a modulelor kernel cu modificări manuale minime. Una dintre problemele observate este utilizarea în multe părți ale nucleului de cod care utilizează extensii GCC care nu sunt încă acceptate în C2Rust. Pentru a rezolva această problemă, C2Rust intenționează să adauge suport pentru atributele GCC inline, cold, alias, used and section, precum și să extindă capacitățile asamblatorului inline și să rezolve problemele cu structurile care sunt atât aliniate, cât și împachetate (de exemplu, xregs_state) . Problemele semnificative care necesită lucru manual includ incapacitatea de a traduce macrocomenzi C non-triviale în macrocomenzi Rust și necesitatea de a redefini tipurile, deoarece C2Rust traduce tipurile C în definiții în pachetul libc, dar acest pachet nu poate fi utilizat în modulele kernelului.

Sursa: opennet.ru

Adauga un comentariu