Mae Mozilla, Fastly, Intel a Red Hat yn hyrwyddo WebAssembly fel llwyfan ar gyfer defnydd cyffredinol

Mozilla, Fastly, Intel a Red Hat unedig ei hymdrechion i ddatblygu technolegau sy'n helpu i wneud WebAssembly yn llwyfan cyffredinol ar gyfer gweithredu cod diogel ar draws unrhyw seilwaith, system weithredu neu ddyfais. Mae cymuned wedi'i ffurfio ar gyfer datblygu amser rhedeg a chasglwyr ar y cyd sy'n caniatáu defnyddio WebCynulliad nid yn unig mewn porwyr gwe Cynghrair Bytecode.

Er mwyn creu rhaglenni cludadwy a ddarperir ar fformat WebCynulliad y gellir eu gweithredu y tu allan i'r porwr, rydym yn awgrymu defnyddio'r API Wasi (Rhyngwyneb System WebAssembly), sy'n darparu rhyngwynebau meddalwedd ar gyfer rhyngweithio'n uniongyrchol â'r system weithredu (POSIX API ar gyfer gweithio gyda ffeiliau, socedi, ac ati). Nodwedd nodedig o'r model gweithredu o gymwysiadau sy'n defnyddio WASI yw eu bod yn rhedeg mewn amgylchedd blwch tywod i'w ynysu o'r brif system ac yn defnyddio mecanwaith diogelwch yn seiliedig ar reoli gallu ar gyfer gweithredoedd gyda phob un o'r adnoddau (ffeiliau, cyfeiriaduron, socedi, galwadau system , ac ati) rhaid rhoi'r caniatâd priodol i'r cais (dim ond mynediad i'r swyddogaeth ddatganedig a ddarperir).

Un o nodau Mae'r gynghrair a grëwyd yn ateb i'r broblem o ddosbarthu cymwysiadau modiwlaidd modern gyda nifer fawr o ddibyniaethau. Mewn ceisiadau o'r fath, gall pob dibyniaeth fod yn ffynhonnell bosibl o wendidau neu ymosodiadau. Mae cymryd rheolaeth o ddibyniaeth yn eich galluogi i gael rheolaeth ar yr holl gymwysiadau sy'n gysylltiedig ag ef. Mae ymddiriedaeth yn y cais yn awtomatig yn awgrymu ymddiriedaeth ym mhob dibyniaeth, ond yn aml caiff dibyniaethau eu datblygu a'u cynnal gan dimau trydydd parti na ellir rheoli eu gweithgareddau. Mae aelodau Cynghrair Bytecode yn bwriadu darparu datrysiad cyfannol ar gyfer gweithredu cymwysiadau WebAssembly yn ddiogel nad ydynt yn gynhenid ​​y gellir ymddiried ynddynt.

Ar gyfer amddiffyniad, cynigir defnyddio'r cysyniad o nanobrosesau, lle mae pob modiwl dibyniaeth wedi'i wahanu'n fodiwl WebAssembly ar wahân, y mae ei bwerau wedi'u gosod mewn perthynas â'r modiwl hwn yn unig (er enghraifft, ni fydd llyfrgell ar gyfer prosesu llinynnau gallu agor soced rhwydwaith neu ffeil). Yn wahanol i wahanu prosesau, mae trinwyr WebCynulliad yn ysgafn ac nid oes angen bron dim adnoddau ychwanegol arnynt - nid yw rhyngweithio rhwng trinwyr yn llawer arafach na galw swyddogaethau cyffredin. Gellir gwahanu nid yn unig ar lefel modiwlau unigol, ond hefyd ar lefel y grwpiau o fodiwlau sydd, er enghraifft, angen gweithio gyda meysydd cof cyffredin.

Gellir pennu'r pwerau y gofynnir amdanynt ar lefel y dibyniaethau eu hunain, a'u dirprwyo i ddibyniaethau ar hyd y gadwyn fesul rhiant fodiwlau (mae adnoddau yn WASI yn gysylltiedig â math arbennig o ddisgrifydd ffeil - gallu). Er enghraifft, gellir dirprwyo'r gallu i fodiwl gael mynediad at gyfeiriadur penodol a galwadau system, ac os yw seilwaith datblygu'r modiwl yn cael ei beryglu neu os nodir bregusrwydd, yn ystod ymosodiad, bydd mynediad yn gyfyngedig i'r adnoddau hyn yn unig. Gall datganiadau adnoddau gan grewyr modiwlau fod yn ddangosydd gweithgaredd amheus, megis pan fydd modiwl prosesu testun yn gofyn am ganiatâd i agor cysylltiad rhwydwaith. Mae'r caniatadau a osodwyd yn wreiddiol yn cael eu gwirio ac os ydynt yn newid, mae'r llwytho dibyniaeth yn cael ei wrthod nes bod llofnod y modiwl lleol yn cael ei ddiweddaru.

Ar gyfer datblygu ar y cyd o dan adain y Gynghrair Bytecode wedi ei gyfieithu roedd sawl un yn ymwneud â WebAssembly prosiectau, a ddatblygwyd yn flaenorol ar wahân gan gwmnïau sefydlu’r gynghrair:

  • Amser Wasm — amser rhedeg ar gyfer rhedeg cymwysiadau WebAssembly gydag estyniadau WASI fel cymwysiadau annibynnol rheolaidd. Mae'n cefnogi lansio beitcode WebCynulliad gan ddefnyddio cyfleustodau llinell orchymyn arbennig a chysylltu ffeiliau gweithredadwy parod (mae amser wasm wedi'i gynnwys yn y rhaglen fel llyfrgell). Mae gan Wasmtime strwythur modiwlaidd hyblyg sy'n eich galluogi i raddfa'r amser rhedeg ar gyfer gwahanol gymwysiadau, er enghraifft, gallwch greu fersiwn wedi'i thynnu i lawr ar gyfer dyfeisiau ag adnoddau cyfyngedig;
  • Lucet — casglwr ac amser rhedeg ar gyfer gweithredu rhaglenni ar fformat WebAssembly. nodedig nodwedd Lucet yw'r defnydd o grynhoad rhagweladwy llawn (AOT, o flaen llaw) yn lle JIT i god peiriant sy'n addas i'w weithredu'n uniongyrchol. Datblygwyd y prosiect gan Fastly ac mae wedi'i optimeiddio i ddefnyddio adnoddau lleiaf posibl a lansio achosion newydd yn gyflym iawn (yn defnyddio Lucet yn gyflym mewn peiriant cyfrifiadurol ymyl cwmwl sy'n defnyddio WebAssembly ar gyfer trinwyr a lansiwyd ar bob cais). Fel rhan o'r prosiect ar y cyd, bwriedir trosi casglwr Lucet i ddefnyddio Wasmtime fel sail;
  • WAM (WebAssembly Micro Runtime) yn amser rhedeg arall ar gyfer gweithredu WebAssembly, a ddatblygwyd yn wreiddiol gan Intel i'w ddefnyddio mewn dyfeisiau Internet of Things. Mae WAMR wedi'i optimeiddio ar gyfer y defnydd lleiaf posibl o adnoddau a gellir ei ddefnyddio ar ddyfeisiau sydd ag ychydig bach o RAM. Mae'r prosiect yn cynnwys dehonglydd a pheiriant rhithwir ar gyfer gweithredu beitcode WebAssembly, API (is-set o Libc) ac offer ar gyfer rheoli cymwysiadau deinamig;
  • lifft craen — generadur cod sy'n trosi cynrychiolaeth ganolraddol sy'n annibynnol ar saernïaeth caledwedd yn god peiriant gweithredadwy wedi'i optimeiddio ar gyfer llwyfannau caledwedd penodol. Mae Cranelift yn cefnogi paraleleiddio llunio swyddogaeth ar gyfer cynhyrchu canlyniadau cyflym iawn, sy'n caniatáu iddo gael ei ddefnyddio i greu casglwyr JIT (defnyddir JIT seiliedig ar Cranelift yn y peiriant rhithwir Wasmtime);
  • WASI cyffredin — gweithredu API WASI (Rhyngwyneb System WebAssembly) ar wahân ar gyfer trefnu rhyngweithio â'r system weithredu;
  • cargo-wasi — modiwl ar gyfer y rheolwr pecyn Cargo sy'n gweithredu gorchymyn ar gyfer llunio cod Rust i god beit WebCynulliad gan ddefnyddio'r rhyngwyneb WASI ar gyfer defnyddio WebAssembly y tu allan i'r porwr;
  • wat и wasmparser — parsers ar gyfer dosrannu testun (WAT, WAST) a chynrychioliadau deuaidd o god beit WebCynulliad.

I grynhoi, mae WebAssembly yn debyg iawn i Asm.js, ond gwahanol yn yr ystyr ei fod yn fformat deuaidd nad yw'n gysylltiedig â JavaScript ac yn caniatáu i god canolradd lefel isel a luniwyd o wahanol ieithoedd rhaglennu gael ei weithredu yn y porwr. Nid oes angen casglwr sbwriel ar WebAssembly oherwydd ei fod yn defnyddio rheolaeth cof benodol. Trwy ddefnyddio JIT ar gyfer WebAssembly, gallwch gyflawni lefelau perfformiad sy'n agos at god brodorol. Ymhlith prif nodau WebAssembly mae sicrhau hygludedd, ymddygiad rhagweladwy a gweithredu cod union yr un fath ar wahanol lwyfannau.

Ffynhonnell: opennet.ru

Ychwanegu sylw