Mozilla, Fastly, Intel eta Red Hat-ek WebAssembly erabilera unibertsalerako plataforma gisa sustatzen dute

Mozilla, Fastly, Intel eta Red Hat Batua WebAssembly edozein azpiegitura, sistema eragile edo gailutan kode seguruaren exekuziorako plataforma unibertsal bihurtzen laguntzen duten teknologiak garatzeko egiten dituen ahaleginak. WebAssembly web arakatzaileetan ez ezik, WebAssembly erabiltzeko aukera ematen duten exekuzio-denbora eta konpiladoreak elkarrekin garatzeko komunitate bat sortu da. Bytecode Alliance.

Arakatzailetik kanpo exekutatu daitezkeen WebAssembly formatuan entregatutako programa eramangarriak sortzeko, APIa erabiltzea gomendatzen dugu. WASI (WebAssembly System Interface), sistema eragilearekin zuzeneko interakziorako software interfazeak eskaintzen dituena (fitxategiekin, socketekin, etab. lantzeko POSIX APIa). WASI erabiltzen duten aplikazioen exekuzio-ereduaren ezaugarri bereizgarria da sistema nagusitik isolatzeko sandbox ingurune batean exekutatzen direla eta baliabide bakoitzarekin (fitxategiak, direktorioak, socketak, sistema-deiak egiteko gaitasunen kudeaketan oinarritutako segurtasun-mekanismo bat erabiltzen dutela). , etab.) aplikazioari dagozkion baimenak eman behar zaizkio (deklaratutako funtzionalitaterako sarbidea baino ez da ematen).

Horietako bat helburuak Sortutako aliantza menpekotasun kopuru handia duten aplikazio modular modernoak banatzeko arazoari irtenbidea ematen dio. Horrelako aplikazioetan, mendekotasun bakoitza ahultasun edo erasoen iturri potentziala izan daiteke. Mendekotasun baten kontrola hartzeak harekin lotutako aplikazio guztien kontrola lortzeko aukera ematen du. Aplikazioan konfiantzak automatikoki mendekotasun guztietan konfiantza dakar, baina menpekotasunak sarritan garatu eta mantentzen dituzte jarduerak kontrolatu ezin diren hirugarren taldeek. Bytecode Allianceko kideek berez fidagarriak ez diren WebAssembly aplikazioen exekuzio segururako irtenbide holistiko bat eskaini nahi dute.

Babeserako, nanoprozesuen kontzeptua erabiltzea proposatzen da, non mendekotasun-modulu bakoitza bereizita isolatu den WebAssembly modulu batean banatzen den, zeinaren ahalmenak modulu honi bakarrik ezartzen zaizkion (adibidez, kateak prozesatzeko liburutegi bat ez da izango. sareko socket edo fitxategi bat irekitzeko gai izan). Prozesuen bereizketa ez bezala, WebAssembly kudeatzaileak arinak dira eta ez dute ia baliabide gehigarririk behar - kudeatzaileen arteko elkarrekintza ez da funtzio arruntak deitzea baino askoz motelagoa. Banakako moduluen mailan ez ezik, memoria-eremu komunekin lan egin behar duten modulu taldeen mailan ere egin daiteke bereizketa.

Eskatutako ahalmenak menpekotasunen mailan zehaztu daitezke, eta katearen menpekotasunetan eskuordetu daitezke modulu nagusien bidez (WASIko baliabideak fitxategi deskribatzaile mota berezi batekin lotzen dira - gaitasun). Adibidez, modulu bati direktorio eta sistema-dei jakin batera sartzeko gaitasuna delega daiteke, eta moduluaren garapen-azpiegitura arriskuan badago edo ahultasun bat identifikatzen bada, eraso batean, sarbidea baliabide horietara soilik mugatuko da. Modulu-sortzaileen baliabideen deklarazioak jarduera susmagarrien adierazle izan daitezke, esate baterako, testua prozesatzeko modulu batek sareko konexio bat irekitzeko baimena eskatzen duenean. Hasieran ezarritako baimenak egiaztatzen dira eta aldatzen badira, menpekotasun-karga baztertzen da modulu lokalaren sinadura eguneratu arte.

Bytecode Alliance-ren hegalpean elkarrekin garatzeko itzulita WebAssembly-ri lotutako hainbat proiektuak, aldez aurretik aliantzaren sorrerako enpresek bereizita garatuta:

  • Garai garaia β€” WebAssembly aplikazioak WASI luzapenak dituzten aplikazio autonomo arrunt gisa exekutatzeko exekuzioa. WebAssembly bytecode-a abiarazten du komando-lerroko utilitate berezi bat erabiliz eta prest dauden fitxategi exekutagarriak lotzea (wasmtime aplikazioan liburutegi gisa integratuta dago). Wasmtime-k egitura modular malgua du, hainbat aplikazioren exekuzio-denbora eskalatzeko aukera ematen duena, adibidez, baliabide mugatuak dituzten gailuetarako bertsio txikitu bat sor dezakezu;
  • Lucet β€” WebAssembly formatuan programak exekutatzeko konpilatzailea eta exekuzio-denbora. Bereizgarria ezaugarria Lucet osoko aurreikuspen-konpilazioa (AOT, aurretiko) erabiltzea da JIT-ren ordez zuzeneko exekuziorako egokia den makina-kodean. Fastly-k garatu zuen proiektua eta gutxieneko baliabideak kontsumitzeko eta instantzia berriak oso azkar abiarazteko optimizatuta dago (Fastly-k Lucet erabiltzen du WebAssembly eskaera bakoitzean abiarazitako kudeatzaileentzako hodeiko ertzeko informatika-motor batean). Proiektu bateratuaren barruan, Lucet konpilatzailea bihurtzea aurreikusi da Wasmtime oinarri gisa erabiltzeko;
  • WAMR (WebAssembly Micro Runtime) WebAssembly exekutatzeko beste exekuzio-denbora bat da, jatorriz Intelek garatua Gauzen Interneten gailuetan erabiltzeko. WAMR baliabide gutxien kontsumitzeko optimizatuta dago eta RAM kopuru txikia duten gailuetan erabil daiteke. Proiektuak WebAssembly bytecode exekutatzeko interprete eta makina birtual bat, API bat (Libc-en azpimultzo bat) eta aplikazio dinamikoaren kudeaketarako tresnak biltzen ditu;
  • Garabi-jasotzailea β€” hardware-arkitektuetatik independente den tarteko irudikapen bat hardware-plataforma zehatzetarako optimizatutako makina-kode exekutagarri batean itzultzen duen kode-sorgailua. Cranelift-ek funtzioen konpilazioaren paralelizazioa onartzen du emaitza oso azkar sortzeko, eta horri esker JIT konpiladoreak sortzeko erabil daiteke (Cranelift-en oinarritutako JIT Wasmtime makina birtualean erabiltzen da);
  • WASI arrunta β€” WASI (WebAssembly System Interface) APIaren inplementazio bereizia sistema eragilearekin elkarrekintza antolatzeko;
  • zama-wasi β€” Cargo pakete kudeatzailearen modulua, Rust kodea WebAssembly bytecode-n konpilatzeko komando bat inplementatzen duena, WASI interfazea erabiliz WebAssembly arakatzailetik kanpo erabiltzeko;
  • wat ΠΈ zenparrista β€” Testua analizatzeko analizatzaileak (WAT, WAST) eta WebAssembly bytecode-ren irudikapen bitarrak.

Berrikusteko, WebAssembly Asm.js-en antzekoa da, baina hainbat izan ere, JavaScript-ekin lotuta ez dagoen formatu bitarra da eta nabigatzailean hainbat programazio-lengoaietatik konpilatutako maila baxuko bitarteko kodea exekutatzeko aukera ematen du. WebAssembly-k ez du zabor-biltzailerik behar memoria-kudeaketa esplizitua erabiltzen duelako. WebAssembly-rako JIT erabiliz, jatorrizko kodetik hurbil dauden errendimendu-mailak lor ditzakezu. WebAssembly-ren helburu nagusien artean eramangarritasuna, portaera aurreikusgarria eta kode berdin-berdina exekutatzeko plataforma desberdinetan bermatzea dago.

Iturria: opennet.ru

Gehitu iruzkin berria