Native Client

Google Native Client(缩写为),是一个由谷歌所发起的开放原代码计划,采用BSD许可证。它采用沙盒技术,让Intel x86ARMMIPS子集的机器码直接在沙盒上运行。它能够从浏览器直接运行程序机器码,独立于用户的操作系统之外,使Web应用程序可以用接近于机器码运作的速度来运行,同时兼顾安全性。其功能类似于微软ActiveX,但是ActiveX只支持窗口系统。

Google Native Client
开发者Google,以及其他开发者
当前版本
源代码库
编程语言C语言C++
操作系统Cross-platform: Microsoft Windows, Linux, Mac OS, Chrome OS
类型利用沙盒技术,让机器码浏览器上运行
许可协议New BSD license
网站code.google.com/p/nativeclient

Google将这项功能合并在Chrome OS之下开发。它也可以被用来开发安全的浏览器插件程序。

2017年5月31日,Google宣布放弃PNaCl转向WebAssembly[2]

技术内容

NaCl使用Newlib作为它的C标准函数库,但它也支持GNU C 函数库

它最初只支持x86平台,但目前也支持ARM平台与x86-64

沙盒技术

NaCl运用沙盒技术以防止外来(第三方)机器码影响系统安全;特别是在x86平台上运用内存区段,限制插件程序所能读写的内存范围。[3]

由于ARM与x86-64长模式不支持内存区段,因此在这些平台上NaCl的内存写入地址是由沙盒过滤。[4]

机器码验证器

NaCl运用机器码验证器(Code Validator)来保证只有安全机器码能在系统运行。由于x86/x86-64是复杂指令集指令长度不一,通过控制流程可能隐藏非安全机器码,从而使验证十分耗时。NaCl运用固定长度的16或32字节的指令束(Instruction Bundle),使机器码验证器设计简单(只有约600行C语言)和高效率;[3] [5] 而运用指令束只是失去5%的运行效率。

应用软件的移植

NaCl支持单指令流多数据流指令(如SSE3DNow!)及多线程接口,应用软件一般只需简单的修改便可以移植到NaCl平台;在2009年一个发布会上,NaCl开发人员示范一个为NaCl平台的移植而修改了20行原代码的H264解码器软件。[6]

参考数据

  1. https://developer.chrome.com/native-client/sdk/release-notes#chrome-pepper-49.
  2. . Chromium Blog. [2017-05-31]. (原始内容存档于2017-05-30) (美国英语).
  3. Native Client: A Sandbox for Portable, Untrusted x86 Native Code
  4. (PDF). [2011-09-12]. (原始内容存档 (PDF)于2011-07-23).
  5. . [2011-09-12]. (原始内容存档于2012-07-20).
  6. (PDF). [2011-09-16]. (原始内容存档 (PDF)于2019-02-17).

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.