WebVM: Linux in esecuzione nel browser

WebVM è un'iniziativa open source che porta Debian e Alpine Linux su browser Web, sfruttando un motore di virtualizzazione basato su WebAssembly. Questo consente di eseguire binari x86 senza modifiche, compilare codice e interagire con il sistema operativo in un ambiente sandboxato.

Sta destando grande interesse il progetto open source WebVM. Pubblicato su GitHub, si tratta di una soluzione innovativa che porta le distribuzioni Linux Debian e Alpine su un normale browser Web. L’aspetto maggiormente degno di nota deriva dal fatto che il sistema operativo GNU/Linux è caricato utilizzando un motore di virtualizzazione che poggia il suo funzionamento su WebAssembly (WASM).

Tale motore si chiama CheerpX e permette di eseguire macchine virtuali all’interno delle normali applicazioni Web, sviluppate in HTML 5 e JavaScript. CheerpX supporta il caricamento di file binari x86 interamente all’interno del browser, senza necessità di componenti server-side.

Sebbene WebAssembly consenta già di compilare codice esistente per l’esecuzione nel browser, la compatibilità è limitata ai linguaggi supportati come C, C++, Rust e Go. CheerpX supera questa limitazione permettendo l’esecuzione di binari x86 senza modifiche e si integra perfettamente con HTML5.

Come funziona WebVM

WebVM, alimentato dal motore di virtualizzazione CheerpX, consente l’esecuzione sicura in un ambiente “sandboxato” di binari x86 su qualsiasi browser.

Il compilatore JIT x86-to-WebAssembly ottimizza l’esecuzione dei binari x86 nel browser, il file system virtuale consente una gestione efficiente dei file, l’emulatore di syscall Linux facilita l’interazione con le chiamate di sistema Linux.

Per impostazione predefinita, le macchine virtuali Linux in esecuzione su WebVM non possono inviare e ricevere dati in rete. Questo perché i browser Web non espongono ancora API “ad hoc” per avviare i trasferimenti di dati.

Per sopperire a questa mancanza, è possibile cliccare sulla voce Networking nella colonna di sinistra di WebVM quindi scegliere Connect to Tailscale. Come abbiamo visto nell’articolo su come creare una VPN distribuita con Tailscale, Tailscale semplifica la connessione sicura tra dispositivi, senza bisogno di configurazioni complesse o porte aperte. Permette inoltre di uscire sulla rete Internet e scambiare dati con i server remoti.

Debian e Alpine Linux in esecuzione su WebVM

Provare WebVM è molto semplice: basta accedere alla home page del progetto e iniziare a impartire comandi. La macchina virtuale standard è un’installazione della distro Debian che appare ampiamente “castrata” in termini di funzionalità. Nella prima schermata, WebVM suggerisce comunque di testare alcuni comandi:

python3 examples/python3/fibonacci.py
gcc -o helloworld examples/c/helloworld.c && ./helloworld
objdump -d ./helloworld | less -M
vim examples/c/helloworld.c
curl --max-time 15 parrot.live # requires networking

Dall’alto verso il basso, il primo esegue uno script Python che calcola e stampa una sequenza di Fibonacci. Il secondo compila un file sorgente C quindi lo esegue in un unico passaggio.

WebVM: macchina virtuale Debian Linux nel browser

Il terzo comando serve per disassemblare l’eseguibile helloworld precedentemente creato, mostrando il codice assembly corrispondente. Il quarto apre il file sorgente di helloworld.c nel terminale utilizzando l’editor di testo vim; il quinto stabilisce una connessione HTTP con il sito indicato (usando l’utilità curl). Parrot.live è un’applicazione Web che mostra un’animazione ASCII di un pappagallo nel terminale. Per impartire quest’ultimo comando, è necessario aver stabilito una connessione Internet usando Tailscale, come spiegato in precedenza.

Cliccando qui è invece possibile avviare un’installazione di Alpine Linux, sempre sotto forma di macchina virtuale. A differenza della macchina virtuale Debian, in questo caso WebVM mostra un’interfaccia grafica.

WebVM Alpine Linux

WebVM: un semplice esercizio di stile?

Sebbene il lavoro svolto dagli sviluppatori di CheerpX sia indiscutibilmente eccellente, le prestazioni garantite da soluzioni come WebVM lasciano un po’ a desiderare. Soprattutto quando si usa l’interfaccia grafica, ma anche con alcuni comandi, la latenza risulta piuttosto elevata.

Chi vuole eseguire Linux indipendentemente dal sistema operativo host può usare soluzioni per la virtualizzazione classiche come QEMU, UTM su macOS, Virtualbox, Hyper-V su Windows, VMware e via dicendo. La containerizzazione di Docker offre inoltre la possibilità di eseguire sistemi operativi e applicazioni in ambienti preconfigurati, indipendentemente dalla piattaforma.

Ancora, è possibile portare Linux su Windows con WSL, il Sottosistema Windows per Linux che consente anche di avviare applicazioni dotate di GUI (interfaccia grafica) e integrarle nella barra delle applicazioni, nel menu Start e in qualunque altra area del sistema operativo.

WebVM ci restituisce comunque alcuni aspetti importanti. In primis, ci fa riflettere su come il browser sia diventato uno strumento sempre più versatile e flessibile, capace oggi di eseguire interi sistemi operativi!

Un progetto come WebVM, inoltre, permette di eseguire comandi Linux, compilare codice C/C++, Python, usare altri linguaggi senza un’installazione nativa. Poiché gira in WebAssembly, il codice è isolato dall’host, riducendo i rischi di esecuzione di codice malevolo.

Le potenzialità derivanti dal supporto diretto per le macchine virtuali a livello di browser Web sono virtualmente infinite e siamo certi che WebVM possa crescere velocemente, trasformandosi in una soluzione utile per supportare il lavoro di sviluppatori, tecnici, ricercatori e utenti comuni.

Conclusioni

WebVM rappresenta un’interessante dimostrazione di come il browser stia evolvendo spingendosi ben oltre la semplice navigazione, diventando una piattaforma capace di eseguire sistemi operativi e applicazioni complesse.

Sebbene le prestazioni non siano ancora paragonabili a quelle delle soluzioni di virtualizzazione tradizionali, il progetto mostra il potenziale di WebAssembly nel portare ambienti di sviluppo e sperimentazione direttamente nel browser, senza necessità di installazioni locali.

Con il continuo miglioramento delle tecnologie Web e il possibile supporto futuro a funzionalità avanzate, WebVM potrebbe trasformarsi in uno strumento utile non solo per test e dimostrazioni, ma anche per scenari di sviluppo e formazione in ambienti sicuri e isolati.

Ti consigliamo anche

Link copiato negli appunti