„Mozilla“, „Fastly“, „Intel“ ir „Red Hat“ reklamuoja „WebAssembly“ kaip universalią platformą

„Mozilla“, „Fastly“, „Intel“ ir „Red Hat“. vieningi savo pastangas kuriant technologijas, padedančias WebAssembly paversti universalia platforma saugiam kodo vykdymui bet kurioje infrastruktūroje, operacinėje sistemoje ar įrenginyje. Sukurta bendruomenė bendram vykdymo laikui ir kompiliatoriams, leidžiantiems naudoti WebAssembly ne tik žiniatinklio naršyklėse, kurti. Bytecode aljansas.

Norėdami sukurti nešiojamas programas, pateiktas WebAssembly formatu, kurios gali būti vykdomos ne naršyklėje, siūlome naudoti API WASI (WebAssembly System Interface), kuri suteikia programinės įrangos sąsajas tiesioginei sąveikai su operacine sistema (POSIX API darbui su failais, lizdais ir kt.). Išskirtinis programų, naudojančių WASI, vykdymo modelio bruožas yra tas, kad jos veikia smėlio dėžės aplinkoje, kad būtų atskirtos nuo pagrindinės sistemos, ir naudoja saugumo mechanizmą, pagrįstą pajėgumų valdymu veiksmams su kiekvienu ištekliu (failais, katalogais, lizdais, sistemos iškvietimais). ir pan.) programai turi būti suteikti atitinkami leidimai (suteikiama tik prieiga prie deklaruojamų funkcijų).

Vienas iš tikslus Sukurtas aljansas yra šiuolaikinių modulinių programų su daugybe priklausomybių platinimo problemos sprendimas. Tokiose programose kiekviena priklausomybė gali būti pažeidžiamumų ar atakų šaltinis. Priklausomybės valdymas leidžia valdyti visas su ja susijusias programas. Pasitikėjimas programa automatiškai reiškia pasitikėjimą visomis priklausomybėmis, tačiau priklausomybes dažnai kuria ir prižiūri trečiųjų šalių komandos, kurių veiklos negalima kontroliuoti. „Bytecode Alliance“ nariai ketina pateikti holistinį sprendimą saugiam „WebAssembly“ programų, kurios iš prigimties nėra patikimos, vykdymui.

Apsaugai siūloma naudoti nanoprocesų koncepciją, kai kiekvienas priklausomybės modulis yra atskirtas į atskirai izoliuotą WebAssembly modulį, kurio galios nustatomos tik šio modulio atžvilgiu (pavyzdžiui, biblioteka eilėms apdoroti nebus turėti galimybę atidaryti tinklo lizdą arba failą). Skirtingai nuo procesų atskyrimo, WebAssembly tvarkyklės yra lengvos ir beveik nereikalauja papildomų resursų – sąveika tarp tvarkyklių nėra daug lėtesnė nei įprastų funkcijų iškvietimas. Atskyrimas gali būti atliekamas ne tik atskirų modulių lygiu, bet ir modulių grupių lygiu, kurie, pavyzdžiui, turi dirbti su bendromis atminties sritimis.

Reikalingi įgaliojimai gali būti nustatyti tiek pačių priklausomybių lygiu, tiek priskirti priklausomybėms grandinėje pirminiais moduliais (WASI ištekliai yra susieti su specialiu failo deskriptoriaus tipu - galimybe). Pavyzdžiui, moduliui gali būti suteikta galimybė pasiekti konkretų katalogą ir sistemos skambučius, o jei modulio kūrimo infrastruktūra bus pažeista arba nustatomas pažeidžiamumas, atakos metu prieiga bus apribota tik šiais ištekliais. Modulio kūrėjų išteklių deklaracijos gali būti įtartinos veiklos rodiklis, pvz., kai teksto apdorojimo modulis prašo leidimo atidaryti tinklo ryšį. Iš pradžių nustatyti leidimai yra tikrinami ir, jei jie pasikeičia, priklausomybės įkėlimas atmetamas, kol nebus atnaujintas vietinio modulio parašas.

Bendram vystymuisi pagal „Bytecode Alliance“ sparną išversta keletas susijusių su WebAssembly projektus, anksčiau atskirai sukurtas aljanso steigėjų:

  • buvo laikas — vykdymo laikas, skirtas paleisti „WebAssembly“ programas su WASI plėtiniais kaip įprastas atskiras programas. Jis palaiko ir WebAssembly baito kodo paleidimą naudojant specialią komandų eilutės įrankį, ir paruoštų vykdomųjų failų susiejimą (wasmtime yra integruotas į programą kaip biblioteka). Wasmtime turi lanksčią modulinę struktūrą, leidžiančią padidinti įvairių programų vykdymo laiką, pavyzdžiui, galite sukurti sumažintą versiją įrenginiams su ribotais ištekliais;
  • Lucet — kompiliatorius ir vykdymo laikas programoms vykdyti WebAssembly formatu. Išskirtinis funkcija „Lucet“ yra visavertis išankstinis kompiliavimas (AOT, prieš laiką), o ne JIT į mašininį kodą, tinkantį tiesioginiam vykdymui. Projektą sukūrė „Fastly“ ir jis optimizuotas taip, kad sunaudotų minimalius išteklius ir labai greitai paleistų naujus egzempliorius („Fastly“ naudoja „Lucet“ debesies krašto kompiuterijos variklyje, kuris naudoja „WebAssembly“ tvarkytojams, paleidžiamiems pagal kiekvieną užklausą). Vykdant bendrą projektą, Lucet kompiliatorių planuojama konvertuoti į Wasmtime kaip pagrindą;
  • WAMR („WebAssembly Micro Runtime“) yra dar vienas „WebAssembly“ vykdymo laikas, kurį iš pradžių sukūrė „Intel“, kad būtų galima naudoti daiktų interneto įrenginiuose. WAMR yra optimizuotas minimaliam išteklių sunaudojimui ir gali būti naudojamas įrenginiuose su nedideliu RAM kiekiu. Projektas apima vertėją ir virtualią mašiną, skirtą WebAssembly baito kodui vykdyti, API (Libc poaibį) ir dinaminių programų valdymo įrankius;
  • „Cranelift“ — kodo generatorius, kuris tarpinį vaizdą, nepriklausomą nuo aparatinės įrangos architektūros, paverčia vykdomuoju mašinos kodu, optimizuotu konkrečioms aparatinės įrangos platformoms. „Cranelift“ palaiko funkcijų kompiliavimo lygiagrečiavimą, kad būtų galima labai greitai generuoti rezultatus, todėl jį galima naudoti kuriant JIT kompiliatorius (Wasmtime virtualioje mašinoje naudojamas Cranelift pagrindu sukurtas JIT);
  • WASI dažnas — atskiras WASI (WebAssembly System Interface) API diegimas sąveikai su operacine sistema organizuoti;
  • cargo-wasi — Cargo paketo tvarkyklės modulis, įgyvendinantis komandą Rust kodui kompiliuoti į WebAssembly baitinį kodą naudojant WASI sąsają, skirtą WebAssembly naudoti už naršyklės ribų;
  • wat и buvo tyrėjas — analizatoriai, skirti analizuoti tekstą (WAT, WAST) ir dvejetainius WebAssembly baito kodo vaizdus.

Apibendrinant, „WebAssembly“ yra labai panašus į Asm.js, bet kitoks tuo, kad tai dvejetainis formatas, nesusietas su JavaScript ir leidžiantis naršyklėje vykdyti žemo lygio tarpinį kodą, sudarytą iš įvairių programavimo kalbų. WebAssembly nereikalauja šiukšlių rinktuvo, nes jis naudoja aiškų atminties valdymą. Naudodami JIT, skirtą WebAssembly, galite pasiekti našumo lygį, artimą vietiniam kodui. Tarp pagrindinių WebAssembly tikslų yra užtikrinti perkeliamumą, nuspėjamą elgesį ir identišką kodo vykdymą įvairiose platformose.

Šaltinis: opennet.ru

Добавить комментарий