Mozilla, Fastly, Intel ja Red Hat mainostavat WebAssemblya yleiskäyttöisenä alustana

Mozilla, Fastly, Intel ja Red Hat yhtenäinen sen pyrkimykset kehittää teknologioita, jotka auttavat tekemään WebAssemblysta universaalin alustan turvalliselle koodin suorittamiselle missä tahansa infrastruktuurissa, käyttöjärjestelmässä tai laitteessa. Ajonaikaisten ja kääntäjien yhteistä kehittämistä varten on muodostettu yhteisö, joka mahdollistaa WebAssemblyn käytön paitsi verkkoselaimissa Bytecode Alliance.

Jos haluat luoda kannettavia ohjelmia, jotka toimitetaan WebAssembly-muodossa ja jotka voidaan suorittaa selaimen ulkopuolella, suosittelemme API:n käyttöä. OLINKO MINÄ (WebAssembly System Interface), joka tarjoaa ohjelmistorajapinnat suoraa vuorovaikutusta varten käyttöjärjestelmän kanssa (POSIX API tiedostojen, pistokkeiden jne. käsittelyyn). WASI:a käyttävien sovellusten suoritusmallin erottuva piirre on, että ne toimivat hiekkalaatikkoympäristössä pääjärjestelmästä eristäytymistä varten ja käyttävät suojausmekanismia, joka perustuu toimintojen hallintaan kunkin resurssin (tiedostot, hakemistot, pistorasiat, järjestelmäkutsut) toimissa. tms.) sovellukselle on annettava asianmukaiset käyttöoikeudet (vain ilmoitettuihin toimintoihin on pääsy).

Yksi tavoitteet Luotu allianssi on ratkaisu ongelmaan, joka liittyy nykyaikaisten modulaaristen sovellusten jakeluun suurella määrällä riippuvuuksia. Tällaisissa sovelluksissa jokainen riippuvuus voi olla mahdollinen haavoittuvuuksien tai hyökkäysten lähde. Riippuvuuden hallinta mahdollistaa kaikkien siihen liittyvien sovellusten hallinnan. Luottamus sovellukseen tarkoittaa automaattisesti luottamusta kaikkiin riippuvuuksiin, mutta riippuvuuksia kehittävät ja ylläpitävät usein kolmannen osapuolen tiimit, joiden toimintaa ei voida hallita. Bytecode Alliancen jäsenet aikovat tarjota kokonaisvaltaisen ratkaisun sellaisten WebAssembly-sovellusten turvalliseen suorittamiseen, jotka eivät ole luonnostaan ​​luotettavia.

Suojauksena ehdotetaan käytettäväksi nanoprosessien käsitettä, jossa jokainen riippuvuusmoduuli erotetaan erikseen eristetyksi WebAssembly-moduuliksi, jonka tehot asetetaan suhteessa vain tähän moduuliin (esim. merkkijonojen käsittelykirjasto ei voi avata verkkopistorasian tai tiedoston). Toisin kuin prosessien erottaminen, WebAssembly-käsittelijät ovat kevyitä eivätkä vaadi juuri mitään lisäresursseja – käsittelijöiden välinen vuorovaikutus ei ole paljon hitaampaa kuin tavallisten toimintojen kutsuminen. Erottelu voidaan tehdä yksittäisten moduulien lisäksi myös moduuliryhmien tasolla, joiden on toimittava esimerkiksi yhteisten muistialueiden kanssa.

Pyydetyt valtuudet voidaan määrittää sekä itse riippuvuuksien tasolla että delegoida riippuvuuksille ketjussa ylätason moduuleilla (WASI:n resurssit liittyvät erityiseen tiedostokuvaajaan - ominaisuus). Esimerkiksi moduulille voidaan delegoida kyky käyttää tiettyä hakemistoa ja järjestelmäkutsuja, ja jos moduulin kehitysinfrastruktuuri vaarantuu tai haavoittuvuus tunnistetaan hyökkäyksen aikana, pääsy rajoitetaan vain näihin resursseihin. Moduulien luojien resurssiilmoitukset voivat olla osoitus epäilyttävästä toiminnasta, kuten tekstinkäsittelymoduuli pyytää lupaa avata verkkoyhteys. Aluksi asetetut käyttöoikeudet tarkistetaan ja jos ne muuttuvat, riippuvuuden lataus hylätään, kunnes paikallinen moduulin allekirjoitus päivitetään.

Yhteiseen kehittämiseen Bytecode Alliancen siiven alla käännetty useita WebAssemblyyn liittyviä hankkeitaAllianssin perustajayhtiöiden aiemmin erikseen kehittämä:

  • oli aika — Suoritusaika WebAssembly-sovellusten suorittamiseen WASI-laajennuksilla tavallisina itsenäisinä sovelluksina. Se tukee sekä WebAssembly-tavukoodin käynnistämistä erityisellä komentorivityökalulla että valmiiden suoritettavien tiedostojen linkittämistä (wasmtime on sisäänrakennettu sovellukseen kirjastona). Wasmtimessa on joustava modulaarinen rakenne, jonka avulla voit skaalata ajonaikaa eri sovelluksille, esimerkiksi voit luoda rajoitetun version laitteille, joilla on rajalliset resurssit;
  • Lucet — kääntäjä ja ajonaika ohjelmien suorittamiseen WebAssembly-muodossa. Erottuva ominaisuus Lucet on täysimittaisen ennakoivan käännöksen (AOT, ahead-of-time) käyttö JIT:n sijaan konekoodiksi, joka soveltuu suoraan suoritukseen. Fastlyn kehittämä projekti on optimoitu kuluttamaan mahdollisimman vähän resursseja ja käynnistämään uusia ilmentymiä erittäin nopeasti (Fastly käyttää Lucetia pilvireunalaskentamoottorissa, joka käyttää WebAssemblya jokaisessa pyynnöstä käynnistetyille käsittelijöille). Osana yhteisprojektia Lucet-kääntäjä suunnitellaan muunnettavaksi Wasmtimeen pohjana;
  • WAMR (WebAssembly Micro Runtime) on toinen ajonaika WebAssemblyn suorittamiseen, jonka Intel on alunperin kehittänyt käytettäväksi Internet of Things -laitteissa. WAMR on optimoitu minimaaliseen resurssien kulutukseen ja sitä voidaan käyttää laitteissa, joissa on pieni määrä RAM-muistia. Projekti sisältää tulkin ja virtuaalikoneen WebAssembly-tavukoodin suorittamiseen, API:n (Libc:n osajoukko) ja työkaluja dynaamiseen sovellusten hallintaan;
  • nosturinosturi — koodigeneraattori, joka muuntaa laitteistoarkkitehtuureista riippumattoman väliesityksen suoritettavaksi konekoodiksi, joka on optimoitu tietyille laitteistoalustoille. Cranelift tukee funktioiden kääntämisen rinnakkaisua erittäin nopeaa tulosten luomista varten, mikä mahdollistaa sen käytön JIT-kääntäjien luomiseen (Cranelift-pohjaista JIT:tä käytetään Wasmtime-virtuaalikoneessa);
  • WASI yleinen — WASI (WebAssembly System Interface) API:n erillinen toteutus käyttöjärjestelmän vuorovaikutuksen järjestämiseksi;
  • lasti-wasi — Cargo-paketinhallinnan moduuli, joka toteuttaa komennon Rust-koodin kääntämiseksi WebAssembly-tavukoodiksi WASI-rajapinnalla WebAssemblyn käyttämiseen selaimen ulkopuolella;
  • Wat и wasmparser — jäsentimet tekstin jäsentämiseksi (WAT, WAST) ja WebAssembly-tavukoodin binääriesitykset.

Yhteenvetona totean, että WebAssembly on paljon kuin Asm.js, mutta eri siinä mielessä, että se on binäärimuoto, joka ei ole sidottu JavaScriptiin ja mahdollistaa useista ohjelmointikielistä kootun matalan tason keskitason koodin suorittamisen selaimessa. WebAssembly ei vaadi roskienkerääjää, koska se käyttää nimenomaista muistinhallintaa. Käyttämällä JIT for WebAssemblya voit saavuttaa suorituskykytasot lähellä alkuperäistä koodia. WebAssemblyn tärkeimpiä tavoitteita on varmistaa siirrettävyys, ennustettava toiminta ja identtinen koodin suoritus eri alustoilla.

Lähde: opennet.ru

Lisää kommentti