JSLinux ora supporta x86-64: Linux nel browser fa un salto inatteso

JSLinux è un emulatore sviluppato da Fabrice Bellard che esegue Linux e altri sistemi operativi direttamente nel browser, creando CPU x86, dispositivi hardware e rete tramite JavaScript e WebAssembly.

Un sistema completo capace di avviare Linux direttamente dentro una pagina Web può sembrare un esercizio accademico. In realtà rappresenta una dimostrazione concreta della maturità dei motori JavaScript moderni e delle tecnologie di compilazione WebAssembly. Tra i progetti più noti in questo ambito figura JSLinux, sviluppato da Fabrice Bellard, già autore di software fondamentali come QEMU e FFmpeg. Il progetto mostra come un browser moderno possa eseguire un intero sistema operativo emulando CPU, periferiche e bus hardware.

L’introduzione del supporto x86-64

Dopo anni di “silenzio”, gli aggiornamenti pubblicati tra gennaio e marzo 2026 hanno introdotto uno dei cambiamenti tecnici più significativi nella storia del progetto.

JSLinux ora supporta pienamente l’architettura x86-64, permettendo l’esecuzione di sistemi operativi e software moderni. L’emulatore implementa quindi il modello di memoria a 64 bit con paginazione estesa, registri generali a 64 bit e tutte le principali caratteristiche dell’architettura x86-64 necessarie per avviare kernel Linux contemporanei e altri sistemi operativi progettati per le piattaforme moderne.

L’aggiunta delle estensioni AVX/APX

A marzo 2026, Bellard ha ampliato ulteriormente le capacità della CPU emulata introducendo il supporto per le estensioni vettoriali AVX2 e diversi set della famiglia AVX-512.

Queste istruzioni permettono di eseguire operazioni SIMD (Single Instruction, Multiple Data), una tecnica che consente di applicare la stessa istruzione contemporaneamente a più dati, utilizzando registri di dimensioni molto più grandi rispetto a quelli delle precedenti estensioni SSE (Streaming SIMD Extensions). In questo modo il processore può trattare numerosi elementi in parallelo, aumentando l’efficienza nell’elaborazione di grandi quantità di dati. In ambito reale questo approccio è sfruttato per compressione dati, elaborazione multimediale, crittografia e calcolo scientifico. La loro presenza nell’emulatore permette quindi di eseguire software compilato con toolchain moderne che fanno uso di queste estensioni.

L’aspetto più innovativo riguarda però l’integrazione di APX (Advanced Performance Extensions), una recente evoluzione dell’architettura x86 progettata per aumentare il numero di registri generali disponibili e ridurre la pressione sullo stack durante l’esecuzione del codice. APX introduce nuove istruzioni e un set di registri esteso che può migliorare l’efficienza dei compilatori moderni e delle applicazioni ad alte prestazioni.

Secondo la documentazione del progetto, JSLinux rappresenta attualmente l’unico emulatore x86 completo accessibile pubblicamente che implementa il supporto APX a livello di sistema.

Il risultato è particolarmente notevole considerando che l’intera emulazione continua a funzionare all’interno di una pagina Web tramite JavaScript e WebAssembly, senza accesso diretto all’hardware della macchina host.

Alpine Linux emulazione con JSLinux

Origini del progetto e evoluzione dell’architettura

Il primo prototipo di JSLinux apparve nel 2011 e segnò una svolta significativa: per la prima volta un emulatore PC compatibile x86 riusciva a eseguire Linux interamente in JavaScript.

All’epoca i motori JavaScript stavano attraversando una fase di rapida evoluzione grazie all’introduzione di tecniche di compilazione JIT e di ottimizzazioni aggressive. Bellard sfruttò quel momento tecnologico per dimostrare che l’architettura di un PC poteva essere ricalcata con prestazioni sufficienti anche in un ambiente nato per le applicazioni Web.

La piattaforma è stata poi aggiornata più volte fino all’attuale implementazione basata su TinyEMU, con miglioramenti significativi sia nelle prestazioni sia nella compatibilità hardware emulata.

La prima versione dell’emulatore riutilizzava alcune componenti sviluppate in precedenza per QEMU, in particolare gli helper dedicati all’emulazione delle istruzioni x86 e parte della logica dei dispositivi. Il codice fu adattato per funzionare interamente in JavaScript, trasformando il browser in un ambiente di virtualizzazione minimale ma completo.

Un passaggio importante avvenne nel 2015 con l’adozione di asm.js, un sottoinsieme del linguaggio JavaScript progettato per permettere compilazioni altamente ottimizzate. I browser compatibili riuscivano a interpretare il codice asm.js quasi come se fosse codice nativo, riducendo drasticamente il costo computazionale dell’emulazione.

La svolta successiva arrivò nel 2016 quando Bellard sviluppò TinyEMU, un emulatore scritto in C inizialmente dedicato all’architettura RISC-V. Il codice di TinyEMU fu poi convertito in JavaScript con il compilatore Emscripten. Il risultato superò le prestazioni della precedente implementazione asm.js scritta manualmente.

Dispositivi hardware simulati

Un sistema operativo completo richiede molto più della sola CPU. JSLinux emula quindi una serie di componenti fondamentali della piattaforma PC. Tra questi figurano il controller di interrupt 8259, il timer programmabile 8254 e il bus PCI, che costituiscono la base della compatibilità con il software legacy.

La gestione delle periferiche moderne avviene invece tramite la famiglia di dispositivi VirtIO. Tra quelli implementati compaiono la console virtuale, l’interfaccia di rete, il dispositivo di storage a blocchi e il sottosistema di input. L’utilizzo di VirtIO riduce il carico di emulazione perché il sistema operativo guest comunica con il dispositivo virtuale tramite driver paravirtualizzati.

Per l’accesso ai file remoti è presente anche un filesystem VirtIO 9P, soluzione che consente di importare o esportare file tra host e macchina virtuale direttamente dal browser.

L’interfaccia grafica può utilizzare un framebuffer semplice oppure una VGA minimale, mentre alcune configurazioni includono controller IDE e periferiche PS/2 per tastiera e mouse.

Distribuzioni Linux e interfaccia utente

Le macchine virtuali disponibili nel progetto utilizzano principalmente le distribuzioni Alpine Linux e Buildroot, ma ci sono anche Fedora e – addirittura – FreeDOS e Windows 2000 (!).

In modalità grafica è possibile eseguire anche il server X Window con il window manager Fluxbox, mentre l’interfaccia di base rimane un terminale JavaScript avanzato dotato di scroll, selezione del testo e supporto al riconoscimento degli URL.

JSLinux Windows 2000 emulazione

Supporto alle architetture RISC-V

Oltre alla piattaforma x86, l’emulatore integra un backend dedicato all’architettura RISC-V, disponibile in modalità a 32 o 64 bit. Il processore simulato include una unità in virgola mobile a 64 bit e il supporto alle istruzioni compresse previste dallo standard RISC-V.

Le immagini software disponibili pubblicamente includono distribuzioni Linux generate con Buildroot e Fedora. Le versioni a 32 bit risultano ancora disponibili ma non vengono più mantenute attivamente, mentre lo sviluppo si concentra sulle varianti a 64 bit.

Applicazioni pratiche e valore didattico

Nonostante sia nato come esperimento tecnico, JSLinux ha trovato applicazioni reali in diversi contesti. Molti sviluppatori lo utilizzano per valutare le prestazioni dei motori JavaScript o per testare nuove funzionalità di WebAssembly. Altri lo impiegano come ambiente di laboratorio per apprendere strumenti Unix senza installare software sul proprio computer.

Un ulteriore scenario riguarda l’accesso sicuro ai file tramite il browser. Grazie al filesystem virtuale e alla sincronizzazione controllata dei dati, l’ambiente può funzionare come sandbox isolata, riducendo i rischi associati all’esecuzione di programmi sconosciuti.

Il progetto dimostra soprattutto quanto l’infrastruttura del Web sia diventata potente. L’esecuzione di un sistema operativo completo all’interno di una pagina HTML richiede milioni di istruzioni al secondo, gestione della memoria virtuale, emulazione hardware e networking. Eppure, tutto avviene in un contesto nato originariamente per documenti ipertestuali.

Ti consigliamo anche

Link copiato negli appunti