Wine arriva su OpenBSD: un passo avanti per eseguire software Windows

Wine permette di eseguire su OpenBSD applicazioni Windows a 64 bit e persino The Witcher 3, superando un importante ostacolo tecnico.
Wine arriva su OpenBSD: un passo avanti per eseguire software Windows

Eseguire programmi Windows su OpenBSD, senza ricorrere a una macchina virtuale e senza installare il sistema operativo Microsoft, sta diventando concretamente possibile. Una nuova implementazione di Wine, il software che permette di eseguire applicazioni Windows su sistemi Unix-like, ha superato alcuni ostacoli tecnici che per molto tempo ne avevano impedito il funzionamento sul sistema derivato dalla Berkeley Software Distribution. I primi risultati sono particolarmente interessanti: decine di applicazioni a 64 bit risultano funzionanti e persino videogiochi impegnativi, come The Witcher 3, riescono a essere eseguiti.

La novità arriva da Thomas Frohwein, che ha presentato sulla mailing list openbsd-ports una proposta per aggiungere Wine alla raccolta ufficiale dei port. Non si tratta ancora dell’annuncio di una versione definitiva, pronta per qualsiasi utilizzo: il codice è oggetto di revisione, alcune funzionalità rimangono incomplete e la compatibilità con le applicazioni Windows a 32 bit manca del tutto.

Wine nasce nel 1993 con l’obiettivo di eseguire software Windows su altri sistemi operativi attraverso una reimplementazione delle relative interfacce di programmazione. OpenBSD, venuto alla luce nel 1995 dalla separazione da NetBSD, ha invece sempre privilegiato la sicurezza del codice, la semplicità delle interfacce di sistema e il controllo rigoroso dei privilegi. Oggi Wine costituisce anche una delle basi tecnologiche di Proton, utilizzato per eseguire numerosi videogiochi Windows su Linux. Portare una tecnologia del genere su OpenBSD richiede di conciliare modelli di esecuzione differenti, soprattutto nella gestione della memoria e dei thread.

Wine arriva su OpenBSD: perché il porting era così difficile

Il progetto Wine non emula un intero computer e non avvia una copia di Windows. Il suo funzionamento si basa su un livello di compatibilità che riproduce le API utilizzate dalle applicazioni Microsoft, traducendo molte delle operazioni richieste in chiamate e servizi disponibili sul sistema ospitante.

Un programma Windows può quindi continuare a utilizzare funzioni appartenenti a librerie come kernel32.dll, user32.dll e ntdll.dll, mentre Wine si occupa di fornire le implementazioni necessarie. Per la grafica intervengono ulteriori componenti, capaci di collegare le API Windows ai sistemi grafici e ai driver disponibili.

La difficoltà nasce quando il programma richiede caratteristiche che il sistema operativo non espone nella forma prevista da Windows. Non tutte le differenze possono essere risolte sostituendo una funzione con un’altra: alcune riguardano direttamente il comportamento del processore e le convenzioni adottate per l’esecuzione del codice.

Il problema principale riguarda il modo in cui Windows e OpenBSD gestiscono alcune informazioni associate ai programmi in esecuzione. Su Windows a 64 bit, ogni thread (un’unità di esecuzione all’interno di un programma) utilizza un particolare registro del processore, chiamato GS, per individuare rapidamente un’area di memoria contenente informazioni necessarie al suo funzionamento.

Wine deve riprodurre lo stesso comportamento, perché molte applicazioni Windows accedono direttamente a quell’area di memoria. OpenBSD, però, non consente ai normali programmi di configurare il registro GS come farebbero su Windows. Di conseguenza, le applicazioni possono cercare informazioni all’indirizzo sbagliato, provocando errori o arresti anomali.

Per superare l’ostacolo, gli sviluppatori hanno trovato un modo per gestire via software gli accessi alla memoria che normalmente dipendono dal registro GS, senza modificare il kernel di OpenBSD.

Decine di programmi Windows a 64 bit funzionano già su OpenBSD

Nel messaggio di presentazione, Frohwein riferisce che il gruppo ha provato diverse decine di programmi Windows a 64 bit, ottenendo risultati positivi nella maggioranza dei casi. Il lavoro principale viene attribuito ad Andrii e Fabien, con il contributo di altri sviluppatori e tester della comunità OpenBSD.

Uno dei programmi suggeriti per iniziare le verifiche è Notepad++, nella versione portabile a 64 bit. Gli sviluppatori hanno pubblicato anche una prima raccolta di schermate, seguita da ulteriori dimostrazioni e da nuovi test dedicati al funzionamento di Wine su OpenBSD.

Un’altra conferma arriva da Bryan Steele, che ha risposto alla proposta originale raccontando di aver provato diverse versioni del port nell’arco di una settimana. Steele riferisce di aver eseguito il videogioco Iratus, riscontrando soltanto la necessità di selezionare la lingua inglese all’interno del gioco.

Il risultato più sorprendente riguarda probabilmente il già citato The Witcher 3: Frohwein afferma che una recente edizione rimasterizzata del gioco funziona su OpenBSD e offre prestazioni soddisfacenti, purché si aggiunga il componente vkd3d-proton.

Una registrazione pubblicata su The Gamers’ Tavern mostra il gioco in esecuzione. L’autore del video precisa che il filmato può apparire meno fluido dell’esperienza effettiva, perché la registrazione con FFmpeg avviene direttamente sul sistema utilizzato per giocare.

Dal punto di vista tecnico, il ruolo di vkd3d-proton è cruciale: il progetto, sviluppato nell’ambito delle tecnologie utilizzate da Proton, traduce le chiamate Direct3D 12 in operazioni Vulkan. Permette così a un’applicazione Windows che utilizza DirectX 12 di sfruttare un’implementazione grafica Vulkan disponibile sul sistema ospitante.

Il limite principale: le applicazioni Windows a 32 bit non funzionano

Il port presentato da Frohwein supporta attualmente programmi Windows a 64 bit. Le applicazioni a 32 bit, invece, non risultano eseguibili perché il meccanismo WoW64 non funziona nella nuova implementazione.

WoW64, acronimo di Windows-on-Windows 64-bit, identifica la tecnologia utilizzata da Windows per eseguire applicazioni a 32 bit in un ambiente a 64 bit. Wine ne riproduce le funzionalità attraverso componenti e meccanismi specifici, ma il supporto richiede un lavoro ulteriore rispetto alla semplice esecuzione dei programmi x86-64.

Va considerato che OpenBSD/amd64 non offre il tradizionale supporto all’esecuzione dei binari i386 che alcune altre piattaforme Unix-like utilizzano per la compatibilità a 32 bit. Eseguire codice Windows x86 a 32 bit richiede di affrontare differenze nell’ambiente di esecuzione e nel modello di compatibilità.

Resta un risultato tecnico davvero notevole: gli sviluppatori sono riusciti a superare un’incompatibilità a basso livello senza pretendere di modificare impostazioni delicate lato kernel OpenBSD. Se il lavoro proseguirà con la stessa efficacia, la possibilità di eseguire software Windows a 64 bit potrebbe trasformarsi da esperimento per appassionati in un’opzione concreta per chi utilizza OpenBSD anche sul desktop.

Ti consigliamo anche

Link copiato negli appunti