În cadrul proiectului Kerla, se dezvoltă nucleul unui sistem de operare scris în limbajul Rust. Noul nucleu este inițial orientat spre asigurarea compatibilității cu nucleul Linux la nivel ABI, ceea ce va permite rularea în medii bazate pe Kerla a fișierelor executabile nedistribuite, compilează pentru Linux. Codul este distribuit sub licențele Apache 2.0 și MIT. Proiectul este dezvoltat de programatorul japonez Seiya Nuta, cunoscut pentru crearea sistemului de operare pe bază de microkernel Resea, scris în limbajul C.
În prezent, Kerla poate funcționa doar pe sisteme cu arhitectura x86_64 și implementează apeluri de sistem de bază, cum ar fi write, stat, mmap, pipe și poll, suportând semnale, canale anonime și schimbări de context. Pentru gestionarea proceselor, se oferă apeluri precum fork, wait4 și execve. Există suport pentru tty și pseudo-terminali (pty). Din sistemele de fișiere, suportul este deocamdată oferit pentru initramfs (utilizat pentru montarea sistemului de fișiere rădăcină), tmpfs și devfs. Este furnizat un stack de rețea cu suport pentru socketi TCP și UDP, implementat pe baza bibliotecii smoltcp.
Dezvoltatorul a pregătit un mediu de boot care poate rula în QEMU sau în mașina virtuală Firecracker cu driverul virtio-net, la care se poate deja conecta prin SSH. Ca bibliotecă de sistem, se folosește musl, iar pentru utilitarele utilizator se utilizează BusyBox.

Pe baza Docker, a fost pregătit un sistem de construire, care permite formarea propriilor initramfs de boot cu nucleul Kerla. Se dezvoltă separat un shell software asemănător cu fish, numit nsh, și un stack GUI Kazari bazat pe protocolul Wayland.

Utilizarea limbajului Rust în proiect reduce numărul de erori în cod grație aplicării tehnicilor de programare sigură și creșterii eficienței identificării problemelor în gestionarea memoriei. Lucrul sigur cu memoria este asigurat în Rust în timpul compilării prin verificarea referințelor, urmărirea proprietății obiectelor și gestionarea timpului de viață al obiectelor (domeniului de vizibilitate), precum și prin evaluarea corectitudinii accesului la memorie în timpul execuției codului. În plus, Rust oferă instrumente pentru a preveni suprascrierea numerică, necesită inițializarea obligatorie a valorilor variabilelor înainte de utilizare, aplică conceptul de imutabilitate (immutable) a referințelor și variabilelor în mod implicit, oferă o tipizare statică puternică pentru minimizarea erorilor logice și simplifică procesarea valorilor de intrare prin instrumentele de potrivire a modelelor.
Pentru dezvoltarea componentelor de nivel inferior, cum ar fi nucleul sistemului de operare, Rust oferă suport pentru pointeri raw, ambalarea structurilor, inserțiile inline de asamblare, încorporarea fișierelor în limbajul de asamblare. Pentru a funcționa independent de biblioteca standard, există pachete crate separate pentru operații cu șiruri, vectori și steaguri bit. Printre avantaje se numără și instrumentele încorporate pentru evaluarea calității codului (linter, rust-analyzer) și crearea de teste unitare, care pot fi rulate nu doar pe hardware real, ci și în QEMU.
Sursa: opennet.ro
