Mozilla, Fastly, Intel na Red Hat hutangaza WebAssembly kama jukwaa la matumizi ya ulimwengu wote

Mozilla, Fastly, Intel na Red Hat umoja juhudi zake katika kutengeneza teknolojia zinazosaidia kufanya WebAssembly kuwa jukwaa la wote kwa ajili ya utekelezaji salama wa msimbo kwenye miundombinu yoyote, mfumo wa uendeshaji, au kifaa. Jumuiya imeundwa kwa ajili ya maendeleo ya pamoja ya wakati wa kukimbia na wakusanyaji ambao huruhusu matumizi ya WebAssembly sio tu katika vivinjari vya wavuti. Muungano wa Bytecode.

Ili kuunda programu zinazobebeka zinazotolewa katika umbizo la WebAssembly ambazo zinaweza kutekelezwa nje ya kivinjari, tunapendekeza kutumia API. WASI (WebAssembly System Interface), ambayo hutoa miingiliano ya programu kwa mwingiliano wa moja kwa moja na mfumo wa uendeshaji (POSIX API ya kufanya kazi na faili, soketi, nk). Kipengele tofauti cha muundo wa utekelezaji wa programu zinazotumia WASI ni kwamba zinaendeshwa katika mazingira ya kisanduku cha mchanga kwa kutengwa na mfumo mkuu na kutumia utaratibu wa usalama kulingana na usimamizi wa uwezo kwa vitendo na kila moja ya rasilimali (faili, saraka, soketi, simu za mfumo. , n.k.) ni lazima maombi yapewe ruhusa zinazofaa (ufikiaji tu wa utendakazi uliotangazwa hutolewa).

Moja ya malengo Muungano ulioundwa ni suluhisho la tatizo la kusambaza maombi ya kisasa ya msimu na idadi kubwa ya utegemezi. Katika programu kama hizi, kila utegemezi unaweza kuwa chanzo cha udhaifu au mashambulizi. Kudhibiti utegemezi hukuruhusu kupata udhibiti wa programu zote zinazohusiana nayo. Kuamini katika programu kunamaanisha kiotomatiki kuamini mambo yote tegemezi, lakini mara nyingi utegemezi huendelezwa na kudumishwa na timu za wahusika wengine ambao shughuli zao haziwezi kudhibitiwa. Wanachama wa Bytecode Alliance wananuia kutoa suluhisho kamili kwa ajili ya utekelezaji salama wa programu za WebAssembly ambazo si za kutegemewa kiasili.

Kwa ulinzi, inapendekezwa kutumia dhana ya nanoprocesses, ambayo kila moduli ya utegemezi imegawanywa katika moduli ya pekee ya WebAssembly, nguvu ambazo zimewekwa kuhusiana na moduli hii tu (kwa mfano, maktaba ya kamba za usindikaji hazitafanyika. kuwa na uwezo wa kufungua tundu la mtandao au faili). Tofauti na utenganisho wa mchakato, vidhibiti vya WebAssembly ni vyepesi na vinahitaji karibu rasilimali za ziada - mwingiliano kati ya vidhibiti sio polepole zaidi kuliko kuita vitendaji vya kawaida. Kutengana kunaweza kufanywa sio tu kwa kiwango cha moduli za kibinafsi, lakini pia katika kiwango cha vikundi vya moduli ambazo, kwa mfano, zinahitaji kufanya kazi na maeneo ya kumbukumbu ya kawaida.

Nguvu zilizoombwa zinaweza kuamuliwa katika kiwango cha utegemezi wenyewe, na kukabidhiwa kwa vitegemezi kwenye mlolongo na moduli za wazazi (rasilimali katika WASI zinahusishwa na aina maalum ya maelezo ya faili - uwezo). Kwa mfano, moduli inaweza kukabidhiwa uwezo wa kufikia saraka na simu mahususi za mfumo, na ikiwa miundombinu ya usanidi wa moduli imeathiriwa au athari inatambuliwa, wakati wa shambulio, ufikiaji utazuiliwa kwa rasilimali hizi pekee. Matangazo ya rasilimali kutoka kwa waundaji wa moduli yanaweza kuwa kiashirio cha shughuli ya kutiliwa shaka, kama vile wakati moduli ya kuchakata maandishi inapoomba ruhusa ya kufungua muunganisho wa mtandao. Ruhusa zilizowekwa awali huangaliwa na zikibadilika, upakiaji wa utegemezi unakataliwa hadi saini ya moduli ya ndani isasishwe.

Kwa maendeleo ya pamoja chini ya mrengo wa Muungano wa Bytecode kutafsiriwa kadhaa zinazohusiana na WebAssembly miradi, iliyotengenezwa hapo awali tofauti na kampuni zilizoanzisha muungano huo:

  • Wakati wa kupumzika β€” muda wa kukimbia wa kuendesha programu za WebAssembly na viendelezi vya WASI kama programu za kawaida za kusimama pekee. Inasaidia kuzindua bytecode ya WebAssembly kwa kutumia matumizi maalum ya mstari wa amri na kuunganisha faili zilizotengenezwa tayari kutekelezwa (wasmtime imejengwa ndani ya programu kama maktaba). Wasmtime ina muundo wa msimu unaobadilika ambao hukuruhusu kuongeza muda wa matumizi kwa programu anuwai, kwa mfano, unaweza kuunda toleo lililoondolewa kwa vifaa vilivyo na rasilimali ndogo;
  • Lucet β€” mkusanyaji na muda wa utekelezaji wa programu katika umbizo la WebAssembly. Tofauti kipengele Lucet ni matumizi ya mkusanyiko kamili wa matarajio (AOT, kabla ya wakati) badala ya JIT katika msimbo wa mashine unaofaa kwa utekelezaji wa moja kwa moja. Mradi uliundwa na Fastly na umeboreshwa kutumia rasilimali ndogo na kuzindua hali mpya haraka sana (Haraka hutumia Lucet katika injini ya kompyuta ya ukingo wa wingu ambayo hutumia WebAssembly kwa vidhibiti vilivyozinduliwa kwa kila ombi). Kama sehemu ya mradi wa pamoja, mkusanyaji wa Lucet amepangwa kubadilishwa ili kutumia Wasmtime kama msingi;
  • WAMR (WebAssembly Micro Runtime) ni muda mwingine wa utekelezaji wa WebAssembly, uliotayarishwa awali na Intel kwa matumizi katika vifaa vya Internet of Things. WAMR imeboreshwa kwa matumizi madogo ya rasilimali na inaweza kutumika kwenye vifaa vilivyo na kiasi kidogo cha RAM. Mradi huu unajumuisha mkalimani na mashine pepe ya kutekeleza WebAssembly bytecode, API (seti ndogo ya Libc) na zana za usimamizi thabiti wa programu;
  • kuinua crane - jenereta ya msimbo ambayo hutafsiri uwakilishi wa kati usiotegemea usanifu wa maunzi kuwa msimbo wa mashine unaoweza kutekelezeka ulioboreshwa kwa majukwaa mahususi ya maunzi. Cranelift inasaidia ulinganifu wa utungaji wa kazi kwa ajili ya uzalishaji wa matokeo ya haraka sana, ambayo inaruhusu itumike kuunda vikusanyaji vya JIT (JIT inayotokana na Cranelift inatumika katika mashine ya kawaida ya Wasmtime);
  • WASI kawaida - utekelezaji tofauti wa WASI (WebAssembly System Interface) API kwa ajili ya kuandaa mwingiliano na mfumo wa uendeshaji;
  • mizigo-wasi β€” moduli ya msimamizi wa kifurushi cha Cargo inayotekeleza amri ya kutunga msimbo wa kutu kwenye WebAssembly bytecode kwa kutumia kiolesura cha WASI kwa kutumia WebAssembly nje ya kivinjari;
  • wat ΠΈ wasmparser β€” vichanganuzi vya kuchanganua maandishi (WAT, WAST) na uwakilishi wa binary wa WebAssembly bytecode.

Ili kurejea, WebAssembly ni kama Asm.js, lakini mbalimbali kwa kuwa ni umbizo la binary ambalo halijaunganishwa na JavaScript na inaruhusu msimbo wa kati wa kiwango cha chini uliokusanywa kutoka kwa lugha mbalimbali za programu kutekelezwa kwenye kivinjari. WebAssembly haihitaji mtoza takataka kwa sababu hutumia usimamizi wa kumbukumbu wazi. Kwa kutumia JIT kwa WebAssembly, unaweza kufikia viwango vya utendaji karibu na msimbo asili. Miongoni mwa malengo makuu ya WebAssembly ni kuhakikisha uwezo wa kubebeka, tabia inayoweza kutabirika na utekelezaji sawa wa kanuni kwenye majukwaa tofauti.

Chanzo: opennet.ru

Kuongeza maoni