Native Client
開發者 | Google,以及其他開發者 | ||||||
---|---|---|---|---|---|---|---|
当前版本 | SDK: Pepper 45 (2015年7月10日 ), Client:
| ||||||
预览版本 | 0.5(2011年7月28日 ) | ||||||
源代码库 | |||||||
编程语言 | C語言、C++ | ||||||
操作系统 | Cross-platform: Microsoft Windows, Linux, Mac OS, Chrome OS | ||||||
类型 | 利用沙盒技術,讓機器碼在瀏覽器上運行 | ||||||
许可协议 | New BSD license | ||||||
网站 | code |
Google Native Client(縮寫為NaCl),是一个由谷歌所發起的開放原始碼計劃,採用BSD许可证。它採用沙盒技術,讓Intel x86、ARM或MIPS子集的機器碼直接在沙盒上運行。它能夠從瀏覽器直接運行程式機器碼,獨立於使用者的作業系統之外,使Web應用程式可以用接近於機器碼運作的速度來執行,同時兼顧安全性。其功能類似於微軟的 ActiveX,但是ActiveX只支援視窗系統。
Google將這項功能合併在Chrome OS之下開發。它也可以被用來開發安全的瀏覽器外掛程式。
2017年5月31日,Google宣布放棄PNaCl轉向WebAssembly[5]。
技術內容
NaCl使用Newlib作為它的C標準函式庫,但它也支援GNU C 函式庫。
它最初只支援x86平台,但目前也支援ARM平台與x86-64。
沙盒技術
NaCl運用沙盒技术以防止外來(第三方)機器碼影響系統安全;特別是在x86平台上運用記憶體區段,限制外掛程式所能讀寫的記憶體范围。[6]
由於ARM與x86-64長模式不支援記憶體區段,因此在這些平台上NaCl的記憶體寫入地址是由沙盒過濾。[7]
機器碼驗證器
NaCl運用機器碼驗證器(Code Validator)来保證只有安全機器碼能在系統執行。由於x86/x86-64是複雜指令集,指令長度不一,透過控制流程可能隱藏非安全機器碼,從而使驗證十分耗時。NaCl運用固定長度的16或32位元組的指令束(Instruction Bundle),使機器碼驗證器設計簡單(只有約600行C語言)和高效率;[6] [8] 而運用指令束只是失去5%的執行效率。
應用軟件的移植
NaCl支援單指令流多數據流指令(如SSE、3DNow!)及多執行緒介面,應用軟件一般只需簡單的修改便可以移植到NaCl平台;在2009年一個發布會上,NaCl開發人員示範一個為NaCl平台的移植而修改了20行原始碼的H264解碼器軟件。[9]
參考資料
- ^ Stable Channel Update for Desktop. 2024年11月19日 [2024年11月19日] (英語).
- ^ Chrome for Android Update. 2024年11月19日 [2024年11月19日] (英語).
- ^ Chrome Stable for iOS Update. 2024年11月12日 [2024年11月12日] (英語).
- ^ Chrome Revision 213999. [2015-01-07]. (原始内容存档于2021-03-08).
- ^ Goodbye PNaCl, Hello WebAssembly!. Chromium Blog. [2017-05-31]. (原始内容存档于2017-05-30) (美国英语).
- ^ 6.0 6.1 Native Client: A Sandbox for Portable, Untrusted x86 Native Code
- ^ Adapting Software Fault Isolation to Contemporary CPU Architectures (PDF). [2011-09-12]. (原始内容存档 (PDF)于2011-07-23).
- ^ Index of /trunk/src/native_client/src/trusted/validator/x86. [2011-09-12]. (原始内容存档于2012-07-20).
- ^ Native CPU Performance in the Browser with Google Native Client (PDF). [2011-09-16]. (原始内容存档 (PDF)于2019-02-17).
外部連結
- (英文) NaCl計劃官網(页面存档备份,存于互联网档案馆)
- (英文) YouTube上的Google I/O 2009 Native Code for Compute Intensive Web Apps - Google I/O 2009技術專題討論
- (英文) YouTube上的Google I/O 2012 Life of a Native Client Instruction - Google I/O 2012技術專題討論