Dimenticatevi le prestazioni mediocri di Wine: patch per il kernel Linux cambia tutto

CodeWeavers propone una patch per il kernel Linux che consentirà di migliorare le prestazioni di Wine. Diventa così possibile eseguire programmi e giochi Windows su altre piattaforme (Linux e macOS) senza più essere legati a pesanti fardelli.
Dimenticatevi le prestazioni mediocri di Wine: patch per il kernel Linux cambia tutto

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.

Ti consigliamo anche

Link copiato negli appunti