A fost lansată versiunea 5.0 a proiectului Wasmer, care dezvoltă un runtime pentru executarea modulelor WebAssembly, utilizabil pentru crearea aplicațiilor universale, capabile să ruleze pe diferite sisteme de operare. Wasmer poate fi folosit și pentru executarea izolată a blocurilor de cod nesigure în cadrul aplicațiilor comune. Codul proiectului este scris în limbajul Rust și este distribuit sub licența MIT.
Possibilitatea de a rula aceeași aplicație pe diferite platforme este implementată prin compilarea în cod intermediar de nivel scăzut WebAssembly, care poate fi executat pe orice OS sau încorporat în programe scrise în alte limbaje de programare. Programele sunt containere ușoare, în care se execută codul WebAssembly. Aceste containere nu sunt legate de sistemul de operare și pot include cod scris inițial în orice limbaj de programare.
Pentru executarea codului intermediar WebAssembly sau pentru translatia acestuia în codul mașinii platformei țintă sunt disponibile diferite backend-uri:
- Backend bazat pe compilatorul Singlepass, optim pentru utilizarea în blockchain-uri.
- Backend bazat pe generatorul de cod Cranelift, optim pentru utilizarea în procesul de dezvoltare.
- Backend bazat pe compilatorul LLVM, optim pentru utilizarea în implementări de lucru.
- Backend pentru rulare în web-browser.
- Backend bazat pe motorul JavaScript JavascriptCore, optim pentru utilizarea pe platforma macOS.
- Backend bazat pe motorul JavaScript V8, optim pentru aplicațiile pe platformele iOS și Android.
- Backend bazat pe interpretul Wasmi, optim pentru blockchain-uri și proiectele Rust care nu folosesc biblioteca standard (nostd).
- Backend bazat pe runtime WAMR, optim pentru platforma iOS.
Aplicațiile sunt izolate de sistemul principal într-un mediu sandbox și au acces doar la funcționalitățile declarate. Izolarea se realizează printr-un mecanism bazat pe controlul capabilităților — pentru acțiuni cu fiecare dintre resurse (fișiere, foldere, socket-uri, apeluri de sistem etc.) aplicației trebuie să i se ofere permisiunile corespunzătoare. Controlul accesului și interacțiunea cu sistemul sunt gestionate prin API-ul WASI (WebAssembly System Interface), care furnizează interfețe pentru lucrul cu fișiere, socket-uri și alte funcții sistem.
Platforma permite obținerea unei performanțe a aplicațiilor aproape identică cu cea a compunerilor nativ. Cu ajutorul Native Object Engine pentru modulul WebAssembly, este posibil să generați cod mașină, pentru rularea căruia este necesar un runtime minim, păstrând în același timp toate posibilitățile de izolare sandbox. Este posibilă livrarea de programe recompilate cu Wasmer încorporat. API-ul Rust și Wasm-C-API sunt disponibile pentru crearea de extensii și adiții.
Pentru a rula un container WebAssembly, este suficient să instalați în sistem runtime-ul Wasmer, care se furnizează fără dependențe externe ("curl https://get.wasmer.io -sSfL | sh"), și să rulați fișierul necesar ("wasmer test.wasm"). Programele sunt distribuite sub formă de module WebAssembly obișnuite, iar pentru gestionarea acestora se poate folosi managerul de pachete WAPM. Wasmer este disponibil și sub formă de bibliotecă, care poate fi utilizată pentru integrarea codului WebAssembly în programele scrise în Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir și Java.
Noutățile principale din Wasmer 5.0:
- A fost implementată posibilitatea de a utiliza interpretoare WebAssembly.
- A fost adăugat un backend experimental bazat pe interpreterul ușor Wasmi, care permite executarea codului intermediar WebAssembly în medii cu resurse limitate.
- A fost adăugat un backend experimental bazat pe runtime-ul WebAssembly WAMR (WebAssembly Micro Runtime), optimizat pentru un consum minim de resurse și adecvat pentru utilizarea pe dispozitive cu cantitate redusă de memorie RAM.
- A fost adăugat un backend experimental bazat pe motorul JavaScript v8, utilizat în browserele bazate pe codul sursă Chromium. Principala caracteristică a utilizării acestui backend este posibilitatea de a utiliza debuggerul încorporat din acest motor și instrumentele pentru dezvoltatorii web, precum și disponibilitatea în V8 a funcționalității extinse WebAssembly, cum ar fi gestionarea excepțiilor și colectarea deșeurilor.
- Backend-ul care utilizează LLVM a adăugat suport experimental pentru arhitectura Loongarch64.
- A fost adădat suport pentru platforma iOS, disponibil prin utilizarea backend-urilor WAMR, Wasmi și V8.
- A fost întrerupt suportul pentru compilatorul Emscripten.
- Au fost actualizate dependențele, printre care LLVM 18, generatorul de cod Cranelift 27 și framework-ul rkyv 0.8.
- A fost optimizată performanța. De exemplu, în timpul executării operațiunilor de deserializare a modulelor, s-a observat o creștere a performanței de până la 50%.







Sursa: opennet.ro







