WebAssembly (Wasm) è una tecnologia pensata per le applicazioni distribuite via Web, fornendo un’alternativa con performance migliori di quanto JavaScript (JS) possa garantire. Attenzione ad un dettaglio: non sostituisce JS, ma lo va ad affiancare.
Ne abbiamo parlato (velocemente) qualche anno fa, con l’integrazione della tecnologia in Chrome 57. Poco dopo l’integrazione fu portata su Firefox, e nel giro di un paio d’anni era disponibile anche in Microsoft Edge e Safari di Apple, su tantissime piattaforme e sistemi: Windows, Linux, MacOS, x86, ARM, desktop, cellulare… ovunque!
Anche stavolta non ci dilungheremo molto. Basti sapere che si tratta di un linguaggio di basso livello compilato (bytecode), che viene eseguito da una specifica Virtual Machine (come Java) integrata nel browser (come JavaScript). L’intento è offrire un mezzo per l’esecuzione efficiente di programmi complessi, senza essere limitati alle prestazioni JavaScript né legati ad uno specifico linguaggio: potenzialmente qualsiasi linguaggio di alto livello (C, C++, .NET, Rust, Go, Python, etc.) può essere compilato per l’esecuzione WebAssembly. Sarà la VM a occuparsi poi della traduzione per lo specifica piattaforma su cui gira il browser, eventualmente interagendo con JavaScript (e il DOM, ovvero quello che il browser deve visualizzare all’utente).
Altra caratteristica: Wasm è open-source, promosso da un consorzio che va sotto il nome di Bytecode Alliance, che comprende nomi di un certo peso: Mozilla, Google, Microsoft, Intel, ARM, solo per fare qualche esempio.
E proprio in seno a questo consorzio esiste il progetto Wasmtime, che potremmo definire come una VM per Wasm standalone, separata da qualsiasi browser. Più o meno quello che è Node.js per JavaScript.
Wasmtime usa Cranelift per generare il codice macchina effettivamente eseguito. Sebbene questo codice risulti leggermente più lento in esecuzione di altre implementazioni, la velocità di compilazione risulta di molto maggiore, spesso risultando più veloce in totale (avvio del programma, compilazione al volo del programma per la macchina e infine esevuzione). Su questo, è disponibile una ricerca molto dettagliata.
Il 20 settembre la Bytecode Alliance ha annunciato la disponibilità generale di Wasmtimne 1.0. Non solo: è definita anche “Prodution Ready”. Questo vuol dire che è ritenuto abbastanza stabile e maturo per essere usato da chiunque lo ritenga utile, e non solo per fini di studio.
Il tutto viene dopo circa 3 anni di sviluppo e quasi uno di uso in ambienti di produzione da parte dei membri della Bytecode Alliance, che possono anche testimoniare la validità delle performance. Sì, è un po’ come l’oste che ci dice che il vino è buono, ma in questo caso potemmo fidarci: se non fosse stato buono, l’oste avrebbe perso parecchi soldi.
Un dettaglio però ci preoccupa del modello di Wasmtime, che potrebbe limitare fortemente la diffusione in ambito enterprise: l’eccessiva velocità dei cicli di rilascio.
Infatti è prevista una major ogni mese – cosa già piuttosto strana. Ogni rilascio potrebbe essere incompatibile con la versione precedente – mandando all’aria (potenzialmente) tutto quello che usa o interagisce con Wasmtime.
Si rassicura che ogni release renderà ben chiaro cosa verrà ritoccato, e che si eviteranno il più possibile cambiamenti di compatibilità. Quindi sviluppatori e/o sistemisti dovranno rivedere tutto il software ad ogni aggiornamento, per essere sicuri di non avere impatti. Cosa che, se fatta mensilmente, potrebbe richiedere un effort semplicemente troppo elevato, mentre se fatto a intervalli troppo lunghi (per esempio 6 mesi, che sono normali in produzione) potrebbe portarsi dietro un accumulo di modifiche, con impatti potenziali ancora più elevati.
Altra chicca: il bugfix sarà garantito per l’ultima versione rilasciata e le due precedenti. Sì: ogni 3 mesi il software sarà semplicemente obsoleto.
Viste performance e duttilità, Wasm potrebbe diffondersi davvero ovunque. Il codice sorgente di partenza potrebbe essere uno qualsiasi di quelli compilabili già esistenti; questo codice sarebbe usato per generare i file in bytecode. L’esecuzione reale affidata ad una VM, leggera e perfomante. Il che vorrebbe dire completare un’impresa non da poco, e riuscire laddove Java ha fallito Java: essere un metodo universale (o quasi) di distribuzione software.
Wasmtime potrebbe essere un tassello fondamentale per la larga diffusione e l’uso in contesti enterprise (che producono denaro, giusto per esser chiari). Sempre che il ciclo di rilascio venga un po’ rallentato…
Ho coltivato la mia passione per l'informatica fin da bambino, coi primi programmi BASIC. In età adulta mi sono avvicinato a Linux ed alla programmazione C, per poi interessarmi di reti. Infine, il mio hobby è diventato anche il mio lavoro.
Per me il modo migliore di imparare è fare, e per questo devo utilizzare le tecnologie che ritengo interessanti; a questo scopo, il mondo opensource offre gli strumenti perfetti.