È stata presentata la release del progetto Wasmer 5.0, che sviluppa un runtime per l'esecuzione di moduli WebAssembly, utilizzabile per creare applicazioni universali in grado di funzionare su diversi sistemi operativi. Wasmer può essere utilizzato anche per l'esecuzione isolata di blocchi di codice non affidabili all'interno di applicazioni comuni. Il codice del progetto è scritto in Rust e distribuito con licenza MIT.
La capacità di eseguire un'applicazione su diverse piattaforme è realizzata attraverso la compilazione in un codice intermedio a basso livello WebAssembly, che può essere eseguito su qualsiasi sistema operativo o integrato in programmi scritti in altri linguaggi di programmazione. I programmi sono contenitori leggeri in cui viene eseguito il pseudocodice WebAssembly. Questi contenitori non sono legati a un sistema operativo e possono includere codice scritto originariamente in qualsiasi linguaggio di programmazione.
Per l'esecuzione di codice intermedio WebAssembly o la sua traduzione in codice macchina per la piattaforma target, sono disponibili diversi backend:
- Backend basato sul compilatore Singlepass, ottimale per l'uso nelle blockchain.
- Backend basato sul generatore di codice Cranelift, ottimale per l'uso durante lo sviluppo.
- Backend basato sul compilatore LLVM, ottimale per l'uso in implementazioni di produzione.
- Backend per l'esecuzione nel browser web.
- Backend basato sul motore JavaScript JavascriptCore, ottimale per l'uso sulla piattaforma macOS.
- Backend basato sul motore JavaScript V8, ottimale per applicazioni su piattaforme iOS e Android.
- Backend basato sull'interprete Wasmi, ottimale per blockchain e progetti Rust che non utilizzano la standard library (nostd).
- Backend basato sul runtime WAMR, ottimale per la piattaforma iOS.
Le applicazioni sono isolate dal sistema principale in un ambiente sandbox e hanno accesso solo alle funzionalità dichiarate. Per l'isolamento si utilizza un meccanismo basato sulla gestione delle capacità: per ogni risorsa (file, directory, socket, chiamate di sistema, ecc.) l'applicazione deve ricevere le corrispondenti autorizzazioni. La gestione degli accessi e l'interazione con il sistema sono garantite tramite l'API WASI (WebAssembly System Interface), che fornisce interfacce per lavorare con file, socket e altre funzioni di sistema.
La piattaforma consente di ottenere prestazioni applicative vicine a quelle delle build nativa. Grazie al Native Object Engine per il modulo WebAssembly, è possibile generare codice macchina, il cui avvio richiede un runtime minimo, mantenendo tutte le funzionalità di isolamento sandbox. È possibile fornire programmi precompilati con Wasmer integrato. Per la creazione di estensioni e supplementi sono disponibili API Rust e Wasm-C-API.
Per eseguire un contenitore WebAssembly, è sufficiente installare il runtime Wasmer nel sistema, che è fornito senza dipendenze esterne ("curl https://get.wasmer.io -sSfL | sh"), e avviare il file necessario ("wasmer test.wasm"). I programmi sono distribuiti sotto forma di normali moduli WebAssembly, la cui gestione può essere effettuata utilizzando il gestore di pacchetti WAPM. Wasmer è disponibile anche come libreria, che può essere utilizzata per integrare codice WebAssembly in programmi scritti in Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir e Java.
Novità principali di Wasmer 5.0:
- È stata implementata la possibilità di utilizzare interpreti WebAssembly.
- È stato aggiunto un backend sperimentale basato sull'interprete leggero Wasmi, che consente di eseguire codice intermedio WebAssembly in ambienti con risorse limitate.
- È stato aggiunto un backend sperimentale basato sul runtime WebAssembly WAMR (WebAssembly Micro Runtime), ottimizzato per un consumo minimo di risorse e adatto a dispositivi con poca memoria operativa.
- È stato aggiunto un backend sperimentale basato sul motore JavaScript v8, utilizzato nei browser basati su Chromium. Il principale vantaggio dell'utilizzo di un backend basato su V8 è la possibilità di utilizzare il debugger integrato e gli strumenti per gli sviluppatori web, oltre alla disponibilità di funzionalità avanzate WebAssembly in V8, come la gestione delle eccezioni e la garbage collection.
- Il backend che utilizza LLVM ha aggiunto supporto sperimentale per l'architettura Loongarch64.
- È stato aggiunto il supporto per la piattaforma iOS, disponibile utilizzando i backend WAMR, Wasmi e V8.
- È stata interrotta la supporto per il compilatore Emscripten.
- Sono state aggiornate le dipendenze, tra cui LLVM 18, il generatore di codice Cranelift 27 e il framework rkyv 0.8.
- È stata effettuata un'ottimizzazione delle prestazioni. Ad esempio, durante l'esecuzione delle operazioni di deserializzazione dei moduli, si osserva un aumento delle prestazioni fino al 50%.







Fonte: opennet.ru







