上面是一个浏览器的架构图,JS引擎+渲染引擎+外壳Shell+内核 4部分构成了浏览器的主体,传统的插件(上图左部)通过NPAPI与浏览器通信,Native Client(上图右部)通过PPAPI与浏览器通信,只有浏览器内核可以直接访问本地系统OS。
【Native Client】
Native Client是Chrome浏览器里面的一个沙箱,它允许在沙箱里面运行本地码程序,使得程序执行速度接近系统的本地程序。同时它又制定了很多沙箱策略来限制本地程序安全的执行。
【可信程序和不可信程序】
在Chrome浏览器里面共有两种类型的程序存在,可信程序(上图黑色边框部分)和不可信程序(上图蓝色边框部分)。可信程序认为是安全的,能够访问一切的本地资源;不可信程序由于存在安全隐患,将其放入沙箱之中,不能直接访问本地资源。而传统的NPAPI插件是被作为可信程序,所以其存在安全隐患。
【基于Native Client的编程框架】
通常在Native Client中运行的本地程序只是利用了CPU+内存的执行优势,它只有一个newlib或者glibc库可以调用,而我们在Native Client搭建了一个编程框架,提供更多的支持(信号量、多线程等)给本地程序,使得本地程序计算能力增强。
编程框架本身是作为可信程序的,能够访问一切本地资源。因此在这个新的模型中,本地程序可以跑自己的逻辑,同时需要访问本地资源时,通过PPAPI接口调用就可以了。