Inizia con Rust nella programmazione Windows

Microsoft potrebbe passare dall'uso di C, C ++ e C # ad altri linguaggi? Un recente post sul blog del Microsoft Security Response Center (MSRC) ha suggerito che potrebbe essere alla ricerca di alternative, con l'obiettivo di ridurre i rischi per il suo codice. Come Gavin Thomas, il principale responsabile dell'ingegneria della sicurezza presso MSRC, ha osservato che una delle cause principali dei bug nel codice Microsoft segnalati all'MSRC è il danneggiamento della memoria, bug che consentono la sovrascrittura della memoria o l'accesso a ciò che dovrebbe essere memoria protetta.

Mantenere la memoria al sicuro

La sicurezza della memoria è stata un problema significativo per molto tempo, ma il lavoro statistico svolto da MSRC mostra che il problema non sta scomparendo. Hai molti strumenti per aiutare a scrivere codice protetto, dal ciclo di vita di sviluppo sicuro di Microsoft, all'utilizzo di linguaggi più recenti per la memoria come C #. Ma questi approcci hanno i loro compromessi: il codice che producono è più lento e funziona a un livello superiore rispetto al C ++.

Questo non è un problema per il codice rivolto ai clienti. Non c'è differenza percettiva tra un'esperienza utente sviluppata in C ++ e una costruita in C #. Ma a livello di sistema, il codice utilizzato per creare sistemi operativi e driver di dispositivo, c'è una grande differenza. I cicli del processore sono importanti quando si lavora a livello di sistema e, come sottolinea Thomas nel suo post sul blog, linguaggi non protetti come C ++ e C sono davvero gli unici strumenti che storicamente funzionano a quel livello.

È chiaro che gli approcci sicuri per la memoria utilizzati dai linguaggi di livello superiore non funzionano a livello di sistema. Molti dei problemi che hanno afflitto il fallito progetto Longhorn di Microsoft sono stati causati dal tentativo di costruire un intero sistema operativo sulla piattaforma .NET. Allora come possiamo portare la sicurezza della memoria alla base dello sviluppo del sistema?

Presentazione di Rust

La risposta arriva con una nuova generazione di linguaggi di programmazione di sistema come Go e Rust, linguaggi che hanno il design sicuro per la memoria di .Net con la velocità di C e C ++. Microsoft sta già utilizzando Go ampiamente in Azure, perché è il linguaggio in cui è scritto Kubernetes. Ma questi approcci non sono ancora arrivati ​​a Windows, dove C ++ è ancora il re della programmazione dei sistemi.

Nel suo post sul blog, Thomas sostiene l'uso di Rust di Mozilla come linguaggio di sistema sicuro per Windows. È un suggerimento interessante, che ha già un grande punto di prova a suo favore: il progettista del linguaggio Mozilla lo sta già utilizzando nelle sue ultime versioni del browser Web, dove alimenta i motori di rendering di Mozilla attuali e di prossima generazione. Altri grandi utenti Rust includono il repository del modulo JavaScript NPM, Dropbox e Oracle. Anche Microsoft lo sta già utilizzando, con il codice Rust in alcuni dei suoi strumenti Azure IoT Edge.

Configurazione di un ambiente di sviluppo Windows Rust

Il punto più ovvio per iniziare con lo sviluppo di Rust è Visual Studio Code. Nel suo mercato delle estensioni puoi trovare diverse estensioni che installano Rust Language Server e che vengono fornite con il supporto completo della lingua e strumenti per creare le tue app Rust da Visual Studio Code. Sto usando l'estensione Rust ufficiale del team linguistico Rust. Altri strumenti forniscono supporto per frammenti di codice per avviare lo sviluppo, oltre a strumenti di debug e test aggiuntivi. Esistono anche strumenti per la creazione di documentazione per il codice. Vale la pena installare il pacchetto di estensione Rust come parte del tuo ambiente Visual Studio Code Ruse, poiché aggiunge strumenti aggiuntivi per lavorare con gli strumenti di sviluppo di Rust.

Devi prima installare il compilatore Rust e il gestore di pacchetti Cargo. Il sito di installazione ufficiale di Rust rileverà la versione di Windows che stai utilizzando e fornirà il download appropriato. Ci sono anche istruzioni per l'installazione di Rust su Windows Subsystem for Linux (WSL), se stai usando WSL come parte di una catena di strumenti di sviluppo Unix. L'esecuzione del programma di installazione di Rustup scarica i componenti della lingua e imposta il PERCORSO di Windows . Hai la possibilità di personalizzare l'installazione, ma in pratica è meglio accettare le impostazioni predefinite.

Comprensione della ruggine e della sicurezza della memoria

Se hai programmato C o C ++, il passaggio a Rust è relativamente facile. C'è molta somiglianza tra i linguaggi, anche se è il concetto di proprietà di Rust che lo rende sicuro per la memoria. La proprietà consente a Rust di gestire l'ambito delle variabili, consentendo loro di essere valide solo mentre si trovano nell'ambito. Se non vengono utilizzati, non sono nella memoria. Alcune variabili sono letterali, valori immutabili codificati nel codice. Ma i tipi di variabili più complessi possono richiedere memoria quando sono impostati, un processo che in molti altri linguaggi richiede di allocare esplicitamente la memoria e quindi di liberarla quando la variabile o l'oggetto non è più necessario. Rust lo automatizza, gestendo l'utilizzo della memoria come parte della sua gestione dell'ambito.

Il team di Mozilla che ha creato Rust ha riflettuto profondamente sulla sicurezza della memoria e sui compromessi che possono verificarsi in un ambiente sicuro. Il risultato è un linguaggio sicuro e veloce, con strumenti che gestiscono sia gli stack di memoria che gli heap. Assegnare un valore a una funzione ne cambia la proprietà, spostandola da un ambito a un altro; un processo simile gestisce i valori restituiti da una chiamata di funzione.

La proprietà è un concetto complesso, ma importante. Protegge la memoria e consente solo alle funzioni che possiedono un valore di modificarlo, anche quando si utilizza un riferimento a una variabile. Poiché Rust considera un riferimento come se prendesse in prestito la variabile, provare a modificarlo genererà solo un errore, a meno che non lo dichiari mutabile.

Il futuro di Rust in Windows

È importante ricordare che Rust è ancora un linguaggio giovane e gran parte di ciò che dai per scontato nello sviluppo di Windows non c'è. Non c'è integrazione diretta con Win32 o altri SDK di Windows principali e non troverai alcun supporto per gli strumenti della GUI di Windows senza installare librerie aggiuntive. Tuttavia, questo non è un grosso problema come potresti pensare: Rust, come Go, è un linguaggio di programmazione di sistema. È uno strumento di basso livello, veloce e sicuro. Ciò lo rende ideale per la creazione di codice che manipola i dati, elaborando numeri ed elaborando array. Invece di usare routine C ++ in cui lavori con grandi quantità di memoria, usa invece Rust, riducendo il rischio associato al danneggiamento della memoria.

Se vuoi sviluppare applicazioni GUI in Rust, hai la possibilità di utilizzare una delle numerose librerie UI. Forse il più facile da usare è Kiss-ui, che supporta lo sviluppo di GUI Windows e Linux, con accesso API Win32 e supporto per GTK multipiattaforma. Altre librerie aggiungono un supporto API Win32 più approfondito.

Anche se Microsoft non supporta direttamente Rust, c'è un sacco di supporto da parte della comunità. Sebbene l'assemblaggio di una catena di strumenti completa possa ancora essere una questione di scelta dei vari elementi di cui hai bisogno e di utilizzare strumenti come Rustup per installarli, l'arrivo delle estensioni di Visual Studio Code e dei pacchetti di estensione sembra destinato a semplificare il processo. Aggiornamenti regolari mostrano che si tratta di un progetto dal vivo, con il team Rust e una serie di collaboratori di terze parti al lavoro su di esso.

Il principio alla base dell'utilizzo di linguaggi sicuri per la memoria è importante ed è certamente positivo vedere la gente di MSRC affrontare il problema. Fino a quando non ci sarà una versione ufficiale di un linguaggio di programmazione per sistemi di basso livello sicuro per la memoria, vale sicuramente la pena dare a Rust una volta. Se Microsoft lo sceglie, sarai molto più avanti del gioco.

Al di fuori di Windows, Rust è un linguaggio chiave per lo sviluppo di WebAssembly e dovrebbe aiutare a fornire applicazioni web molto più potenti nella prossima versione di Edge basata su Chromium, un altro motivo per esaminarlo attentamente.