NaCl ã«ã¤ãã¦
ã«ã¼ãã«/VM Advent Calendar 2013 ã«ãã£ãç»é²ãã¾ãããéè¦ã®ç¡ããã㪠NaCl ã«ã¤ãã¦èªãã¾ãã
https://qiita.com/advent-calendar/2013/kernelvm
NaCl ã¯ã°ã¼ã°ã«ãä½ã£ããã®ã®ä¸ã§ä¸çªå¥½ããããã«å¥½ããªãã®ã§ããçç±ã¯ä½ã¬ã¤ã¤ã³ã³ãã¼ãã³ãéã ãããæ¦è¦ã¨ãã¦ã¯å®å ¨ã«å®è¡ã§ãã(ããã§ããå®å ¨ã¯ãã©ã¦ã¶ãåãã¦ã OS ä¸ã§ã®ä»»æã³ã¼ãå®è¡ãã§ããªããã¨ããæå³) Active X ã¨ãããã C/C++ ã§ã³ã¼ããæ¸ãã Java Applet ã¨ããããã¾ãããããæãã®ã
NaCl ã¯ãããã£ã±ã«è¨ã£ã¦ã
- æ¤è¨¼å¯è½ãªãã¤ããªãåºåããã³ã³ãã¤ã©ãã¼ã«ãã§ã¤ã³ (gcc, binutils, etc.)
- ã¦ã¼ã¶ããã°ã©ã ãæ¤è¨¼ãã¦èµ·åãã service runtime
- service runtime 㨠libc ã®éã«å®å®ãã ABI ãæä¾ãã integrated runtime
- newlib 㨠glibc ããé¸ã¹ã libc
- ãã©ã¦ã¶ã§è²ããªãªãã¬ã¼ã·ã§ã³ãå®ç¾ãã Pepper API ã¨ã®ããã¨ã
ãããã®é¨åãããã¾ãã以ä¸ã§ã¯ä¸ã¤ãã¤è¦ã¦ããã¾ãã
ãã®ã¾ãã«ç¨èªã¨ãã¦ã trusted code ã¨ããã®ããããæ··ä¹±ãæããã¡ãªã®ã§æåã«ã
- trusted code 㯠chrome ã¨ãã®ã³ã¼ãã®ä¸é¨ã«ãªã£ã¦ãã³ã¼ãã®å¤§é¨åãæãã¾ãããã¹ãå´ã¨ãè¨ã£ãããããã¨æãã¾ãã
- untrusted code ã¯ãã©ã°ã¤ã³å´ã®ã³ã¼ãã§ãä½ãããããããã®ã§ä¿¡ç¨ãã¦ã¾ããããã®æç« ã§ã¯ã²ã¹ãå´ã¨ããè¨ãã¾ããã¾ãããããã§ããã NaCl ãµã¤ãã®ã³ã¼ãã«ãä¸é¨ untrusted code ãããã¾ãã nexe ã¨è¨ã£ãããã¾ãããã¯ã·ã¼ã¨çºé³ããã®ããªã·ã£ã¬ã½ãã§ãã
Software Fault Isolation
NaCl ã¨ããã°ãã®è©±ãã¨ããæããªã®ã§ NaCl ã«èå³ãæã£ããã¨ããã人ã¯ç¥ã£ã¦ã話ã§ã¯ããã¨æãã¾ãã
C/C++ ã§ã³ã¼ããæ¸ããã®ã«å®å ¨ãã¨ããã®ã¯ããããªè©±ã§ããã©ããã£ã¦ãã£ã¦ããã¨ããã¨ãã³ã³ãã¤ã©ã«æãå ¥ã£ã¦ã¦ã以ä¸ã®äºã¤ãæ¤è¨¼å¯è½ãªãã¤ããªããåããªãããã«ãªã£ã¦ãã¾ãã
- jmp/call ã®é£ã³å ãå¶éããã¦ãã
- ã¡ã¢ãªã®èªã¿æ¸ãå ãå¶éããã¦ãã
æ¤è¨¼ã¯å®è¡ãã¤ããªãèªããã¨ã«ãã£ã¦ãªããã¦ãã¾ãã jmp/call ã®æ¹ã¯ã¢ãã¬ã¹ç©ºéã®æåã® 256MB ã«ããé£ã¶ãã¨ãã§ãããã㤠16 or 32 byte align ããã¦ãã¢ãã¬ã¹ã«ããé£ã¹ã¾ããã 256MB ã®å¶éã®æ¹ã¯ãç´åã« and å½ä»¤ã§ ä¸ä½ã® bit ãã¯ãªã¢ãã¦ãªã jmp/call ã¯ç¦æ¢ãã¨ããã«ã¼ã«ã§ãªããã¦ã¾ãã
align ã®æ¹ãä¸ä½ã® bit ãã¯ãªã¢ãã¦ãªããã®ãç¦æ¢ããã¨ããæ¹æ³ã§ãã£ã¦ã¾ãã align ãå¼·å¶ããçç±ã¯ããã®å¢çãã¾ããå½ä»¤ã許ããããªãããã§ãã許ãã¦ãã¾ã㨠operand jump ã§äºæ³å¤ã®è§£éããããããã¤ããªãã§ãã¦ãã¾ãããã§ããã¾ããããã¤ãã®ããããã¯ãªã¢ã㦠call ããªã©ã¯ã²ã¨ããã¾ãã® naclcall å½ä»¤ã¨ãã¦èªèããã¦ãã¦ããã®éã« jmp ããã®ãç¦æ¢ã§ããããã§ãªãã¨ããããã¯ãªã¢ããã« call ãããã§ãã¦ãã¾ãã®ã§ã
å¾ã§è©³ãã説æãã¾ããã NaCl ã®ã³ã¼ãæ¤è¨¼ãªã©ãè¡ãªã£ãããã service runtime ã¨å¼ã°ããé¨åã¯åãããã»ã¹ã§åãã¦ãã¾ããåãããã»ã¹ã§åãã¦ãã£ã¦ãã¨ã¯ã service runtime å ã®ã¡ã¢ãªãèªã¿æ¸ããããã¨ã³ã¼ãæ¤è¨¼ãã¹ãããã§ããããã¡ãã£ã¦ã¾ããã®ã§ãã¡ã¢ãªã®èªã¿æ¸ããå¶éããã¦ãã¾ãããã®å¶éã®ä»æ¹ã¯ x86 ã§ã¯ã»ã°ã¡ã³ãã¬ã¸ã¹ã¿ã§ã x86-64 㨠ARM ã§ã¯ã¡ã¢ãªã®èªã¿æ¸ãã®ãã³ã«ç´å㧠and å½ä»¤ã§å¯¾è±¡é åãå¶éããããã¨ã«ãã£ã¦ãªããã¦ãã¾ãããã®ãªã¼ãããã㯠x86-64 㨠ARM ã§ã¯å¤§ããã¦ã x86 ã§æ®éã®ãã¤ããªã¨æ¯ã¹ãæã®ãªã¼ãããã(å¹³åçã« 5% å¼·ãããã¨ãã ã¨ããã¦ãã¨æãã¾ã)ã«å¯¾ãã¦ã x86-64 㨠ARM ã§ã¯ 30% ãããã®ãªã¼ãããããããã¨èããæ¹ãããã¿ããã§ãã
èªã¿æ¸ãã§ããã¡ã¢ãªã¯ã x86 㨠ARM ã§ã¯å é ãã 1GB ã x86-64 ã§ã¯ 4GB ã¨ãªã£ã¦ã¾ãã x86-64 ã¯å®éã«ã¯å é ãã 4GB ã§ã¯ãªããã¨ããã¢ãã¬ã¹ãã 4GB ã¨ãããããªæãã§ããã®ã¨ããã¢ãã¬ã¹ã¯å¸¸ã« R15 ã«å ¥ã£ã¦ãã¦ã R15 ã¯å¤æ´ç¦æ¢ãªã¬ã¸ã¹ã¿ã«ãªã£ã¦ã¾ãã
ã¡ãªã¿ã« x86-64 㯠4GB ããã¡ã¢ãªã¢ãã¬ã¹ããç¡ãããã§ãããããã«ãããã¦ãã¤ã³ã¿ãµã¤ãºã 32bit ã§ãå®ä½ã¨ãã¦ã¯å®å ¨ã« x32 ã® ABI ã¨ãªã£ã¦ãã¾ãããã ãªãã ELF64 ã使ã£ã¦ãã¾ã£ã¦ããã§ãããã ãããããã§ãããªãããªããã¤ããã¯ããã¿ããã§ããã©ã
ãã¨ç¹çãã¹ããã¨ã¨ãã¦ã¯ NaCl ãã¤ããªã® page size 㯠64kB ã§ãã
追è¨: x86 ã«ã¤ãã¦ã¯ããããã ãã«è§£èª¬ãããã¾ããã©ã x86-64 㨠ARM ã«ã¤ãã¦ã¯ãã¾ã解説ãç¡ãã®ã§ãããã¥ã¡ã³ãã¸ã®ãªã³ã¯ã¯ã£ã¨ãã¾ãã ARM ã®å®æ°ãã¼ãã®ãããã¨ããçµæ§ãã®ããã§ãã
https://developer.chrome.com/native-client/reference/sandbox_internals/x86-64-sandbox
https://developer.chrome.com/native-client/reference/sandbox_internals/arm-32-bit-sandbox
Service Runtime
ãã£ããã©ã£ã¨æ¸ããéãããããããµã³ãããã¯ã¹ã 㨠supervisor ã¯å¥ã®ã¡ã¢ãªç©ºéã«ãããã¨ãå¤ãæ°ããããã§ããã NaCl ã§ã¯åä¸ããã»ã¹ã«ãã¾ãã service runtime ã®ä»äºã¯
- NaCl ã³ã³ãã¤ã©ã§ã³ã³ãã¤ã«ããã untrusted code ãæ¤è¨¼ãã
- untrusted code ããã¼ããã¦å®è¡ãã
- untrusted code ã« NaCl system call ãæä¾ãã
ã®3ã¤ã ã¨æãã¾ããæ¤è¨¼ã«ã¤ãã¦ã¯ä¸ã¤åã«æ¸ããã®ã§ããã¼ãããã
service runtime ã¯ãã¼ãã¨ãã¦ã®æ©è½ãæã£ã¦ãã¾ãããã¼ãã£ã¦ããã¨ã ãããã
- ããã°ã©ã ããã¼ããã
- ããã°ã©ã ãåé ç½® (relocate) ãã
- é©åã«ãã©ã¡ã¼ã¿ãã»ãããã¦ããã°ã©ã ãèµ·åãã
- dlopen/dlclose ã«å¯¾å¿ãã
ããããéè¦ãªä»äºãªããã§ããã©ã relocate 㨠dlopen 㯠service runtime ã¯ãããªãã§ããã¤ã¾ãã ããã kernel ããããã¨ã¨åãã ã¨æãã°è¯ãã§ãã ELF èªãã§ã¡ã¢ãªã«è²¼ã£ã¦ auxv 渡ãã¤ã¤èµ·åãããã¨ã auxv 㯠AT_SYSINFO ã« nacl_irt_query ã¨ããç¹æ®ãªé¢æ°ãã¤ã³ã¿ãå ¥ããã ãã§ãã nacl_irt_query ã«ã¤ãã¦ã¯ã¾ãå¾ã§ã
service runtime ã®æä¾ãã NaCl system call ã¯ãã¾ããã£ãã POSIX ã½ããã®ãè²ã ããã¾ãã file é¢ä¿ã mmap ã thread ã futex ãæéé¢ä¿ããªã©ã§ãã service runtime ã¯äºã¤ã®ãã¤ããªã«ãªã³ã¯ããã¦ã¾ãã
çæ¹ã sel_ldr ã¨ãããã®ã§ã unittest ã Chrome ã®å¤ã§èµ°ãããæãªããã«ä¾¿å©ãªãã®ã§ããããçæ¹ã¯ nacl_helper ã¨ãããã®ã§ã Chrome ã®ä¸ã§èµ°ãããæã«ä½¿ããã¦ãããã®ã§ããããã©ã«ãã§ã¯ file é¢ä¿ã® API ã¨ãã¯åããªãããã«ãªã£ã¦ãã¾ããã¤ãªãã£ã¦ãã¨ãµã³ãããã¯ã¹ã®æå³ãªããã§ã NACL_DANGEROUS_ENABLE_FILE_ACCESS=1 ã¨ãç°å¢å¤æ°ãæå®ãã¦ããã¨ä¸å¿ãã¡ã¤ã«é¢ä¿ãã¤ãªããã®ã§ããã¹ãæãªã©ã¯ä¾¿å©ã§ã¯ããã¾ãã
nacl_helper ã¯ãã¹ãã®ã·ã¹ãã ã§å®è¡ããããã¤ããªãªãã§ãä¾ãã° Linux ã§ã¯ glibc ã«ãªã³ã¯ããã¦ã¾ãã Windows ãªã©ã§ã POSIX ã® API ã¨ã㦠Windows ã® API ã®ä¸é¨ãæä¾ãã¦ããã®ã§ã NaCl 㯠portable POSIX ã¨ãã¦ã®ä¸é¢ãããã¨ãããã¨ã«ãªãã¾ãã
nacl_helper ã¯ãã¹ãã®ã·ã¹ãã ä¸ã§åãããããå é 1GB ã®ã¢ãã¬ã¹ã libc ãªã©ã«ä½¿ããã¦ãã¾ãç°å¢ã§ã¯ããã¯ãå¿ è¦ã«ãªãã¾ãã ARM ãªãããããã§ãããããç°å¢ã§ã¯ nacl_helper_bootstrap ã¨ããã¹ã¿ãã£ãã¯ãªã³ã¯ãããã¤ããªã nacl_helper ãèµ·åããããã«ãªã£ã¦ãã¾ãã nacl_helper_bootstrap ã¯æåã« 1GB ã®æ¬²ããé åã mmap ã§ç¢ºä¿ãã¦ãã nacl_helper ã exec ããã ãã®ãã¤ããªã§ã wine-preloader ã¨ãã¨åãå½¹å²ã¨æã£ã¦ããã¨è¨ãã¾ãã
ãã¨ããã ããã£ãã NaCl ã®ã³ã¼ãæ¤è¨¼ã¨ãã®ä»çµã¿ãçªç ´ãããå ´åã«åãã¦ãã seccomp-bpf sandbox ãä¸å¿ãã£ã¦ã¾ãã
ããã¨ããã²ã¨ã¤ãã³ã¼ãæ¤è¨¼ã¯çµæ§é ããã§ä¸åº¦æ¤è¨¼ãããã¤ããªã¯å¤§ä¸å¤«ã ãã¼ã£ã¦ãã£ãã·ã¥ãããããã¦ã¾ããªã
Integrated Runtime (IRT)
NaCl syscall 㯠Linux syscall åæ§ã libc/user code ããç´æ¥å¼ã¶ãã¨ãã§ããããã§ããã©ãã¡ã¢ãªã¬ã¤ã¢ã¦ãã¨ããå¤ããã¨ããã«äºææ§ãå£ãã¦ãã¾ãããå¤ãã¤ã³ã¿ã¼ãã§ã¤ã¹ãã¤ãã¤ãã ã£ãæã®å¤æ´ã¨ãããã«ããâ¦ã¨ãããã¨ã§ããã¤ããªäºææ§ãæ ä¿ããããã®ä»çµã¿ã¨ãã¦ã IRT ãããã¾ãã
IRT ã¯åºæ¬çã«ã¯ NaCl syscall ãå¼ã¶ã ãã®å°ããªé¢æ°ã大éã«å®ç¾©ããã¦ãã ãã®ãã¤ããªã§ã service runtime ã«ãã£ã¦ãã¼ãããã untrusted ãªãã¤ããªã§ãã untrusted code ã§ããã IRT ã¯ã·ã¹ãã ã®ä¸é¨ã¨ã㦠chrome ã¨ä¸ç·ã«é å¸ããã¦ã¾ãã
IRT ã«å ¥ã£ã¦ãé¢æ°ãå¼ã¶ã«ã¯ã service runtime ã libc ã®ãã¼ãã«æ¸¡ãã¦ããã nacl_irt_query ã£ã¦é¢æ°ãã¤ã³ã¿ã使ãå¿ è¦ãããã¾ãã nacl_irt_query ã¯æååãåãåã£ã¦é¢æ°ãã¤ã³ã¿ç¾¤ãè¿ãé¢æ°ã§ãæåå㯠"nacl-irt-filename-0.1" ãªã©ã®ãããªãã©ã¼ãããã«ãªã£ã¦ãã¾ãããã¼ã¸ã§ã³ãå ¥ã£ã¦ãã®ã§äºææ§ã«åé¡ã®ããå¤æ´ããã£ãå ´åãå®å¿ãã¨ã
NaCl SDK ã«å
¥ã£ã¦ã irt_core_
libc (glibc or newlib)
NaCl 㯠glibc 㨠newlib ããµãã¼ããã¦ã¾ãã static link ãã¦å°ãããã¤ããªãä½ãããå ´å㯠newlib ãããã§ãªããã° glibc ãã¨ããæãã§ä½¿ãããããã¨ãæ³å®ããã¦ãæ°ããã¾ãã
åºæ¬çã«ã¯ãªãªã¸ãã«ã® libc ãã®ã¾ãã¾ãªããã§ããã©ããããªãã«ã¯å¤æ´ãå ¥ã£ã¦ãã¾ããå ·ä½çã«ã¯
- Linux syscall ã®ãããã« NaCl syscall ãå¼ã¶
- glibc loader ã®èµ·åã®ããæ¹ãå ¨ç¶éãã®ã§ãã®å¯¾å¿
- NaCl æµ thread local storage ãµãã¼ã
ãããã大ããã®ã§ã¯ãªããã¨æãã¾ããæ㯠service runtime ã« futex ç¸å½ãç¡ãã¦ã mutex 㧠futex å®è£ ããããã¦ãã®ã§ããã大ããã£ãæ°ããã¾ããã
Linux kernel ã¯æ®éã¡ã¤ã³ããã°ã©ã ã mmap ãã¦ããã¦ã auxv ã« AT_BASE ã AT_PHDR ãªãããéãã¦ããã¼ãã®æ å ±ãã¡ã¤ã³ããã°ã©ã ã®æ å ±ãéã£ã¦ããããã§ããã service runtime 㯠mmap ããã« argv ã«å ¥ã£ã¦ãããã°ã©ã ããã¼ãã mmap ãã¦ããã£ã¦ã¹ã¿ã³ã¹ã§ auxv ã AT_SYSINFO ã« nacl_irt_query ãå ¥ã£ã¦ãã ããªã®ã§ããã®ã¸ãã¯ã¾ãã¾ããããããã¯ãã
NaCl ã® thread local storage ã«ã¤ãã¦ã®æ å ±ã¯çµæ§è©³ããããã«æ¸ãã¦ããã¾ãã
http://www.chromium.org/nativeclient/design-documents/thread-local-storage-tls-implementation
ãã£ããã¾ã¨ããã¨ã NaCl ãããªãå ´åã¨åãã§ã TLS ã®ããã«ã¬ã¸ã¹ã¿ä¸åç ç²ã«ãã¦ããã®ã¬ã¸ã¹ã¿ã¯ untrusted code ããã¯èªç±ã«æ¸ãå¤ããããªããã£ã¦ãªæãã§ããæ¬å½ã¯ IRT å´ã«å¿ è¦ãª TLS ã¨ã¦ã¼ã¶ã³ã¼ãå´ã«å¿ è¦ãª TLS ã¨ããã£ã¦ãããããããã§ããã©ã
thread ã¯ã ããã clone 㨠exit ç¸å½ã® NaCl syscall / IRT ãç¨æããã¦ãæãã§ããéã㯠thread çµäºæã« clone ã®ç¬¬ä¸å¼æ°ç¸å½ã« futex wake ãå¼ã°ããªãã¨ããããããç´°ããã®ããã¶ãã
NaCl glibc ã®ãã¤ããªã¯ chrome ã«å梱ããã¦ãªãã¦ãã¦ã¼ã¶ããã°ã©ã ã¨åæã«é å¸ãããã¨ãæå¾ ããã¦ãã¾ãããã®ããã« ABI äºææ§ãçä¿ããããã« IRT ãããã¨ãè¨ãããã glibc newlib 両æ¹ãåãã³ã¼ãæã¤ã®ãããã©ããããã IRT ãããã¨ãè¨ããããã¾ããããªãããã§ãã
Pepper API
ãã©ã¦ã¶ã§ NaCl åããå ´åã¯ããã®ã¾ã¾ã 㨠sandbox ã®ããã§ä½ãã§ããªãã®ã§ã Chrome IPC ã®å£ãã¤ãªãã£ã¦ãã¦ããããéã㦠Pepper API ã¨ããé¢æ°ç¾¤ãå¼ã¹ãããã«ãªã£ã¦ãã¾ãã
ã¦ã¼ã¶ã³ã¼ãããè¦ãã¨ãããã°ã©ã èµ·åæãã FD ãä¸å IPC ç¨ã«éãã¦ã¦ã Pepper API å¼ã¶ã¨ IRT å ã®ã³ã¼ãã sendmsg/recvmsg ãã¦ãã©ã¦ã¶ã¨ããã¨ããã¦ãããæãã
Pepper API 使ãã¨ããããã§ãã¾ãã file 触ã£ããçµµãããããããããããéè¦ãªã®ã¯ JavaScript å´ã«ã¡ãã»ã¼ã¸ãæãããã PostMessage ã£ã¦ãã¤ã§ããããã
C ã® API ã¯ä½¿ããããããé£ããã®ã§ã C++ ã®ãã¤ã使ãã¨ããã¿ããã§ããæè¿ã¯ ppapi_simple ã¨ããç°¡åãªãããããããã¾ãã
Pepper API ã¯ã¾ãã ããã html5 ã¨ã㦠JavaScript ãã§ããããã«ãã¦ãããã¨ã¯ãã ãããã§ãããããªã§ããªããããªâ¦ã£ã¦ãããã® API ãããã£ã¦ããããªæ°ããã¾ãããã¶ãã
ä½è«ãããã¨ããã§ãã Pepper ã®ã³ã¼ãã¯ãã¤ãããã§ããæå²ä»¥æ¥äººé¡ã¯ IPC/RPC é£ããã¨è¨ã£ã¦ãæ°ããã¦ãé²æ©ç¡ãã§ããªã IPC ã£ã¦æ¦å¿µã説æããã¨å¼·çã«ç°¡åãªãã§ããã©ãâ¦
naclports
NaCl ã®ãã¢ã¨ãã¦è²ã㪠Unix ã§åããã¼ã«ããã¼ãããã¦ããã®ã§ããè¨èªå¦çç³»ã§ãã㨠ruby python lua ãåæã®é ãããã£ã nethack ã ã® SDL ã ã®ããã¨ã¯ snes9x ã ã® vim ã ã®ã¨ã«ããè²ã å ¥ã£ã¦ã¾ãã
æè¿ã®ãã¤ã¯ ppapi_simple ã£ã¦ãã¤ã¨ Pepper API 使ã£ã¦ html5 filesystem ã«ä¿åãããã§ãã nacl_io ã£ã¦ã®ã使ãã®ãåºæ¬ã½ãã§ãã nacl_io 㯠3 ã¤ãã®ä¼¼ã試ã¿ã ã¨æãã¾ããâ¦
GDB (nacl-gdb)
GDB ã«ãã¼ãããããã¤ããªãæããã®ã¯é常ãã¼ããªããã§ããã©ã Chrome ã§åã NaCl ã®å ´åã untrusted å´ã® glibc loader ãç¥ã£ã¦ããã¹ã¯ãã¹ãå´ã®ã·ã¹ãã ããè¦ãããã¹ã¨å ¨ãä¸è´ãã¦ãªããã§ããã®ã¸ãã解決ããå¿ è¦ãããã¾ãã
Chrome ä¸ã§åã NaCl ã®å ´åã NMF (NaCl Manifest File) ã£ã¦ãã¤ããã©ã¦ã¶ããè¦ãã URL ã¨ãã¤ããªã®ååã®å¯¾å¿ãåã£ã¦ããã§ããã® NMF ã¦ã®ãèªããããã«ãã¦ãã£ããã IRT ãèªã¾ãããã§ãã¾ãã
ãã¨ã service runtime ã¯ã»ãã¥ãªãã£çãªçç±ã§ untrusted code ã¨éã stack ã§å®è¡ããã¦ããã§ããã®ã¸ãã®å¯¾å¿ãå ¥ã£ã¦ãã¿ããã§ãã
nacl_dyncode_create
JIT ãããã®ã¯åããããã«ãåçã«çæããã³ã¼ãã NaCl ã®æ¤è¨¼å¨ã«æ¤è¨¼ãã¦ãããä»çµã¿ãããã¾ãããã® API ã¯ããªã使ãåæãæªãã¦ã text å ã®ä½¿ãã¢ãã¬ã¹ãèªåã§æå®ããªãã¨ãããªãã®ã§ãèªåã®ããã»ã¹ã®ã¡ã¢ãªã¬ã¤ã¢ã¦ããããç¥ã£ã¦ãå¿ è¦ãããã¾ãâ¦
ã¾ã NaCl 㯠text é åã®æ±ããããªãé©å½ã§ã nacl-glibc ã dlopen/dlclose ç¹°ãè¿ãã ãã§ã¡ã¢ãªä½¿ãåããç´ æµä»æ§ã ã£ãããã¾ãã
ãã¢ã¨ãã¦ã mono 㨠v8 ããã¼ãããã¦ã¦ naclports ã«å ¥ã£ã¦ãæ°ããããã§ããããªãã両æ¹ãã«ããããªããªã£ã¦ããããªâ¦
PNaCl
ã§ã PNaCl ã©ããªã? ã£ã¦è©±ãããã¨æããã§ãããããã¾ããç¥ããªããã§ãããâ¦æ¡å¼µå ¥ã LLVM bitcode ãå architecture ã® NaCl code ã«ç¿»è¨³ãããããã§ããããã¶ãâ¦
ã¾ã¨ã
NaCl ã¯ããããä½ã¬ã¤ã¤ãªã¨ããå ¥ã£ã¦ã¦ãªããã¦ã¦ãã®ããã§ããé£ç¹ã¯ããã¥ã¡ã³ããç¡ããã¨ã§ãããã®æç« ã¯æ¸ãæ£ãããæç« ã§ããã©ãä¸çä¸è©³ãã NaCl ã«ã¤ãã¦ã®æ¦è¦æç« ãªãããããããã