çç±ïŒ WASMã¯ãã¹ãŠã®ãã·ã³ã§åãã³ãŒããå®è¡ããããã®é«éã§ã¹ã±ãŒã©ãã«ã§å®å šãªæ¹æ³ãæäŸãããããéçºè ã¯WebAssemblyããã©ãŠã¶ãŒã®å€éšã§äœ¿çšãå§ããŸããã ãããããã®ãããªéçºã®ããã®åŒ·åºãªåºç€ã¯ãŸã ãããŸããã ãã©ãŠã¶ã®å€éšã§ã¯ãã·ã¹ãã ãã€ãŸãã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ãšéä¿¡ããããã®äœããã®æ¹æ³ãå¿ èŠã§ãã ããããWebAssemblyãã©ãããã©ãŒã ã«ã¯ãŸã ãããŸããã
å å®¹ïŒ WebAssemblyã¯ãç©çãã·ã³ã§ã¯ãªãæŠå¿µãã·ã³ã®ã¢ã»ã³ãã©ãŒã§ãã ããŸããŸãªã¢ãŒããã¯ãã£ã§åäœãããããæŠå¿µOSãç°ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§åäœããã«ã¯ã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ãå¿ èŠã§ãã
ãããWASIã§ããWebAssemblyãã©ãããã©ãŒã ã®ã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
ç§ãã¡ã¯ãæ倧éã®ç§»æ€æ§ãšã»ãã¥ãªãã£ãåããWebAssemblyã®çã®ä»²éãšãªãã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ã®äœæã«åªããŠããŸãã
WhoïŒ WebAssemblyéçºããŒã ã®äžéšãšããŠã WASIãæšæºåããããã«ãµãã°ã«ãŒããç·šæããŸãã ã ç§ãã¡ã¯ãã§ã«èå³ã®ããããŒãããŒãéããŠãããæ°ããããŒãããŒãæ¢ããŠããŸãã
ç§ãã¡ãããŒãããŒããµããŒã¿ãŒããããéèŠãšèããçç±ã¯æ¬¡ã®ãšããã§ãã
Mozilla RïŒDãã£ã¬ã¯ã¿ãŒãSean WhiteïŒ
ãWebAssemblyã¯ã人ã ãæ°ããã¿ã€ãã®é åçãªã³ã³ãã³ããé ä¿¡ããæ¹æ³ããã§ã«å€ããŠããŸããããã¯ãã³ã³ãã³ãéçºè ãšã¯ãªãšã€ã¿ãŒãæ¯æŽããŸãã ãããŸã§ããã¹ãŠããã©ãŠã¶ãŒãä»ããŠæ©èœããŠããŸããããWASIã䜿çšãããšãããŸããŸãªå Žæã§ããå€ãã®ãŠãŒã¶ãŒãšããã€ã¹ãWebAssemblyã®æ©æµãåããããšã«ãªããŸãã
ã¿ã€ã©ãŒã»ãã¯ãã¬ã³ãCTO FastlyïŒ
ãWebAssemblyã¯ããšããžã¯ã©ãŠãã§ã³ãŒããè¿ éãã€å®å šã«å®è¡ããããã®ãã©ãããã©ãŒã ã§ãããšèããŠããŸãã ç°ãªãç°å¢ïŒãšããžãšãã©ãŠã¶ãŒïŒã«ãããããããWASIã®ãããã§ãåãã©ãããã©ãŒã ã«ã³ãŒãã移æ€ããå¿ èŠã¯ãããŸããã
ãã€ã«ãºããªã³ãºãããŒãéå¶å§å¡äŒã®CTOïŒ
ãWebAssemblyã¯ã移æ€æ§ãšã»ãã¥ãªãã£ãç¶æããªããããã€ãã£ãã«è¿ãé床ãå®çŸããCãC ++ãªã©ã®ä»ã®èšèªã§èšè¿°ãããã³ãŒããåå©çšãããšããNodeã®æ倧ã®åé¡ã®1ã€ã解決ã§ããŸãã WASIæšæºåã¯ãããã«åããæåã®ã¹ãããã§ããã
noriã®å ±åèšç«è ãããªã»ãŽã©ã¹ïŒ
ãNpmã¯ããã€ãã£ãã³ãŒãããµãŒããŒåŽã®JavaScriptã¢ããªã±ãŒã·ã§ã³ã§å®è¡ããã®ãã¯ããã«ç°¡åã«ãªããããnpmãšã³ã·ã¹ãã ã®WebAssemblyã®å¯èœæ§ã«éåžžã«è奮ããŠããŸãã ãã®ããã»ã¹ã®çµæã楜ãã¿ã«ããŠããŸããã
ããã¯å€§ããªã€ãã³ãã§ãïŒ
çŸåšã3ã€ã®WASIå®è£ ããããŸãã
- wasmtime ãMozilla WebAssemblyã©ã³ã¿ã€ã
- Lucet ãFastly WebAssemblyã©ã³ã¿ã€ã
- ããªãã£ã«ãã©ãŠã¶ãŒ
å®éã®WASIãã¢ã³ã¹ãã¬ãŒã·ã§ã³ïŒ
次ã«ããã®ã·ã¹ãã ã€ã³ã¿ãŒãã§ãŒã¹ã®åäœæ¹æ³ã«é¢ããMozillaã®ææ¡ã«ã€ããŠèª¬æããŸãã
ã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ãšã¯äœã§ããïŒ
Cã®ãããªèšèªã¯ãã·ã¹ãã ãªãœãŒã¹ãžã®çŽæ¥ã¢ã¯ã»ã¹ãæäŸãããšèšããŸãã ããããããã¯å®å šã«çå®ã§ã¯ãããŸããã ã»ãšãã©ã®ã·ã¹ãã ã§ã¯ããããã®èšèªã¯ãã¡ã€ã«ãéãããäœæãããããããšãªã©ã«ã¯çŽæ¥ã¢ã¯ã»ã¹ã§ããŸããã ã©ãããŠïŒ
ãããã®ã·ã¹ãã ãªãœãŒã¹ïŒãã¡ã€ã«ãã¡ã¢ãªããããã¯ãŒã¯æ¥ç¶ïŒã¯ãå®å®æ§ãšã»ãã¥ãªãã£ã«ãšã£ãŠéèŠãããããã§ãã
ããããã°ã©ã ãå¥ã®ããã°ã©ã ã®ãªãœãŒã¹ã誀ã£ãŠç Žå£ãããšãã¯ã©ãã·ã¥ãåŒãèµ·ããå¯èœæ§ããããŸãã ããã«æªãããšã«ãããã°ã©ã ïŒãŸãã¯ãŠãŒã¶ãŒïŒãä»ã®äººã®ãªãœãŒã¹ã«ç¹ã«äŸµå ¥ããå Žåãæ©å¯ããŒã¿ãçãå¯èœæ§ããããŸãã

ãããã£ãŠããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããããã°ã©ã ãšãŠãŒã¶ãŒãå¶åŸ¡ããæ¹æ³ãå¿ èŠã§ãã é·ãéãã·ã¹ãã éçºè ã¯ãã®ãããªå¶åŸ¡ãæäŸããæ¹æ³ãèæ¡ããŸããïŒä¿è·ãªã³ã°ã
ä¿è·ãªã³ã°ã䜿çšãããšãOSã¯åºæ¬çã«ã·ã¹ãã ãªãœãŒã¹ã®åšãã«ä¿è·ããªã¢ãèšå®ããŸãã ãããã³ã¢ã§ãã ãã¡ã€ã«ã®äœæããã¡ã€ã«ã®ãªãŒãã³ããããã¯ãŒã¯æ¥ç¶ã®ãªãŒãã³ãªã©ã®æäœãå®è¡ã§ããã®ã¯ãããã ãã§ãã
ãŠãŒã¶ãŒããã°ã©ã ã¯ããŠãŒã¶ãŒç©ºéãšåŒã°ããã«ãŒãã«å ã§å®è¡ãããŸãã ããã°ã©ã ããã¡ã€ã«ãéãããå Žåã¯ãã«ãŒãã«ãèŠæ±ããå¿ èŠããããŸãã

ããã¯ãã·ã¹ãã ã³ãŒã«ã®æŠå¿µãçããå Žæã§ãã ããã°ã©ã ãã«ãŒãã«ã«äœããã®æäœãèŠæ±ããå¿ èŠãããå Žåãã·ã¹ãã ã³ãŒã«ãéä¿¡ããŸãã ã«ãŒãã«ã¯æ¥ç¶ããŠãããŠãŒã¶ãŒããã§ãã¯ãããã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããèš±å¯ããããã©ããã確èªããŸãã
ã»ãšãã©ã®ããã€ã¹ã§ã¯ãã·ã¹ãã ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããå¯äžã®æ¹æ³ã¯ã·ã¹ãã ã³ãŒã«ã䜿çšããããšã§ãã

ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãã·ã¹ãã ã³ãŒã«ãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã ããããåOSã«ç¬èªã®ã·ã¹ãã ã³ãŒã«ãããå Žåãç°ãªãããŒãžã§ã³ã®ã³ãŒããèšè¿°ããå¿ èŠã¯ãããŸãããïŒ å¹žããªããšã«ããã§ã¯ãããŸããã ãã®åé¡ã¯ãæœè±¡åã䜿çšããŠè§£æ±ºãããŸãã
ã»ãšãã©ã®èšèªã«ã¯æšæºã©ã€ãã©ãªããããŸãã ã³ãŒãã£ã³ã°ã®éãããã°ã©ãã¯èªåãã©ã®ã·ã¹ãã çšã«æžããŠããããç¥ãå¿ èŠã¯ãããŸããã ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããã ãã§ãã 次ã«ãã³ã³ãã€ã«æã«ãããŒã«ãã§ãŒã³ã¯ãã©ã®ã·ã¹ãã ã«ã©ã®ã€ã³ã¿ãŒãã§ã€ã¹å®è£ ã䜿çšããããéžæããŸãã ãã®å®è£ ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®APIã®é¢æ°ã䜿çšãããããåºæã§ãã
ããã¯ãã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ã®æŠå¿µãçŸããå Žæã§ãã ããšãã°ãWindowsãã·ã³çšã«
printf
ãã³ã³ãã€ã«ãããšãWindows APIã䜿çšãããŸãã MacãŸãã¯Linuxçšã«ã³ã³ãã€ã«ãããŠããå ŽåãPOSIXã䜿çšããŸãã

ãã ããããã¯WebAssemblyã«åé¡ãåŒãèµ·ãããŸãã ããã§ã¯ãã³ã³ãã€ã«äžã§ãããã°ã©ã ãæé©åããOSãããããŸããã ãããã£ãŠãWebAssemblyã®æšæºã©ã€ãã©ãªã®å®è£ å ã§ã1ã€ã®OSã®ã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããããšã¯ã§ããŸããã

WebAssemblyã¯ãå®éã®ãã·ã³ã§ã¯ãªãã æŠå¿µçãªãã·ã³ã®ã¢ã»ã³ãã©ãŒã§ãããšæ¢ã«è¿°ã¹ãŸãã ã åæ§ã«ãWebAssemblyã«ã¯ãå®éã®OSã§ã¯ãªãæŠå¿µã®ããã®ã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ãå¿ èŠã§ãã
ãã ãããã®ã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ããªããŠãããã©ãŠã¶ãŒã®å€éšã§WebAssemblyãå®è¡ã§ããã©ã³ã¿ã€ã ãæ¢ã«ãããŸãã 圌ãã¯ã©ããã£ãŠãããããŸããïŒ èŠãŠã¿ãŸãããã
WebAssemblyã¯ãã©ãŠã¶å€ã§ã©ã®ããã«åäœããŸããïŒ
WebAssemblyã³ãŒããçæããæåã®ããŒã«ã¯Emscriptenã§ããã ç¹å®ã®OSã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ã§ããPOSIXãWebäžã§ãšãã¥ã¬ãŒãããŸãã ããã¯ãããã°ã©ããæšæºCã©ã€ãã©ãªïŒlibcïŒã®é¢æ°ã䜿çšã§ããããšãæå³ããŸãã
ãã®ãããEmscriptenã¯ç¬èªã®libcå®è£ ã䜿çšããŸãã ããã¯2ã€ã®éšåã«åãããŠããŸããæåã®éšåã¯WebAssemblyã¢ãžã¥ãŒã«ã«ã³ã³ãã€ã«ããããã1ã€ã¯ãJS-glueãã³ãŒãã§å®è£ ãããŸãã ãã®JSã°ã«ãŒã¯ãOSãšéä¿¡ããŠãããã©ãŠã¶ãŒã«åŒã³åºããéä¿¡ããŸãã

åæã®WebAssemblyã³ãŒãã®ã»ãšãã©ã¯ãEmscriptenã§ã³ã³ãã€ã«ãããŠããŸãã ãããã£ãŠã人ã ããã©ãŠã¶ãªãã§WebAssemblyãå®è¡ããããšæãããã«ãªã£ããšãã圌ãã¯Emscriptenã³ãŒããå®è¡ãå§ããŸããã
ãããã£ãŠããããã®ã©ã³ã¿ã€ã ã§ã¯ãJS-glueã³ãŒãã«å«ãŸããŠãããã¹ãŠã®é¢æ°ã«å¯ŸããŠç¬èªã®å®è£ ãäœæããå¿ èŠããããŸãã
ããããåé¡ããããŸãã JSã°ã«ãŒã³ãŒãã«ãã£ãŠæäŸãããã€ã³ã¿ãŒãã§ã€ã¹ã¯ãæšæºãŸãã¯ãããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ãšããŠãèšèšãããŠããŸããã ããšãã°ãéåžžã®APIã§
read
ããã«åŒã³åºãã«ã¯ãJSã°ã«ãŒã³ãŒãã¯
_system3(which, varargs)
åŒã³åºã
_system3(which, varargs)
䜿çšããŸãã

æåã®ãã©ã¡ãŒã¿ãŒã¯ãååã®çªå·ãšåžžã«äžèŽããæŽæ°ã§ãïŒãã®äŸã§ã¯3ïŒã
2çªç®ã®ãã©ã¡ãŒã¿ãŒ
varargs
ã
varargs
ãªã¹ãããŸãã
varargs
æ°ãç°ãªãããã
varargs
ãšåŒã°ããŸãã ãã ããWebAssemblyã§ã¯ãå¯å€æ°ã®åŒæ°ãé¢æ°ã«æž¡ãããšã¯ã§ããŸããã ãã®ããããããã¯ç·åœ¢ã¡ã¢ãªãä»ããŠéä¿¡ãããŸãããããã¯å®å šã§ã¯ãªããã¬ãžã¹ã¿ãããäœéã§ãã
ãã©ãŠã¶ã®Emscriptenã®å Žåãããã¯æ£åžžã§ãã ããããä»ã§ã¯ã©ã³ã¿ã€ã ã¯ãããäºå®äžã®æšæºãšèŠãªããç¬èªã®ããŒãžã§ã³ã®JSã°ã«ãŒãå®è£ ããŠããŸãã POSIXãšãã¥ã¬ãŒã·ã§ã³ã¬ã€ã€ãŒã®å éšè©³çŽ°ããšãã¥ã¬ãŒãããŸãã
ããã¯ãEmscriptenå¶çŽãäžãããããšçã«ããªã£ãŠããã³ãŒããåå®è£ ããïŒããšãã°ãåŒæ°ãããŒãå€ãšããŠæž¡ãïŒããšãæå³ããŸããããããã®ã©ã³ã¿ã€ã ç°å¢ã«ã¯ãã®ãããªå¶çŽã¯ãããŸããã

ä»åŸæ°å幎ã«ããã£ãŠWebAssemblyãšã³ã·ã¹ãã ãæ§ç¯ããå ŽåãæŸèæã§ã¯ãªã匷åºãªåºç€ãå¿ èŠã§ãã ããã¯ãå®éã®æšæºããšãã¥ã¬ãŒã·ã§ã³ãšãã¥ã¬ãŒã·ã§ã³ã§ããããšãæå³ããŸãã
ãããããã®å Žåã«é©çšãããååã¯äœã§ããïŒ
WebAssemblyã·ã¹ãã ã€ã³ã¿ãŒãã§ãŒã¹ã¯ã©ã®ååã«åŸãã¹ãã§ããïŒ
WebAssemblyã®2ã€ã®åºæ¬ååïŒ
- æºåž¯æ§
- å®å šæ§
ç§ãã¡ã¯ãã©ãŠã¶ãè¶ ããŠããŸããããããã®éèŠãªååãä¿æããŠããŸãã
ãã ããPOSIXã¢ãããŒããšUnixã¢ã¯ã»ã¹å¶åŸ¡ã·ã¹ãã ã§ã¯ãæãŸããçµæãåŸãããŸããã åé¡ãäœã§ããããèŠãŠã¿ãŸãããã
移æ€æ§
POSIXã¯ããœãŒã¹ã³ãŒãã®ç§»æ€æ§ãæäŸããŸãã ç°ãªãã³ã³ãã¥ãŒã¿ãŒçšã«ç°ãªãããŒãžã§ã³ã®libcã䜿çšããŠåããœãŒã¹ã³ãŒããã³ã³ãã€ã«ã§ããŸãã

ããããWebAssemblyã¯ãããè¶ ããªããã°ãªããŸããã ããããã®ç°ãªãã·ã¹ãã ã§å®è¡ããããã«äžåºŠã³ã³ãã€ã«ããå¿ èŠããããŸãã ããŒã¿ãã«ãã€ããªãå¿ èŠã§ãã

ããã«ãããã³ãŒãã®é åžãç°¡åã«ãªããŸãã
ããšãã°ããã€ãã£ãããŒãã¢ãžã¥ãŒã«ãWebAssemblyã§èšè¿°ãããŠããå ŽåããŠãŒã¶ãŒã¯ãã€ãã£ãã¢ãžã¥ãŒã«ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãããšãã«node-gypãå®è¡ããå¿ èŠããªããéçºè ã¯å€æ°ã®ãã€ããªãã¡ã€ã«ãæ§æããã³é åžããå¿ èŠããããŸããã
å®å šæ§
ã³ãŒãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«å ¥åãŸãã¯åºåãèŠæ±ãããšãOSã¯éåžžãæææš©ãšã°ã«ãŒãã«åºã¥ããã¢ã¯ã»ã¹å¶åŸ¡ã·ã¹ãã ã䜿çšããŠããã®æäœã®ã»ãã¥ãªãã£ãè©äŸ¡ããå¿ èŠããããŸãã
ããšãã°ãããã°ã©ã ã¯ãã¡ã€ã«ãéãããã«èŠæ±ããŸãã ãŠãŒã¶ãŒã«ã¯ãã¢ã¯ã»ã¹ã§ããç¹å®ã®ãã¡ã€ã«ã»ããããããŸãã
ãŠãŒã¶ãŒãããã°ã©ã ãèµ·åãããšããã®ãŠãŒã¶ãŒã«ä»£ãã£ãŠããã°ã©ã ãèµ·åããŸãã ãŠãŒã¶ãŒããã¡ã€ã«ãžã®ã¢ã¯ã»ã¹æš©ãæã£ãŠããå Žå-ãŠãŒã¶ãŒããã®ææè ã§ãããããã¡ã€ã«ãžã®ã¢ã¯ã»ã¹æš©ãæã€ã°ã«ãŒãã®äžéšã§ããå Žå-ããã°ã©ã ã¯åãã¢ã¯ã»ã¹æš©ãæã¡ãŸãã

ããã¯ãå€ãã®äººã1å°ã®ã³ã³ãã¥ãŒã¿ãŒã§äœæ¥ãã管çè ããœãããŠã§ã¢ãå¶åŸ¡ããŠããæã¯çã«ããªã£ãŠãããŠãŒã¶ãŒãäºãã«ä¿è·ããŸãã ãããŠãäž»ãªè åšã¯ããã¡ã€ã«ãèŠãŠããä»ã®ãŠãŒã¶ãŒã§ããã
ãã¹ãŠãå€ãããŸããã çŸåšãã·ã¹ãã ã¯éåžžã·ã³ã°ã«ãŠãŒã¶ãŒã§ãããä¿¡é Œæ§ãäžæãªãµãŒãããŒãã£ã®ã³ãŒãã䜿çšããŠããŸãã çŸåšãäž»ãªè åšã¯ãèªåã§å®è¡ããã³ãŒãã«ãããŸãã
ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®ã©ã€ãã©ãªã®å Žåãæ°ããã¡ã³ãããéå§ãããŠããŸãïŒãªãŒãã³ãœãŒã¹ã®å ŽåããããããŸãïŒã 圌ã¯èª å®ãªæŽ»å家ãããããŸãã...ãŸãã¯äŸµå ¥è ãããããŸããã ãŸããã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ããå ŽåïŒããšãã°ããã¡ã€ã«ãéããŠãããã¯ãŒã¯çµç±ã§éä¿¡ããæ©èœïŒããã®ã³ãŒãã¯å€§ããªæ害ãåŒãèµ·ããå¯èœæ§ããããŸãã

çãããã¢ããªã±ãŒã·ã§ã³ ïŒç§ã¯ãŠãŒã¶ãŒBobã§åããŠããŸãã 圌ã®ãããã³ã€ã³è²¡åžãéããŠãããã§ããïŒ
ã³ã¢ ïŒããã®ïŒ ãã¡ããïŒ
çãããã¢ã㪠ïŒãã°ãããïŒ ãããã¯ãŒã¯æ¥ç¶ã¯ã©ãã§ããïŒ
ãããããµãŒãããŒãã£ã©ã€ãã©ãªã®äœ¿çšãå±éºãªçç±ã§ãã WebAssemblyã¯ããµã³ãããã¯ã¹ãä»ããå¥ã®æ¹æ³ã§ã»ãã¥ãªãã£ãæäŸããŸãã ããã§ã¯ãã³ãŒãã¯OSãšçŽæ¥éä¿¡ã§ããŸããã ããããã·ã¹ãã ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããæ¹æ³ã¯ïŒ ãã¹ãïŒãã©ãŠã¶ãŒãŸãã¯wasmã©ã³ã¿ã€ã ïŒã¯ãã³ãŒãã䜿çšã§ããæ©èœããµã³ãããã¯ã¹åããŸãã
ããã¯ããã¹ããããã°ã©ã ã«ãã£ãŠããã°ã©ã ã®æ©èœãå¶éããããšãæå³ãããŠãŒã¶ãŒã«ä»£ãã£ãŠåã«è¡åããããšãèš±å¯ãããå®å šãªãŠãŒã¶ãŒæš©éãæã€ã·ã¹ãã ã³ãŒã«ãåŒãèµ·ãããŸãã
ãµã³ãããã¯ã¹ãåç¬ã§äœ¿çšããŠãã·ã¹ãã ã¯å®å šã«ãªããŸããããã¹ãã¯ãã¹ãŠã®æ©èœããµã³ãããã¯ã¹ã«è»¢éã§ããŸããããã®å Žåã¯ä¿è·ãæäŸãããŸããã ãããããµã³ãããã¯ã¹ã¯ããã¹ããããå®å šãªã·ã¹ãã ãæ§ç¯ããããã®å°ãªããšãçè«çãªæ©äŒãæäŸããŸãã

WA ïŒOSãšããåãããããã®å®å šãªããã¡ãïŒsafe_writeãsafe_readïŒããããŸãã
çãããã¢ããªã±ãŒã·ã§ã³ ïŒããŸããŸãã...ãããã¯ãŒã¯ãžã®ç§ã®ã¢ã¯ã»ã¹ã¯ã©ãã§ããïŒ
ã©ã®ã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ã§ãããããã®2ã€ã®ååã«åŸãå¿ èŠããããŸãã 移æ€æ§ã¯ãœãããŠã§ã¢ã®éçºãšé åžã容æã«ãããã¹ããšãŠãŒã¶ãŒãä¿è·ããããŒã«ã絶察ã«å¿ èŠã§ãã
ãã®ãããªã·ã¹ãã ã€ã³ã¿ãŒãã§ãŒã¹ã¯ã©ã®ããã«èŠããã¹ãã§ããïŒ
ããã2ã€ã®éèŠãªååãèãããšãWebAssemblyã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ã¯ã©ãããã¹ãã§ããããïŒ
ããã¯æšæºåããã»ã¹ã§ç¢ºèªããŸãã ãã ããéå§ã®ææ¡ããããŸãã
- æšæºã€ã³ã¿ãŒãã§ã€ã¹ã®ã¢ãžã¥ãŒã«ã»ããã®äœæ
- ãŸããwasi-coreã³ã¢ã¢ãžã¥ãŒã«ãæšæºåããããšããå§ããŸãããã

wasi-coreã«ã¯äœãå«ãŸããŸããïŒ ãããã¯ãã¹ãŠã®ããã°ã©ã ã«å¿ èŠãªåºæ¬ã§ãã ãã®ã¢ãžã¥ãŒã«ã¯ããã¡ã€ã«ããããã¯ãŒã¯æ¥ç¶ãã¯ããã¯ãä¹±æ°ãªã©ãPOSIXã®ã»ãšãã©ã®æ©èœãã«ããŒããŸãã
åºæ¬çãªæ©èœã®å€ãã¯ãéåžžã«ãã䌌ãã¢ãããŒããå¿ èŠãšããŸãã ããšãã°ãPOSIXãã¡ã€ã«æåã®ã¢ãããŒãã¯ããªãŒãã³ãã¯ããŒãºãèªã¿åããããã³æžã蟌ã¿ã®ã·ã¹ãã ã³ãŒã«ã§æäŸãããä»ã®ãã¹ãŠã¯äžèšã®è£å®ã§ãã
ããããwasi-coreã¯ãã¹ãŠã®POSIXæ©èœãã«ããŒããŠããããã§ã¯ãããŸããã ããšãã°ãããã»ã¹ã®æŠå¿µã¯WebAssemblyã«æ確ã«é©åããŸããã ããã«ããã¹ãŠã®WebAssemblyãšã³ãžã³ã
fork
ãªã©ã®ããã»ã¹æäœããµããŒãããå¿ èŠãããããšã¯æããã§ãã ãããã
fork
æšæºåãå¯èœã«ããããšèããŠããŸãã

Rustã®ãããªèšèªã¯ãæšæºã©ã€ãã©ãªã§wasi-coreãçŽæ¥äœ¿çšããŸãã ããšãã°ãRustããã®
open
ã¯ã
__wasi_path_open
ãåŒã³åºããŠWebAssemblyã«ã³ã³ãã€ã«ãããšãã«å®è£ ãããŸãã
Cããã³C ++ã®å Žåã wasi-sysrootãäœæããŸãããããã¯ãwasi-coreé¢æ°ã®èŠ³ç¹ããlibcãå®è£ ããŸãã

Clangãªã©ã®ã³ã³ãã€ã©ãŒã¯WASI APIãšå¯Ÿè©±ã§ããRustã³ã³ãã€ã©ãŒãEmscriptenãªã©ã®å®å šãªããŒã«ãã§ãŒã³ãã·ã¹ãã å®è£ ã®äžéšãšããŠWASIã䜿çšããããšãæåŸ ããŠããŸãã
ã«ã¹ã¿ã ã³ãŒãã¯ãããã®WASIé¢æ°ãã©ã®ããã«åŒã³åºããŸããïŒ
ã³ãŒããå®è¡ãããã©ã³ã¿ã€ã ã¯wasi-coreé¢æ°ãæž¡ãããªããžã§ã¯ãããµã³ãããã¯ã¹ã«é 眮ããŸãã

ããã¯ç§»æ€æ§ãæäŸããŸããããã¯ãåãã¹ãããã®ãã©ãããã©ãŒã å°çšã®wasi-coreå®è£ ãæã€ããšãã§ããããã§ããMozillaWasmtimeãFastly Lucetãªã©ã®WebAssemblyã©ã³ã¿ã€ã ããNodeãããã«ã¯ãã©ãŠã¶ãŸã§ã
ãŸãããã¹ãããœãããŠã§ã¢ããŒã¹ã§ãµã³ãããã¯ã¹ã«è»¢éããwasi-coreæ©èœãã€ãŸãèš±å¯ããã·ã¹ãã åŒã³åºããéžæãããããä¿¡é Œæ§ã®é«ãåé¢ãæäŸãããŸãã ãããã»ãã¥ãªãã£ã§ãã

WASIã¯ãèªèšŒããŒã¹ã®ã»ãã¥ãªãã£æŠå¿µãã·ã¹ãã ã«å°å ¥ããããšã«ãããã»ãã¥ãªãã£ã匷åããã³æ¡åŒµããŸãã
éåžžãã³ãŒãã§ãã¡ã€ã«ãéãå¿ èŠãããå Žåã¯ãè¡ã«ãã¹åãæå®ããŠ
open
ãåŒã³åºããŸãã 次ã«ãOSã¯ïŒããã°ã©ã ãèµ·åãããŠãŒã¶ãŒã®æš©å©ã«åºã¥ããŠïŒã³ãŒãã«ãã®ãããªã¢ã¯ã·ã§ã³ã®æš©å©ããããã©ããããã§ãã¯ããŸãã
WASIã®å Žåããã¡ã€ã«ã«ã¢ã¯ã»ã¹ããé¢æ°ãåŒã³åºããšãã¯ããã¡ã€ã«èªäœãŸãã¯ãã¡ã€ã«ãå«ããã£ã¬ã¯ããªã®ã¢ã¯ã»ã¹èš±å¯ãé¢é£ä»ããããŠãããã¡ã€ã«èšè¿°åãæž¡ãå¿ èŠããããŸãã
ãããã£ãŠã誀ã£ãŠ
/etc/passwd
ãéãããã«èŠæ±ããã³ãŒããæã€ããšã¯ã§ããŸããã 代ããã«ãã³ãŒãã¯ç¬èªã®ãã£ã¬ã¯ããªã§ã®ã¿æ©èœããŸãã

ããã«ããããããã®ã·ã¹ãã ã³ãŒã«ã®æ©èœãå¶éããããããããŸããŸãªã·ã¹ãã ã³ãŒã«ãåé¢ãããã³ãŒãã«å®å šã«è§£æ±ºã§ããŸãã
ãããŠãåã¢ãžã¥ãŒã«ã§ã ããã©ã«ãã§ã¯ãã¢ãžã¥ãŒã«ã¯ãã¡ã€ã«èšè¿°åã«ã¢ã¯ã»ã¹ã§ããŸããã ãã ããããã¢ãžã¥ãŒã«ã®ã³ãŒãã«ãã¡ã€ã«èšè¿°åãããå Žåãä»ã®ã¢ãžã¥ãŒã«ã§åŒã³åºãããé¢æ°ã«æž¡ãããšãã§ããŸãã ãŸãã¯ãããéå®ãããããŒãžã§ã³ã®ãã¡ã€ã«èšè¿°åãäœæããŠãä»ã®é¢æ°ã«æž¡ããŸãã
ãã®ããã«ããŠãã©ã³ã¿ã€ã ã¯ã¢ããªã±ãŒã·ã§ã³ãæäžäœã³ãŒãã§äœ¿çšã§ãããã¡ã€ã«èšè¿°åãæž¡ãããã¡ã€ã«èšè¿°åã¯å¿ èŠã«å¿ããŠã·ã¹ãã ã®æ®ãã®éšåã«åæ£ãããŸãã

ããã«ãããWebAssemblyã¯æå°ç¹æš©ã®ååã«è¿ã¥ããã¢ãžã¥ãŒã«ã¯ãã®ãžã§ããå®è¡ããããã«å¿ èŠãªæå°éã®ãªãœãŒã¹ã»ããã«ã®ã¿ã¢ã¯ã»ã¹ã§ããŸãã
ãã®æŠå¿µã¯ãCloudABIãCapsicumã®ããã«ãç¹æš©ããŒã¹ã®ã»ãã¥ãªãã£ã«åºã¥ããŠããŸãã ãããã®ã·ã¹ãã ã®åé¡ã®1ã€ã¯ãã³ãŒãã®ç§»æ€æ§ãé£ããããšã§ãã ãããããã®åé¡ã¯è§£æ±ºã§ãããšä¿¡ããŠããŸãã
ã³ãŒããæ¢ã«çžå¯Ÿãã¡ã€ã«ãã¹ã§
openat
ã䜿çšããŠããå Žåãã³ãŒãã®ã³ã³ãã€ã«ã¯æ©èœããŸãã
ã³ãŒãã§
open
䜿çšã
open
ãããopenatã¹ã¿ã€ã«ã®ç§»è¡ãéåžžã«æ¿ããå ŽåãWASIã¯å¢åãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã libpreopenã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ãåæ³çã«ã¢ã¯ã»ã¹ã§ãããã¡ã€ã«ãã¹ã®ãªã¹ããäœæããŸãã 次ã«ããããã®ãã¹ã§ã®ã¿
open
䜿çšããŸãã
次ã¯ïŒ
wasi-coreã¯è¯ãã¹ã¿ãŒãã ãšä¿¡ããŠããŸãã WebAssemblyã®ç§»æ€æ§ãšã»ãã¥ãªãã£ãä¿æãããšã³ã·ã¹ãã ã®åŒ·åºãªåºç€ãæäŸããŸãã
ããããwasi-coreãå®å šã«æšæºåãããã次ã®ãããªä»ã®åé¡ã解決ããå¿ èŠããããŸãã
- éåæå
¥åºå
- ãã¡ã€ã«ç£èŠ
- ãã¡ã€ã«ããã¯
ããã¯ã»ãã®å§ãŸãã«éããªãã®ã§ãã¢ã€ãã¢ãããã°åå ããŠãã ããïŒ