Nick Desaulniers (), este responsabil cu asigurarea compilării nucleului Linux folosind compilatorul Clang și, de asemenea, la corectarea erorilor din compilatorul Rust, a susținut la conferința o sesiune pentru a discuta despre posibilitatea dezvoltării componentelor nucleului în limbajul Rust. Nick organizează o micro-conferință dedicată LLVM și consideră că ar fi util să discutăm despre aspectele tehnice ale posibilei integrări a suportului Rust în nucleu (pentru care a fost deja pregătit un prototip de lucru pentru KBuild) și să înțelegem dacă este necesar să adăugăm un astfel de suport și ce restricții ar trebui să acceptăm în utilizarea Rust.
Amintim că, în recentul discuție de la conferința „Open Source Summit and Embedded Linux”, Linus Torvalds posibilitatea apariției de legături pentru dezvoltarea subsistemelor non-fundamentale ale nucleului (de exemplu, drivere) în astfel de limbaje ca Rust. Posibilitatea dezvoltării drivere în limbajul Rust ar permite crearea, cu eforturi minime, de drivere sigure și de calitate superioară, lipsită de probleme precum accesul la zone de memorie după ce au fost eliberate, dereferentierea pointerilor nuli și depășirea limitei bufferului. Există deja câteva proiecte externe care implementează această posibilitate:
- Dezvoltatorii de la „Fish in a Barrel” Instrumente pentru scrierea modulelor încărcabile pentru kernelul Linux în limbajul Rust, folosind un set de straturi abstracte peste interfețele și structurile kernelului pentru a spori securitatea. Straturile sunt generate automat pe baza fișierelor de antet existente ale kernelului cu ajutorul utilitarului . Pentru compilarea stratelor se folosește Clang. Modulele compilate, pe lângă straturi, utilizează pachetul staticlib.
- Cercetătorii de la Universitatea Chineză din Hong Kong un proiect pentru dezvoltarea de drivere pe Rust pentru sisteme încorporate și dispozitive IoT, care utilizează de asemenea bindgen pentru a genera straturi bazate pe fișierele de antet ale nucleului. Framework-ul permite creșterea siguranței driverelor fără a aduce modificări în nucleu — în loc să se creeze niveluri suplimentare de izolare în nucleu pentru drivere, se propune blocarea problemelor în etapa de compilare, aplicând un limbaj mai sigur, Rust. Se presupune că un astfel de approach ar putea fi solicitat de către producătorii de hardware, care dezvoltă drivere proprietare rapid, fără a efectua un audit adecvat.
- Dezvoltatorii framework-ului pentru a transpune codul C în Rust, Experimente privind transformarea modulelor nucleului cu ajustări minime manuale. Problemele notate includ utilizarea, în multe părți ale nucleului, a codului care utilizează extensii GCC, care nu sunt încă suportate în C2Rust. Pentru a rezolva această problemă, se preconizează adăugarea suportului pentru atributele GCC inline, cold, alias, used și section în C2Rust, precum și extinderea capacităților asamblorului inline și rezolvarea problemelor cu structurile care sunt aliniate și împachetate simultan (de exemplu, xregs_state). Problemele semnificative care necesită intervenție manuală includ imposibilitatea de a transpune macrocomenzi C netriviale în macrocomenzi Rust și necesitatea de a redefini tipurile, deoarece C2Rust transpune tipurile C în definiții din pachetul libc, dar acest pachet nu poate fi utilizat în modulele nucleului.
Sursa: opennet.ro
