Tra le applicazioni che, storicamente, hanno permesso di superare i confini della piattaforma Windows portando le applicazioni compatibili con il sistema operativo Microsoft anche su altre piattaforme, c’è sicuramente Wine. Wine (Wine Is Not an Emulator) aiuta ad eseguire software progettato per Windows su sistemi operativi basati su Unix, come Linux e macOS.
Non è un emulatore tradizionale quanto piuttosto un layer di compatibilità: traduce cioè le chiamate di sistema Windows in chiamate comprensibili dal sistema operativo host (Linux o macOS). Lo strato aggiuntivo posto da Wine permette alle applicazioni Windows di interagire con il sistema operativo sottostante, come se fossero eseguite in un ambiente nativo.
Progetti come winlator e mobox permettono di eseguire programmi Windows su Android proprio facendo leva su Wine. Non va dimenticato, infatti, che “ai piedi” del sistema operativo Android c’è sempre il kernel Linux.
Perché le prestazioni con Wine sono inferiori rispetto all’esecuzione del programma nel suo ambiente nativo
Le prestazioni inferiori di Wine rispetto all’esecuzione di un programma nel suo ambiente nativo possono essere attribuite a diversi fattori. Innanzi tutto, come abbiamo evidenziato in precedenza, Wine deve tradurre le chiamate di sistema Windows in chiamate comprensibili e gestibili dal sistema operativo ospitante. Il processo comporta un certo overhead che influisce sulle performance complessive.
Windows e i sistemi operativi GNU/Linux hanno architetture differenti. Le difformità nei modelli di gestione della memoria, nei sottosistemi grafici e in altri aspetti possono richiedere complessità aggiuntive da parte di Wine per garantire la compatibilità, con un impatto negativo sulle prestazioni.
Le applicazioni Windows sono inoltre spesso ottimizzate per l’utilizzo nel sistema operativo Microsoft. Wine cerca di riprodurre queste ottimizzazioni, ma non sempre è possibile assicurare lo stesso livello prestazionale su una piattaforma completamente diversa.
La patch per il kernel Linux che fa salire alle stelle le prestazioni di Wine
Se ne parlava da almeno un anno ma adesso la patch per il kernel Linux, accreditata di migliorare significativamente le prestazioni di Wine, potrebbe finalmente diventare parte integrante del “nocciolo” utilizzato nelle principali distribuzioni.
Lo fa presente Elizabeth “Zeb” Figura (CodeWeavers) che ha presentato un driver funzionante a basso livello (/dev/ntsync
) capace di implementare le primitive per la sincronizzazione sfruttate nella famiglia di sistemi operativi Windows NT.
CodeWeavers è un’azienda specializzata nello sviluppo di soluzioni software volte a migliorare la compatibilità e l’esecuzione di applicazioni Windows sui sistemi operativi Unix-like. L’azienda ha realizzato una versione commerciale di Wine, chiamata CrossOver: include strumenti aggiuntivi e supporto tecnico. Attraverso il lavoro dei suoi sviluppatori, tuttavia, è impegnata anche nella crescita del progetto Wine, con l’invio dei suoi contributi tecnici.
Sviluppatrice e profonda conoscitrice delle soluzioni GNU/Linux, Figura spiega che Wine gestisce le API di Windows nel cosiddetto user space. Una parte cruciale di queste API, le primitive di sincronizzazione NT, risulta implementata tramite RPC (Remote Procedure Call) e legata a un processo dedicato nel kernel. Le primitive di sincronizzazione sono strumenti che consentono la sincronizzazione e il coordinamento tra processi e thread.
L’overhead di RPC, tuttavia, è diventato un vero e proprio collo di bottiglia, specie con le applicazioni che si appoggiano alle API Windows in maniera più sostanziale. La soluzione proposta è quindi quella di innestare le primitive di sincronizzazione NT proprio a livello del kernel Linux, con un guadagno prestazionale che si preannuncia a dir poco meraviglioso.
Quanto crescono le prestazioni di Wine con la patch
Guardate la tabella condivisa dalla stessa Figura. L’analisi è focalizzata sull’esecuzione di videogiochi Windows su Linux ma il balzo prestazionale riguarda qualunque genere di applicazione.
Game | Upstream | ntsync | Improvement |
---|---|---|---|
Anger Foot | 69 | 99 | 43% |
Call of Juarez | 99.8 | 224.1 | 125% |
Dirt 3 | 110.6 | 860.7 | 678% |
Forza Horizon 5 | 108 | 160 | 48% |
Lara Croft: Temple of Osiris | 141 | 326 | 131% |
Metro 2033 | 164.4 | 199.2 | 21% |
Resident Evil 2 | 26 | 77 | 196% |
The Crew | 26 | 51 | 96% |
Tiny Tina’s Wonderlands | 130 | 360 | 177% |
Total War Saga: Troy | 109 | 146 | 34% |
La seconda e terza colonna mettono a confronto le prestazioni rilevate oggi con Wine e quelle emerse dopo l’abilitazione del nuovo driver nel kernel Linux. L’ultima colonna (improvement) fotografa il guadagno prestazionale, che mediamente supera il 150% e in un caso arriva addirittura al 678%.
A questo punto spetterà a Linus Torvalds dare il “via libera” per l’aggiunta della preziosa modifica a livello kernel. Va detto, comunque, che la proposta è indicata al momento come RFC (Request for Comments). Prima dell’effettiva integrazione, quindi, è in attesa dei commenti e dei feedback della comunità. Potrebbero essere necessarie alcune revisioni prima di giungere a qualcosa che possa essere ufficialmente adottato nel kernel Linux.
Per approfondire, potete visionare l’intervento di Zeb Figura durante la Linux Plumbers Conference.
Credit immagine in apertura: Microsoft Bing Image Creator.