Mozilla, Fastly, Intel kaj Red Hat reklamas WebAssembly kiel platformon por universala uzo

Mozilla, Fastly, Intel kaj Red Hat kunigitaj ĝiaj klopodoj en evoluigado de teknologioj kiuj helpas igi WebAssembly universala platformo por sekura koda ekzekuto tra ajna infrastrukturo, operaciumo aŭ aparato. Komunumo estis formita por la komuna evoluo de rultempo kaj kompililoj kiuj permesas la uzon de WebAssembly ne nur en retumiloj. Alianco de Bytecode.

Por krei porteblajn programojn liveritajn en WebAssembly-formato, kiuj povas esti efektivigitaj ekster la retumilo, ni sugestas uzi la API. WASI (WebAssembly System Interface), kiu disponigas softvarinterfacojn por rekta interagado kun la operaciumo (POSIX API por labori kun dosieroj, ingoj, ktp.). Karakterizaĵo de la ekzekutmodelo de aplikaĵoj uzantaj WASI estas ke ili funkcias en sablokesto-medio por izolado de la ĉefsistemo kaj uzas sekurecmekanismon bazitan sur kapableca administrado por agoj kun ĉiu el la rimedoj (dosieroj, dosierujoj, ingoj, sistemvokoj). , ktp.) la aplikaĵo devas ricevi la taŭgajn permesojn (nur aliro al la deklarita funkcio estas provizita).

Unu el celoj La kreita alianco estas solvo al la problemo de distribuado de modernaj modulaj aplikoj kun granda nombro da dependecoj. En tiaj aplikoj, ĉiu dependeco povas esti ebla fonto de vundeblecoj aŭ atakoj. Preni kontrolon de dependeco permesas vin akiri kontrolon de ĉiuj aplikoj asociitaj kun ĝi. Fido je la aplikaĵo aŭtomate implicas fidon je ĉiuj dependecoj, sed dependecoj ofte estas evoluigitaj kaj konservitaj de triaj teamoj, kies agadoj ne povas esti kontrolitaj. Bytecode Alliance-membroj intencas disponigi tutecan solvon por sekura ekzekuto de WebAssembly-aplikoj kiuj ne estas esence fidindaj.

Por protekto, oni proponas uzi la koncepton de nanoprocezoj, en kiu ĉiu dependeca modulo estas apartigita en aparte izolitan WebAssembly-modulon, kies potencoj estas fiksitaj rilate nur al ĉi tiu modulo (ekzemple, biblioteko por prilaborado de ŝnuroj ne estos). povi malfermi retan ingon aŭ dosieron). Male al proceza apartigo, WebAssembly-prizorgantoj estas malpezaj kaj preskaŭ ne postulas kromajn rimedojn - interago inter pritraktantoj ne estas multe pli malrapida ol vokado de ordinaraj funkcioj. Apartigo povas esti farita ne nur je la nivelo de individuaj moduloj, sed ankaŭ ĉe la nivelo de grupoj de moduloj kiuj, ekzemple, bezonas labori kun komunaj memorareoj.

La petitaj potencoj povas esti determinitaj kaj sur la nivelo de la dependecoj mem, kaj delegitaj al dependecoj laŭ la ĉeno per gepatraj moduloj (resursoj en WASI estas asociitaj kun speciala speco de dosierpriskribilo - kapablo). Ekzemple, al modulo povas esti delegita la kapablo aliri specifan adresaron kaj sistemvokojn, kaj se la evoluinfrastrukturo de la modulo estas endanĝerigita aŭ vundebleco estas identigita, dum atako, aliro estos limigita nur al ĉi tiuj rimedoj. Rimeddeklaroj de modulkreintoj povas esti indikilo de suspektinda agado, kiel ekzemple kiam tekstoprilabora modulo petas permeson malfermi retkonekton. La komence fiksitaj permesoj estas kontrolitaj kaj se ili ŝanĝiĝas, la dependeca ŝarĝo estas malakceptita ĝis la loka modulsignaturo estas ĝisdatigita.

Por komuna evoluo sub la flugilo de la Bytecode Alianco tradukita pluraj rilataj al WebAssembly projektoj, antaŭe aparte evoluigite fare de la fondfirmaoj de la alianco:

  • wasmtime — rultempo por ruli WebAssembly-aplikaĵojn kun WASI-etendaĵoj kiel regulaj memstaraj aplikoj. Ĝi subtenas ambaŭ lanĉi WebAssembly-bajtkodon uzante specialan komandlinian ilon kaj ligi pretajn ruleblajn dosierojn (wasmtime estas enkonstruita en la aplikaĵo kiel biblioteko). Wasmtime havas flekseblan modulan strukturon, kiu ebligas al vi skali la rultempon por diversaj aplikoj, ekzemple, vi povas krei malkonstruitan version por aparatoj kun limigitaj rimedoj;
  • Lucet — kompililo kaj rultempo por ekzekuti programojn en formato WebAssembly. Distinga trajto Lucet estas la uzo de plentaŭga antaŭtempa kompilo (AOT, antaŭtempa) anstataŭe de JIT en maŝinkodon taŭga por rekta ekzekuto. La projekto estis evoluigita de Fastly kaj estas optimumigita por konsumi minimumajn rimedojn kaj lanĉi novajn petskribojn tre rapide (Fastly uzas Lucet en nuba rando komputika motoro kiu uzas WebAssembly por pritraktantoj lanĉitaj sur ĉiu peto). Kiel parto de la komuna projekto, la Lucet-kompililo estas planita por esti konvertita por uzi Wasmtime kiel bazon;
  • WAMR (WebAssembly Micro Runtime) estas alia rultempo por ekzekuti WebAssembly, origine evoluigita fare de Intel por uzo en Interreto de Aĵoj-aparatoj. WAMR estas optimumigita por minimuma konsumo de rimedoj kaj povas esti uzata sur aparatoj kun malgranda kvanto da RAM. La projekto inkluzivas interpretiston kaj virtualan maŝinon por ekzekuti WebAssembly-bajtkodon, API (subaro de Libc) kaj ilojn por dinamika aplika administrado;
  • Gruolifto — kodgeneratoro kiu tradukas mezan reprezentadon sendependan de hardvararkitekturoj en ruleblan maŝinkodon optimumigitan por specifaj hardvarplatformoj. Cranelift apogas paraleligon de funkciokompilo por tre rapida rezultogenerado, kio permesas al ĝi esti uzita por krei JIT-kompililojn (Cranelift-bazita JIT estas uzita en la Wasmtime virtuala maŝino);
  • WASI komuna — aparta efektivigo de la API de WASI (WebAssembly System Interface) por organizi interagadon kun la operaciumo;
  • kargo-wasi — modulo por la Cargo-pakaĵmanaĝero kiu efektivigas komandon por kompili Rust-kodon en WebAssembly-bajtkodon uzante la WASI-interfacon por uzi WebAssembly ekster la retumilo;
  • wat и wasmpaser — analiziloj por analizi tekston (WAT, WAST) kaj binarajn prezentojn de WebAssembly-bajtkodo.

Resume, WebAssembly tre similas Asm.js, sed diferencas ĉar ĝi estas binara formato, kiu ne estas ligita al JavaScript kaj permesas malaltnivelan mezan kodon kompilitan el diversaj programlingvoj esti efektivigita en la retumilo. WebAssembly ne postulas rubkolektilon ĉar ĝi uzas eksplicitan memoradministradon. Uzante JIT por WebAssembly, vi povas atingi rendimentajn nivelojn proksimajn al denaska kodo. Inter la ĉefaj celoj de WebAssembly estas certigi porteblon, antaŭvideblan konduton kaj identan kodekzekuton sur malsamaj platformoj.

fonto: opennet.ru

Aldoni komenton