2

我是 Native Client 的新手;也是插件/扩展的新手。让我印象深刻的是插件/扩展在某些方面比 NaCl“更好”:

  1. 可以在任何地方/任何方式编译插件/扩展以生成普通的旧 DLL 或 .so;NaCl 需要仅由 NaCl 工具链生成的二进制文件。

  2. 插件/扩展可以跨浏览器移植(例如,它应该在 FIrefox 等以及 Chrome 中运行)。这是因为插件/扩展遵循 Netscape 3 中引入的事实上的标准。

如果这一切都是真的,那么 NaCl 相对于插件/扩展的优势是什么?

4

2 回答 2

7

一句话:安全。NPAPI 插件是不可沙盒的。它们是本机代码,在进程外和浏览器的沙箱之外运行,这意味着它们可以在您的机器上执行任何操作。

另一方面,NaCl 在 Chrome 的沙箱中运行,并且只提供对一组定义良好的 API 的访问。巧妙的编译技巧确保代码不会中断并开始(有意或无意地)恶意执行不受信任的方法。

http://www.chromium.org/nativeclient/getting-started/getting-started-background-and-basics是概述差异的好资源。我建议至少略读一下,以了解 NaCl 试图达到的目标。

于 2012-03-15T08:43:53.787 回答
7

首先,您一直在说“插件/扩展”,但扩展和 NPAPI 插件完全不同。NPAPI 插件是二进制的,并且(如您所说)是跨浏览器的。扩展是每个浏览器的;每个浏览器都有自己的一组扩展 API 和功能,但它们通常是用 HTML/CSS/JS 编写的。

至于您的问题:除了另一个答案中提到的非常重要的安全方面:平台可移植性。如果你想在 NPAPI 中进行绘图、事件处理、播放声音等,你需要编写三个完全不同的实现——Windows、Mac 和 Linux——并且你需要提供三个单独的插件副本。NaCl/Pepper 对一切都有平台中立的抽象。

于 2012-03-15T09:21:53.607 回答