Gli ingegneri di Red Hat hanno proposto l'inclusione nel kernel Linux del primo insieme di patch per l'implementazione del driver Nova. Questo driver è progettato per essere utilizzato con le GPU NVIDIA dotate di firmware GSP, utilizzato a partire dalla serie NVIDIA GeForce RTX 2000 basata sull'architettura Turing. In queste GPU, le operazioni di inizializzazione e gestione sono realizzate nel firmware e vengono eseguite da un microcontrollore GSP (GPU System Processor). Si prevede che, a lungo termine, Nova sostituirà il driver Nouveau per le GPU con supporto GSP.
Il nuovo driver è scritto in Rust e, poiché l'infrastruttura per lo sviluppo di driver Rust è ancora in fase di sviluppo, il codice di Nova verrà trasferito nel kernel principale in modo graduale, man mano che saranno disponibili le necessarie interfacce per il linguaggio Rust. Nella prima fase, è stato proposto di includere nel kernel il driver "nova-core", composto da 232 righe di codice. Nova-core implementa un livello base di astrazioni sopra le interfacce software del firmware GSP e fornisce un'API indipendente dalle versioni del firmware.
Nella fase successiva, si prevede di includere nel kernel il driver DRM nova-drm (Direct Rendering Manager) per l'interazione con la GPU dallo spazio utente, nonché un driver VFIO con gestore vGPU, che consente l'uso di GPU virtuali NVIDIA nei sistemi di virtualizzazione.
La principale motivazione per la promozione del nuovo driver Nova è la possibilità di eliminare le complessità associate al driver Nouveau, ottenendo una semplificazione significativa grazie all'uso di gestori pre-esistenti forniti dal firmware GSP e all'abbandono del supporto per le vecchie GPU. Nova aiuterà anche a risolvere problemi architetturali che in Nouveau richiederebbero una significativa ristrutturazione della base di codice, come i problemi di locking nel codice VMM/MMU. Il linguaggio Rust è stato scelto per ridurre la probabilità di errori nella gestione della memoria e per combinare il lavoro su un driver funzionante con la creazione di interfacce e astrazioni per lo sviluppo di driver in Rust.

Per quanto riguarda i progressi nell'aggiunta di funzionalità per lo sviluppo di driver in Rust nel kernel Linux, nella versione 6.14 sono state accolte le interfacce Rust per PCI, piattaforme, Open Firmware, dispositivi a carattere e alcune funzioni di input/output. Greg Kroah-Hartman, responsabile del supporto per la versione stabile del kernel Linux, ha descritto lo stato attuale nella pull request riguardante l'aggiornamento dei driver per il kernel 6.14 come "quasi pronto per scrivere un vero driver in Rust".
Fonte: opennet.ru
