Mozilla, Fastly, Intel болон Red Hat нь WebAssembly-ийг бүх нийтийн хэрэглээний платформ болгон сурталчилж байна

Mozilla, Fastly, Intel болон Red Hat нэгдсэн WebAssembly-ийг ямар ч дэд бүтэц, үйлдлийн систем эсвэл төхөөрөмж дээр аюулгүй код гүйцэтгэх бүх нийтийн платформ болгоход туслах технологийг хөгжүүлэхэд түүний хүчин чармайлт. WebAssembly-ийг зөвхөн вэб хөтчүүдэд ашиглах боломжийг олгодог ажиллах цаг болон хөрвүүлэгчийг хамтран хөгжүүлэх нийгэмлэг байгуулагдсан. Байткодын холбоо.

Хөтөчөөс гадуур ажиллах боломжтой WebAssembly форматаар зөөврийн програмуудыг үүсгэхийн тулд бид API ашиглахыг санал болгож байна. WASI (WebAssembly System Interface) нь үйлдлийн системтэй шууд харьцах програм хангамжийн интерфейсээр хангадаг (файл, залгуур гэх мэт POSIX API). WASI-г ашигладаг програмуудын гүйцэтгэлийн загварын нэг онцлог шинж чанар нь тэдгээр нь үндсэн системээс тусгаарлагдах зорилгоор хамгаалагдсан хязгаарлагдмал орчинд ажилладаг бөгөөд нөөц (файл, лавлах, залгуур, системийн дуудлагууд) тус бүртэй хийх үйлдлийн чадамжийн удирдлагад суурилсан хамгаалалтын механизмыг ашигладаг явдал юм. , гэх мэт) програмд ​​зохих зөвшөөрлийг өгөх ёстой (зөвхөн зарласан функцэд хандах боломжтой).

Нэг нь зорилго Үүсгэсэн холбоо нь олон тооны хамааралтай орчин үеийн модульчлагдсан програмуудыг түгээх асуудлыг шийдэх шийдэл юм. Ийм программуудад хамаарал бүр нь эмзэг байдал эсвэл халдлагын эх үүсвэр байж болно. Хамааралтай байдлыг хянах нь үүнтэй холбоотой бүх програмыг хянах боломжийг танд олгоно. Аппликешнд итгэх нь бүх хамааралд автоматаар итгэхийг илэрхийлдэг боловч хараат байдлыг ихэвчлэн үйл ажиллагааг нь хянах боломжгүй гуравдагч талын багууд хөгжүүлж, хадгалдаг. Bytecode Alliance-ын гишүүд угаасаа найдвартай биш WebAssembly програмуудыг аюулгүй ажиллуулах цогц шийдлээр хангахыг зорьж байна.

Хамгаалалтын хувьд хараат байдлын модуль бүрийг тусад нь тусгаарлагдсан WebAssembly модулид хуваасан нано процессын тухай ойлголтыг ашиглахыг санал болгож байна, тэдгээрийн хүчийг зөвхөн энэ модультай холбон тохируулдаг (жишээлбэл, мөр боловсруулах номын сан байхгүй болно). сүлжээний залгуур эсвэл файл нээх боломжтой байх). Процесс тусгаарлалтаас ялгаатай нь WebAssembly зохицуулагч нь хөнгөн бөгөөд нэмэлт нөөц бараг шаарддаггүй - зохицуулагчид хоорондын харилцан үйлчлэл нь энгийн функцуудыг дуудахаас хамаагүй удаан биш юм. Тусгаарлах ажлыг зөвхөн бие даасан модулиудын түвшинд төдийгүй, жишээлбэл, нийтлэг санах ойтой ажиллах шаардлагатай модулиудын бүлгүүдийн түвшинд хийж болно.

Хүссэн эрх мэдлийг хараат байдлын түвшний аль алинд нь тодорхойлж, эх модулиудаар гинжин хэлхээний дагуу хамаарал руу шилжүүлж болно (WASI дахь нөөцүүд нь тусгай төрлийн файлын тодорхойлогчтой холбоотой байдаг - чадвар). Жишээлбэл, модуль нь тодорхой лавлах болон системийн дуудлагад хандах эрхийг шилжүүлж болох бөгөөд хэрэв модулийн хөгжүүлэлтийн дэд бүтэц эвдэрсэн эсвэл эмзэг байдал илэрсэн бол халдлагын үед хандалт нь зөвхөн эдгээр нөөцөөр хязгаарлагдах болно. Модуль бүтээгчдийн нөөцийн мэдэгдлүүд нь текст боловсруулах модуль сүлжээний холболт нээх зөвшөөрөл хүсэх зэрэг сэжигтэй үйл ажиллагааны үзүүлэлт байж болно. Анх тохируулсан зөвшөөрлүүдийг шалгаж, хэрэв өөрчлөгдвөл локал модулийн гарын үсгийг шинэчлэх хүртэл хамаарлын ачааллаас татгалздаг.

Bytecode Alliance-ийн жигүүрийн дор хамтарсан хөгжлийн төлөө орчуулсан WebAssembly-тай холбоотой хэд хэдэн төслүүд, өмнө нь тус холбоог үүсгэн байгуулагч компаниуд тусад нь боловсруулсан:

  • Өвлийн цаг — WASI өргөтгөлтэй WebAssembly програмуудыг ердийн бие даасан програм болгон ажиллуулах ажлын цаг. Энэ нь тусгай командын мөрийн хэрэглүүрийг ашиглан WebAssembly байт кодыг эхлүүлэх болон бэлэн гүйцэтгэгдэх файлуудыг холбохыг хоёуланг нь дэмждэг (wasmtime программд номын сан болгон суулгасан). Wasmtime нь уян хатан модульчлагдсан бүтэцтэй бөгөөд энэ нь танд янз бүрийн програмуудын ажиллах хугацааг нэмэгдүүлэх боломжийг олгодог, жишээлбэл, хязгаарлагдмал нөөцтэй төхөөрөмжүүдийн хувьд хасагдсан хувилбарыг үүсгэж болно;
  • Лусет — WebAssembly форматаар программуудыг гүйцэтгэх хөрвүүлэгч болон ажиллах хугацаа. Онцлог онцлог Lucet бол шууд гүйцэтгэхэд тохиромжтой машины код болгон JIT-ийн оронд бүрэн хэмжээний урьдчилан таамаглах эмхэтгэлийг (AOT, цаг хугацааны өмнө) ашиглах явдал юм. Төслийг Fastly боловсруулсан бөгөөд хамгийн бага нөөцийг зарцуулж, шинэ инстанцуудыг маш хурдан эхлүүлэхээр оновчтой болгосон (Хүсэлт бүрт эхлүүлсэн зохицуулагчдад зориулсан WebAssembly ашигладаг үүлэн захын тооцооллын системд Lucet-ийг хурдан ашигладаг). Хамтарсан төслийн хүрээнд Lucet хөрвүүлэгчийг Wasmtime-г үндэс болгон хөрвүүлэхээр төлөвлөж байна;
  • WAM (WebAssembly Micro Runtime) нь WebAssembly-г гүйцэтгэх өөр нэг ажиллах цаг бөгөөд анх Intel-аас Интернетийн зүйлсийн төхөөрөмжид ашиглахаар бүтээжээ. WAMR нь нөөцийн хамгийн бага зарцуулалтад тохируулагдсан бөгөөд бага хэмжээний RAM-тай төхөөрөмжүүдэд ашиглах боломжтой. Төсөл нь WebAssembly байт кодыг гүйцэтгэх орчуулагч болон виртуал машин, API (Libc-ийн дэд хэсэг) болон динамик хэрэглээний менежментийн хэрэгслүүдийг агуулдаг;
  • Кран өргөгч — техник хангамжийн архитектураас хамааралгүй завсрын дүрслэлийг тодорхой техник хангамжийн платформд оновчтой болгосон гүйцэтгэгдэх машины код болгон хөрвүүлдэг код үүсгэгч. Cranelift нь үр дүнг маш хурдан гаргахын тулд функцын эмхэтгэлийг параллель болгохыг дэмждэг бөгөөд энэ нь JIT хөрвүүлэгчийг үүсгэхэд ашиглах боломжийг олгодог (Cranelift дээр суурилсан JIT нь Wasmtime виртуал машинд ашиглагддаг);
  • WASI нийтлэг - үйлдлийн системтэй харилцах ажлыг зохион байгуулах WASI (WebAssembly System Interface) API-ийн тусдаа хэрэгжилт;
  • ачаа-васи — WebAssembly-г хөтчөөс гадуур ашиглах WASI интерфейсийг ашиглан WebAssembly байт код руу Rust кодыг эмхэтгэх командыг хэрэгжүүлдэг Cargo багц менежерийн модуль;
  • Ус и байсан — WebAssembly байт кодын текст (WAT, WAST) болон хоёртын дүрслэлийг задлан шинжлэхэд зориулсан задлагч.

Товчхондоо, WebAssembly нь Asm.js-тэй төстэй боловч ялгаатай байна Энэ нь JavaScript-тэй холбогдоогүй хоёртын формат бөгөөд янз бүрийн програмчлалын хэлнээс эмхэтгэсэн доод түвшний дунд кодыг хөтөч дээр ажиллуулах боломжийг олгодог. WebAssembly нь тодорхой санах ойн менежментийг ашигладаг тул хог цуглуулагч шаарддаггүй. WebAssembly-д зориулсан JIT-г ашигласнаар та үндсэн кодтой ойролцоо гүйцэтгэлийн түвшинд хүрч чадна. WebAssembly-ийн гол зорилго бол өөр өөр платформ дээр зөөврийн байдал, урьдчилан таамаглахуйц зан төлөв, ижил кодыг гүйцэтгэх явдал юм.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх