ሞዚላ፣ ፈጣኑ፣ ኢንቴል እና ቀይ ኮፍያ WebAssemblyን እንደ ሁለንተናዊ አጠቃቀም መድረክ ያስተዋውቃሉ

ሞዚላ፣ ፈጣን፣ ኢንቴል እና ቀይ ኮፍያ የተባበረ በማናቸውም መሠረተ ልማት፣ ኦፕሬቲንግ ሲስተም ወይም መሣሪያ ላይ WebAssemblyን ደህንነቱ የተጠበቀ ኮድ ማስፈጸሚያ ሁለንተናዊ መድረክ ለማድረግ የሚያግዙ ቴክኖሎጂዎችን በማዳበር ረገድ የሚያደርገው ጥረት። በድር አሳሾች ላይ ብቻ ሳይሆን WebAssemblyን መጠቀም የሚፈቅዱ የሩጫ ጊዜ እና ማጠናከሪያዎችን በጋራ ለማልማት ማህበረሰብ ተፈጥሯል ባይትኮድ አሊያንስ.

በ WebAssembly ቅርጸት የሚቀርቡ ተንቀሳቃሽ ፕሮግራሞችን ለመፍጠር ከአሳሹ ውጭ ሊከናወኑ የሚችሉትን ኤፒአይ እንዲጠቀሙ እንመክራለን እኔ ነበርሁ (WebAssembly System Interface)፣ ከስርዓተ ክወናው ጋር ቀጥታ መስተጋብር ለመፍጠር የሶፍትዌር በይነገጾችን የሚያቀርብ (POSIX API ከፋይሎች፣ ሶኬቶች፣ ወዘተ ጋር ለመስራት)። WASI ን በመጠቀም የመተግበሪያዎች አፈፃፀም ሞዴል ልዩ ባህሪ ከዋናው ስርዓት ለመነጠል በአሸዋ ሳጥን ውስጥ መሮጣቸው እና ከእያንዳንዱ ሀብቶች (ፋይሎች ፣ ማውጫዎች ፣ ሶኬቶች ፣ የስርዓት ጥሪዎች) ጋር ለሚደረጉ እርምጃዎች በችሎታ አስተዳደር ላይ የተመሠረተ የደህንነት ዘዴን መጠቀማቸው ነው ። ወዘተ.) አፕሊኬሽኑ ተገቢውን ፍቃዶች መሰጠት አለበት (የታወጀውን ተግባር መዳረሻ ብቻ ነው የሚቀርበው)።

አንደኛው ግቦች የተፈጠረው ጥምረት ዘመናዊ ሞጁል አፕሊኬሽኖችን ከብዙ ጥገኞች ጋር ለማሰራጨት ለችግሩ መፍትሄ ነው። በእንደዚህ አይነት አፕሊኬሽኖች ውስጥ፣ እያንዳንዱ ጥገኝነት የተጋላጭነት ወይም የጥቃቶች ምንጭ ሊሆን ይችላል። ጥገኝነትን መቆጣጠር ከሱ ጋር የተያያዙ ሁሉንም መተግበሪያዎች እንዲቆጣጠሩ ያስችልዎታል. በመተግበሪያው ላይ መተማመን በራስ-ሰር በሁሉም ጥገኞች ላይ መተማመንን ያሳያል፣ ነገር ግን ጥገኞች ብዙውን ጊዜ የሚዘጋጁት እና ተግባራቶቻቸውን መቆጣጠር በማይችሉ የሶስተኛ ወገን ቡድኖች ነው። የባይቴኮድ አሊያንስ አባላት በተፈጥሯቸው ታማኝ ያልሆኑ የWebAssembly አፕሊኬሽኖችን ደህንነቱ በተጠበቀ ሁኔታ ለማስፈጸም ሁለንተናዊ መፍትሄ ለመስጠት አስበዋል::

ጥበቃ ለማግኘት, እያንዳንዱ ጥገኛ ሞጁል የተለየ WebAssembly ሞጁል ወደ የተለየ ገለልተኛ WebAssembly ሞጁል ውስጥ ናኖፕሮሰሶች, ጽንሰ-ሐሳብ ለመጠቀም ሐሳብ ነው, ኃይሎቹ ከዚህ ሞጁል ጋር ብቻ የተቀመጡ ናቸው (ለምሳሌ, ሕብረቁምፊዎችን ለማቀናበር ቤተ-መጽሐፍት አይሆንም. የአውታረ መረብ ሶኬት ወይም ፋይል መክፈት መቻል)። ከሂደቱ መለያየት በተለየ የዌብአሴምብሊ ተቆጣጣሪዎች ክብደታቸው ቀላል እና ምንም ተጨማሪ ግብአት አያስፈልጋቸውም - በተቆጣጣሪዎች መካከል ያለው መስተጋብር ተራ ተግባራትን ከመጥራት ብዙም ቀርፋፋ አይደለም። መለያየት በግለሰብ ሞጁሎች ደረጃ ብቻ ሳይሆን በቡድኖች ደረጃም ሊሠራ ይችላል, ለምሳሌ, ከተለመዱት የማስታወሻ ቦታዎች ጋር አብሮ መስራት ያስፈልገዋል.

የተጠየቁት ስልጣኖች በእራሳቸው ጥገኞች ደረጃ እና በሰንሰለቱ ላይ ላሉ ጥገኞች በወላጅ ሞጁሎች ሊሰጡ ይችላሉ (በWASI ውስጥ ያሉ ሀብቶች ከተለየ የፋይል ገላጭ - አቅም ጋር የተቆራኙ ናቸው)። ለምሳሌ, አንድ ሞጁል የተወሰነ ማውጫ እና የስርዓት ጥሪዎችን የመድረስ ችሎታ ሊሰጥ ይችላል, እና የሞጁሉ የልማት መሠረተ ልማት ከተጣሰ ወይም የተጋላጭነት ሁኔታ ከታወቀ, በጥቃቱ ወቅት, መዳረሻ በእነዚህ ሀብቶች ላይ ብቻ የተገደበ ይሆናል. የሞጁል ፈጣሪዎች የግብዓት መግለጫዎች አጠራጣሪ እንቅስቃሴዎችን አመላካች ሊሆኑ ይችላሉ፣ ለምሳሌ የጽሑፍ ማቀናበሪያ ሞጁል የአውታረ መረብ ግንኙነት ለመክፈት ፈቃድ ሲጠይቅ። መጀመሪያ ላይ የተቀመጡት ፈቃዶች ተረጋግጠዋል እና ከተቀየሩ የአካባቢያዊ ሞጁል ፊርማ እስኪዘመን ድረስ የጥገኛ ጭነት ውድቅ ይሆናል።

በባይቴኮድ አሊያንስ ክንፍ ስር ለጋራ ልማት ተተርጉሟል ከ WebAssembly ጋር የተያያዙ ብዙ ፕሮጀክቶችቀደም ሲል በህብረቱ መስራች ኩባንያዎች ተለይቷል፡-

  • ጊዜ ማሳለፊያ - የዌብአሴምብሊ አፕሊኬሽኖችን ከWASI ማራዘሚያዎች ጋር እንደ መደበኛ ለብቻ የሚንቀሳቀሱ አፕሊኬሽኖች ለማሄድ የሩጫ ጊዜ። ልዩ የትዕዛዝ መስመር መገልገያ በመጠቀም WebAssembly bytecode ን ማስጀመር እና ዝግጁ የሆኑ ፈጻሚ ፋይሎችን ማገናኘት ይደግፋል (wasmtime በመተግበሪያው ውስጥ እንደ ቤተ-መጽሐፍት የተሰራ ነው)። Wasmtime ለተለያዩ አፕሊኬሽኖች የሩጫ ጊዜን ለመለካት የሚያስችል ተለዋዋጭ ሞጁል መዋቅር አለው ፣ለምሳሌ ፣ ውስን ሀብቶች ላላቸው መሳሪያዎች የተራቆተ ስሪት መፍጠር ይችላሉ ፣
  • ሉሴት - ፕሮግራሞችን በ WebAssembly ቅርጸት ለማስኬድ ማጠናከሪያ እና የሩጫ ጊዜ። የተለየ ባህሪ ሉሴት ለቀጥታ ማስፈጸሚያ ተስማሚ በሆነ የማሽን ኮድ ከጂአይቲ ይልቅ ሙሉ በሙሉ የሚጠበቅ ማጠናቀር (AOT፣ ከጊዜ በፊት) መጠቀም ነው። ኘሮጀክቱ የተገነባው በFastly ነው እና አነስተኛ ሀብቶችን ለመጠቀም እና አዳዲስ አጋጣሚዎችን በፍጥነት ለማስጀመር የተመቻቸ ነው (በእያንዳንዱ ጥያቄ ለሚከፈቱ ተቆጣጣሪዎች WebAssembly የሚጠቀም ሉሴትን በደመና ጠርዝ ኮምፒውቲንግ ሞተር በፍጥነት ይጠቀማል)። እንደ የጋራ ፕሮጀክቱ አካል, የሉሴት ማቀናበሪያው Wasmtimeን እንደ መሰረት አድርጎ ለመጠቀም ለመቀየር ታቅዷል;
  • ዋምአር (WebAssembly ማይክሮ Runtime) WebAssemblyን ለማስኬድ ሌላ የሩጫ ጊዜ ሲሆን በመጀመሪያ በኢንቴል የተሰራው በበይነ መረብ መሳሪያዎች ላይ ነው። WAMR ለዝቅተኛ የሀብት ፍጆታ የተመቻቸ ነው እና አነስተኛ መጠን ያለው ራም ባላቸው መሳሪያዎች ላይ ሊያገለግል ይችላል። ፕሮጀክቱ WebAssembly ባይትኮድ፣ ኤፒአይ (የLibc ንዑስ ስብስብ) እና ለተለዋዋጭ የመተግበሪያ አስተዳደር መሣሪያዎችን ለማስፈጸም አስተርጓሚ እና ቨርቹዋል ማሽንን ያካትታል።
  • ክራንላይፍት - ከሃርድዌር አርክቴክቸር ነፃ የሆነ መካከለኛ ውክልና ለተወሰኑ የሃርድዌር መድረኮች የተመቻቸ ወደ ተፈፃሚው የማሽን ኮድ የሚተረጎም ኮድ ጄኔሬተር። Cranelift በጣም ፈጣን ውጤትን ለመፍጠር የተግባር ማጠናቀርን ትይዩ ይደግፋል ፣ ይህም የጂአይቲ ማቀነባበሪያዎችን ለመፍጠር ያስችላል (Cranelift-based JIT በ Wasmtime ምናባዊ ማሽን ውስጥ ጥቅም ላይ ይውላል);
  • WASI የተለመደ - ከስርዓተ ክወናው ጋር መስተጋብርን ለማደራጀት የWASI (የድር ስብሰባ ስርዓት በይነገጽ) የተለየ አተገባበር;
  • ጭነት-ዋሲ - ከአሳሹ ውጭ WebAssemblyን ለመጠቀም WASI በይነገጽን በመጠቀም የ Rust ኮድን ወደ WebAssembly ባይትኮድ ለማጠናቀር ትእዛዝን የሚያስፈጽም የካርጎ ጥቅል አስተዳዳሪ ሞጁል;
  • ግድም и ቫምፓርሰር - ጽሑፍን ለመተንተን (WAT፣ WAST) እና የWebAssembly ባይትኮድ ሁለትዮሽ ተወካዮች።

እንደገና ለማጠቃለል፣ WebAssembly ልክ እንደ Asm.js ነው፣ነገር ግን ልዩነት ከጃቫ ስክሪፕት ጋር ያልተገናኘ እና ከተለያዩ የፕሮግራም አወጣጥ ቋንቋዎች የተቀናበረ ዝቅተኛ-ደረጃ መካከለኛ ኮድ በአሳሹ ውስጥ እንዲተገበር የሚያስችል ሁለትዮሽ ቅርጸት ነው። WebAssembly ግልጽ የማህደረ ትውስታ አስተዳደር ስለሚጠቀም ቆሻሻ ሰብሳቢ አያስፈልገውም። JIT ለ WebAssembly በመጠቀም፣ ወደ ቤተኛ ኮድ ቅርብ የአፈጻጸም ደረጃዎችን ማሳካት ትችላለህ። ከWebAssembly ዋና ግቦች መካከል ተንቀሳቃሽነት፣ ሊተነበይ የሚችል ባህሪ እና በተለያዩ መድረኮች ላይ ተመሳሳይ ኮድ አፈፃፀም ማረጋገጥ ነው።

ምንጭ: opennet.ru

አስተያየት ያክሉ