Come eseguire app Linux, Windows, macOS e Android sullo stesso sistema

Esploriamo le tecnologie per eseguire software non nativo su vari sistemi operativi, analizzando emulazione, virtualizzazione, containerizzazione e translation layer.

Con l’espressione esecuzione nativa ci si riferisce all’avvio di un programma direttamente sul sistema operativo per cui è progettato. L’applicazione in questione può usare le risorse hardware senza intermediari. Questo approccio garantisce le migliori prestazioni possibili e l’accesso completo a tutte le funzionalità del sistema operativo e dell’hardware. Per eseguire app Linux, Windows, macOS e Android tutte sullo stesso sistema, è necessario utilizzare soluzioni specifiche.

Emulazione, virtualizzazione, containerizzazione e translation layer

L’emulazione è il processo che consente a un sistema di imitare un altro sistema, consentendo l’esecuzione di software progettato per un diverso ambiente hardware o software. Un emulatore simula l’hardware e il sistema operativo originali, permettendo l’esecuzione di applicazioni non native.

Da un lato l’emulazione consente di eseguire software progettato per piattaforme differenti ma dall’altro, ed è questo il problema principale, le prestazioni sono spesso insoddisfacenti.

La virtualizzazione consente di creare più ambienti virtuali (macchine virtuali) su un singolo sistema ospitante (host). Ogni macchina virtuale (VM) esegue un vero e proprio sistema operativo, le applicazioni corrispondenti e può essere isolata rispetto al sistema host e alle altre VM.

Il rovescio della medaglia è che ogni VM richiede una quantità significativa di risorse per funzionare. D’altra parte, è necessario predisporre un’istanza vera e propria del sistema operativo che si desidera avviare.

Hyper-V è la soluzione per la virtualizzazione integrata in Windows: supporta l’installazione di qualunque versione di Windows oltre che di Linux e FreeBSD. Un esempio di soluzione per la virtualizzazione Android su Windows e macOS è BlueStacks. Non chiamate BlueStacks “emulatore” perché non lo è affatto, basandosi sull’infrastruttura per la virtualizzazione di Oracle VirtualBox.

La containerizzazione è una forma di virtualizzazione a livello del sistema operativo che consente di eseguire applicazioni isolate in “container“. I container condividono il kernel del sistema operativo host ma isolano le dipendenze necessarie per ciascuna applicazione. I vantaggi sono concreti: i container possono avviarsi rapidamente e occupano meno spazio rispetto alle VM; sono inoltre portabili, facili quindi da trasferire su qualsiasi sistema che supporti il runtime corrispondente. Docker e Podman sono due delle soluzioni più conosciute basate sul concetto di containerizzazione. I container, inoltre, condividono il kernel del sistema operativo host, riducendo l’overhead.

Il livello di compatibilità o translation layer: l’esempio di Wine

Un translation layer è invece un componente software che traduce le chiamate di sistema da un ambiente all’altro, consentendo a software progettato per un sistema operativo di funzionare su un altro. Un esempio noto è Wine, acronimo di Wine Is Not an Emulator, che permette di portare e avviare le applicazioni Windows su Linux.

I recenti aggiornamenti introdotti, hanno reso Wine molto più veloce che in passato, capace di garantire il funzionamento di un ampio ventaglio di applicazioni Windows su Linux, con prestazioni quasi native. E sì, è addirittura possibile avviare Photoshop su Linux utilizzando Wine.

La prima versione del Sottosistema Windows per Linux (WSL) di Microsoft utilizzava un layer di compatibilità, con un approccio molto simile a Wine. WSL2, tuttavia, cambia tutto e si appoggia alla virtualizzazione di Hyper-V per eseguire programmi Linux su Windows, anche con interfaccia grafica.

Il translation layer di Wine, invece, intercetta le chiamate API del programma originale e le traduce in chiamate equivalenti direttamente comprensibili dal sistema operativo host. Queste soluzioni, quindi, non simulano l’intero ambiente hardware o il sistema operativo; piuttosto, implementano solo le API necessarie.

Poiché non c’è emulazione, le applicazioni possono funzionare con prestazioni vicine a quelle native, anche se il supporto delle API può essere perfettibile, portando in alcuni casi a qualche comportamento anomalo.

L’accoppiata Wine-Bottles su Linux

Bottles è un’applicazione open source che semplifica l’uso di Wine per eseguire software Windows sui sistemi Linux. Configurare Wine manualmente può essere complesso e poco intuitivo, specialmente per gli utenti meno esperti, poiché richiede di impostare vari parametri, installare componenti aggiuntivi e gestire ogni singola applicazione.

Un software come Bottles nasce proprio per semplificare questo processo e offrire un’interfaccia facile da usare, gestendo per l’utente la configurazione e l’installazione dei componenti necessari.

Bottles organizza le configurazioni in “bottiglie”: ciascuna di esse è un ambiente isolato in cui un’applicazione Windows può essere eseguita. Ogni bottiglia funziona come un contenitore in cui sono configurati specifici parametri, versioni di Wine e librerie personalizzate (come DirectX, .NET Framework, Visual C++ Redistributable, e così via). Questa organizzazione è particolarmente utile perché ogni bottiglia può essere configurata in modo unico per rispondere alle esigenze di una specifica applicazione, evitando conflitti e azzerando lo stress.

Sotto lo slogan “esegui Windows in una bottiglia“, è possibile fare riferimento al sito ufficiale per approfondire l’uso di Bottles.

Sottosistema Windows per Android (WSA)

Oltre al Sottosistema Windows per Linux, Microsoft ha a suo tempo aggiunto in Windows 11 anche il Sottosistema Windows per Android (WSA). Si tratta di una soluzione che sfrutta sempre la virtualizzazione di Hyper-V per portare Android e le sue app sui sistemi Windows. WSA è progettato per lavorare in sinergia con WSL, sfruttando le stesse fondamenta di virtualizzazione nativa.

Nonostante l’iniziale entusiasmo, WSA non tuttavia ottenuto il successo sperato. La funzionalità ha fatto registrare un’adozione al di sotto delle aspettative, probabilmente a causa della limitata selezione di app disponibili attraverso l’Amazon Appstore, che non offre l’intero catalogo del Google Play Store.

Dal 5 marzo 2025, quindi, salvo “inversioni a U” dell’ultim’ora, Microsoft non supporterà più WSA in Windows 11 e non rilascerà più alcun aggiornamento.

Portare le applicazioni Android su Linux con Waydroid e Android Translation Layer

Il punto di riferimento per eseguire app Android su Linux è Waydroid, una soluzione che usa container LXC (Linux Containers) e sfrutta le funzionalità del kernel Linux per eseguire un’intera istanza di Android in un ambiente isolato.

Più nello specifico, Waydroid utilizza un’immagine della di LineageOS, versione derivata di Android, consentendo l’uso di molte app Android senza modifiche significative. Non è possibile però eseguire app Android sviluppate per un’architettura diversa da quella su cui si basa il sistema host. Le applicazioni ARM possono quindi funzionare soltanto su dispositivi ARM; le app x86 solamente sui device host x86.

Per installare Waydroid, basta seguire le istruzioni riferite alla distribuzione Linux in uso. A questo punto, basta avviare il servizio che gestisce i container:

sudo systemctl enable --now waydroid-container

All’orizzonte si profila l’arrivo del nuovo Android Translation Layer, un componente che utilizza la stessa soluzione adottata da Wine per portare le app Android su Linux. Tenete d’occhio questo progetto su GitLab.

Darling, translation layer per portare i programmi macOS su Linux

Il funzionamento di Wine ha offerto lo spunto per creare anche Darling, uno strumento software che si serve di layer di compatibilità per eseguire le applicazioni macOS su Linux.

Darling traduce le chiamate di sistema fatte dalle applicazioni macOS in chiamate equivalenti per il sistema operativo Linux. Questo processo consente alle applicazioni di funzionare senza modifiche significative, mantenendo prestazioni relativamente elevate.

Il software implementa un ambiente compatibile con Darwin, il sistema operativo alla base di macOS: in un altro articolo abbiamo visto le differenze tra macOS e Linux. Darling integra componenti fondamentali come Mach (il microkernel), dyld (caricatore dinamico) e launchd (gestore dei servizi), permettendo così alle applicazioni di comportarsi come se fossero in esecuzione su un vero sistema macOS.

A differenza di Wine, che ha una configurazione più user-friendly, gli utenti di Darling potrebbero dover affrontare una curva di apprendimento più ripida ed essere chiamati a dover compilare il codice da soli.

Conclusioni

L’adozione di tecnologie come l’emulazione, la virtualizzazione, la containerizzazione e i translation layer sta rivoluzionando il modo in cui utilizziamo software multipiattaforma. Questi strumenti offrono soluzioni versatili per superare le limitazioni legate alla compatibilità dei sistemi, permettendo di eseguire le applicazioni in ambienti diversi senza sacrificare troppo le prestazioni.

Ogni soluzione ha tuttavia i suoi pro e contro: se da un lato l’emulazione consente ampia compatibilità, dall’altro spesso sacrifica le performance; la virtualizzazione garantisce una replica completa di un ambiente, ma richiede risorse elevate; i container bilanciano efficienza e portabilità, pur con alcune limitazioni; infine, i translation layer permettono una gestione più diretta delle applicazioni ma possono introdurre problemi di compatibilità.

Credit immagine in apertura: iStock.com – monsitj

Ti consigliamo anche

Link copiato negli appunti