Native Client
Google Native Client(缩写为NaCl),是一个由谷歌所发起的开放原始码计划,采用BSD许可证。它采用沙盒技术,让Intel x86、ARM或MIPS子集的机器代码直接在沙盒上运行。它能够从浏览器直接运行程序机器代码,独立于用户的操作系统之外,使Web应用程式可以用接近于机器代码运作的速度来执行,同时兼顾安全性。其功能类似于微软的 ActiveX,但是ActiveX只支持视窗系统。
开发者 | 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将这项功能合并在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年10月29日 [2024年10月30日] (英语).
- ^ Chrome for Android Update. 2024年10月29日 [2024年10月30日] (英语).
- ^ Chrome Stable for iOS Update. 2024年10月29日 [2024年10月30日] (英语).
- ^ 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技术专题讨论