WASIęØ™ęŗ–ļ¼šWebAssembly Beyond the Web

Mozilla恮3月27ꗄ态WebAssemblyć‚·ć‚¹ćƒ†ćƒ ć‚¤ćƒ³ć‚æćƒ¼ćƒ•ć‚§ć‚¤ć‚¹ļ¼ˆWebAssemblyć‚·ć‚¹ćƒ†ćƒ ć‚¤ćƒ³ć‚æćƒ¼ćƒ•ć‚§ć‚¤ć‚¹ļ¼‰ć§ć‚ć‚‹WASIć®ęØ™ęŗ–åŒ–ć®é–‹å§‹ć‚’ē™ŗč”Øć—ć¾ć—ćŸć€‚

ē†ē”±ļ¼š 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å®Ÿč£…ćŒć‚ć‚Šć¾ć™ć€‚


å®Ÿéš›ć®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ć«ćÆä½•ćŒå«ć¾ć‚Œć¾ć™ć‹ļ¼Ÿ ć“ć‚Œć‚‰ćÆć™ć¹ć¦ć®ćƒ—ćƒ­ć‚°ćƒ©ćƒ ć«åæ…č¦ćŖåŸŗęœ¬ć§ć™ć€‚ ć“ć®ćƒ¢ć‚øćƒ„ćƒ¼ćƒ«ćÆć€ćƒ•ć‚”ć‚¤ćƒ«ć€ćƒćƒƒćƒˆćƒÆćƒ¼ć‚ÆęŽ„ē¶šć€ć‚Æćƒ­ćƒƒć‚Æć€ä¹±ę•°ćŖć©ć€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ć‚’å®Œå…Øć«ęØ™ęŗ–åŒ–ć—ćŸć‚‰ć€ę¬”ć®ć‚ˆć†ćŖä»–ć®å•é”Œć‚’č§£ę±ŗć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚


ć“ć‚ŒćÆć»ć‚“ć®å§‹ć¾ć‚Šć«éŽćŽćŖć„ć®ć§ć€ć‚¢ć‚¤ćƒ‡ć‚¢ćŒć‚ć‚Œć°å‚åŠ ć—ć¦ćć ć•ć„ļ¼

Source: https://habr.com/ru/post/J446764/


All Articles