Google Native Client(縮寫為NaCl),是一个由谷歌所發起的開放原始碼計劃,採用BSD许可证。它採用沙盒技術,讓Intel x86ARMMIPS子集的機器碼直接在沙盒上運行。它能夠從瀏覽器直接運行程式機器碼,獨立於使用者的作業系統之外,使Web應用程式可以用接近於機器碼運作的速度來執行,同時兼顧安全性。其功能類似於微軟ActiveX,但是ActiveX只支援Windows系統。

Google Native Client
開發者Google,以及其他開發者
当前版本SDK: Pepper 45 (2015年7月10日,​10年前​(2015-07-10), Client:
Windows, macOS, Linux149.0.7827.156[1]在维基数据编辑(2026年6月16日,26小時前)
Android149.0.7827.114[2]在维基数据编辑(2026年6月11日,6天前)
iOS149.0.7827.137[3]在维基数据编辑(2026年6月10日,7天前)
预览版本0.5(2011年7月28日,​14年前​(2011-07-28
源代码库 編輯維基數據鏈接
编程语言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[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支援單指令流多數據流指令(如SSE3DNow!)及多執行緒介面,應用軟件一般只需簡單的修改便可以移植到NaCl平台;在2009年一個發布會上,NaCl開發人員示範一個為NaCl平台的移植而修改了20行原始碼的H264解碼器軟件。[9]

參考資料

编辑
  1. ^ Stable Channel Update for Desktop. 2026年6月16日 [2026年6月16日] (英語). 
  2. ^ Chrome for Android Update. 2026年6月11日 [2026年6月13日] (英語). 
  3. ^ Chrome Stable for iOS Update. 2026年6月10日 [2026年6月10日] (英語). 
  4. ^ Chrome Revision 213999. [2015-01-07]. (原始内容存档于2021-03-08). 
  5. ^ Goodbye PNaCl, Hello WebAssembly!. Chromium Blog. [2017-05-31]. (原始内容存档于2017-05-30) (美国英语). 
  6. ^ 6.0 6.1 Native Client: A Sandbox for Portable, Untrusted x86 Native Code
  7. ^ Adapting Software Fault Isolation to Contemporary CPU Architectures (PDF). [2011-09-12]. (原始内容存档 (PDF)于2011-07-23). 
  8. ^ Index of /trunk/src/native_client/src/trusted/validator/x86. [2011-09-12]. (原始内容存档于2012-07-20). 
  9. ^ Native CPU Performance in the Browser with Google Native Client (PDF). [2011-09-16]. (原始内容存档 (PDF)于2019-02-17). 

外部連結

编辑

📚 Artikel Terkait di Wikipedia

机器语言

机器语言(machine language)是一種指令集的體系。这种指令集称为機器碼(machine code),是電腦的CPU或GPU可直接解讀的資料。 機器碼有時也被稱為原生碼(Native Code),這個名詞比較強調某種程式語言或函式庫與執行平台相關的部份。

Java Native Access

(页面存档备份,存于互联网档案馆) Java Native Access:An easier way to access native code (页面存档备份,存于互联网档案馆) by Jeff Friesen, JavaWorld.com,2008-02-05 Protect Your Legacy Code Investment

Java本地接口

nativeString); } /*C code*/ JNIEXPORT void JNICALL Java_ClassName_MethodName (JNIEnv *env, jobject obj, jstring javaString) { /*Get the native string

通用語言運行庫

Engine 中間碼(MSIL)到機器碼(Native)編譯 類別裝載 Class Loader 開發人員使用高階程式語言撰寫程式。接下來編譯器將程式碼編譯成微軟的中繼語言(MSIL)。執行的時候CLR會將MSIL碼轉換為作業系統的原生碼(Native code)。CLR內建有即時編譯)編譯器。 Overview

Chrome应用商店

2010-05-19 [2010-06-02]. (原始内容存档于2013-08-17).  Metz, Cade. Google hints at native code in Chrome Web Store. The Register. 2010-05-26 [2010-06-02]. (原始内容存档于2010-05-30)

Eiffel

Visual Eiffel an open source implementation of Eiffel creating native code for X86 systems(Windows, Linux) NICE(页面存档备份,存于互联网档案馆) Nonprofit International

原生

Boy處理器執行的代码。要在另一个非Game Boy处理器上執行代碼,必須通過模擬器才能執行。 不過這樣的話相較於Game Boy,執行速度就沒那麼快了。 What is native code? - Definition from WhatIs.com. SearchAppArchitecture. [2019-11-22]. (原始内容存档于2021-06-19)

GNU lightning

source code repository. [2014-05-17]. (原始内容存档于2019-10-16).  GNU Smalltalk project page. [2014-05-17]. (原始内容存档于2014-04-21).  Just-In-Time Native Code. [2019-03-11]