跳转到内容

Native Client:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
无编辑摘要
InternetArchiveBot留言 | 贡献
Reformat 1 URL (Wayback Medic 2.5)) #IABot (v2.0.9.5) (GreenC bot
 
(未显示8个用户的11个中间版本)
第1行: 第1行:
{{noteTA|G1=IT}}
{{Infobox software
{{Infobox software
| name = Google Native Client
| name = Google Native Client
| logo = Google Chrome icon (2011).svg
| logo = Google Chrome icon (March 2011).svg
| screenshot =<!-- Deleted image removed: [[Image:Native-client-python-repl.png|200px]] -->
| screenshot =<!-- Deleted image removed: [[Image:Native-client-python-repl.png|200px]] -->
| caption = A [[Python]] [[read-eval-print loop|REPL]] running under Native Client inside a web browser.
| caption = A [[Python]] [[read-eval-print loop|REPL]] running under Native Client inside a web browser.
| latest release version = SDK: [http://developer.chrome.com/native-client/sdk/release-notes Pepper 39] <small>({{start date and age|df=yes|2014|09|26}})</small>, Client: {{Latest stable software release/Google Chrome}}
| latest release version = SDK: [http://developer.chrome.com/native-client/sdk/release-notes Pepper 45] <small>({{start date and age|df=yes|2015|07|10}})</small>, Client: {{Latest stable software release/Google Chrome}}
| latest release date =
| latest release date =
| latest preview version = [http://code.google.com/chrome/nativeclient/docs/releasenotes.html 0.5]
| latest preview version = [http://code.google.com/chrome/nativeclient/docs/releasenotes.html 0.5]
第11行: 第12行:
| programming language = [[C語言]]、[[C++]]
| programming language = [[C語言]]、[[C++]]
| operating system = [[Cross-platform]]: [[Microsoft Windows]], [[Linux]], [[Mac OS]], [[Google Chrome OS|Chrome OS]]
| operating system = [[Cross-platform]]: [[Microsoft Windows]], [[Linux]], [[Mac OS]], [[Google Chrome OS|Chrome OS]]
| status = 產品 (NaCl, PNaCl<ref>[http://src.chromium.org/viewvc/chrome?view=revision&revision=213999 Chrome Revision 213999]</ref>)
| status = 產品 (NaCl, PNaCl<ref>{{Cite web |url=http://src.chromium.org/viewvc/chrome?view=revision&revision=213999 |title=Chrome Revision 213999 |access-date=2015-01-07 |archive-date=2021-03-08 |archive-url=https://web.archive.org/web/20210308120902/https://src.chromium.org/viewvc/chrome?view=revision&revision=213999 }}</ref>)
| genre = 利用[[沙盒 (計算機安全)|沙盒]]技術,讓[[機器碼]]在[[瀏覽器]]上運行
| genre = 利用[[沙盒 (計算機安全)|沙盒]]技術,讓[[機器碼]]在[[瀏覽器]]上運行
| license = [[BSD licenses|New BSD license]]
| license = [[BSD licenses|New BSD license]]
第17行: 第18行:
}}
}}
{{Portal|Free software}}
{{Portal|Free software}}
'''Google Native Client'''(縮寫為 {{lang|en|NaCl}}),是一个由[[谷歌]]所發起的[[開放原始碼]]計劃,採用[[BSD许可证]]。它採用[[沙盒 (計算機安全)|沙盒]]技術,讓[[Intel x86]]、[[ARM]]或[[MIPS]]子集的[[機器碼]]直接在沙盒上運行。它能夠從[[瀏覽器]]直接運行程式機器碼,獨立於使用者的作業系統之外,使[[Web應用程式]]可以用接近於機器碼運作的速度來執行,同時兼顧安全性。其功能類似於[[微軟]]的 [[ActiveX]],但是ActiveX只支援視窗系統。
'''Google Native Client'''(縮寫為'''{{lang|en|NaCl}}'''),是一个由[[谷歌]]所發起的[[開放原始碼]]計劃,採用[[BSD许可证]]。它採用[[沙盒 (計算機安全)|沙盒]]技術,讓[[Intel x86]]、[[ARM]]或[[MIPS]]子集的[[機器碼]]直接在沙盒上運行。它能夠從[[瀏覽器]]直接運行程式機器碼,獨立於使用者的作業系統之外,使[[Web應用程式]]可以用接近於機器碼運作的速度來執行,同時兼顧安全性。其功能類似於[[微軟]]的 [[ActiveX]],但是ActiveX只支援視窗系統。


Google將這項功能合併在[[Chrome OS]]之下開發。
Google將這項功能合併在[[Chrome OS]]之下開發。它也可以被用來開發安全的[[瀏覽器]][[外掛]]程式

2017年5月31日,Google宣布放棄PNaCl轉向[[WebAssembly]]<ref>{{Cite news|url=https://blog.chromium.org/2017/05/goodbye-pnacl-hello-webassembly.html|title=Goodbye PNaCl, Hello WebAssembly!|work=Chromium Blog|access-date=2017-05-31|language=en-US|archive-date=2017-05-30|archive-url=https://web.archive.org/web/20170530233036/https://blog.chromium.org/2017/05/goodbye-pnacl-hello-webassembly.html|dead-url=no}}</ref>。


==技術內容==
==技術內容==
第29行: 第32行:
NaCl運用沙盒技术以防止外來(第三方)機器碼影響系統安全;特別是在[[x86]]平台上運用[[記憶體區段]],限制[[外掛程式]]所能讀寫的記憶體范围。<ref name="Sandboxx86">[http://research.google.com/pubs/archive/34913.pdf Native Client: A Sandbox for Portable, Untrusted x86 Native Code]</ref>
NaCl運用沙盒技术以防止外來(第三方)機器碼影響系統安全;特別是在[[x86]]平台上運用[[記憶體區段]],限制[[外掛程式]]所能讀寫的記憶體范围。<ref name="Sandboxx86">[http://research.google.com/pubs/archive/34913.pdf Native Client: A Sandbox for Portable, Untrusted x86 Native Code]</ref>


由於ARM與x86-64[[長模式]]不支援記憶體區段,因此在這些平台上NaCl的記憶體寫入地址是由沙盒過濾。<ref>[http://nativeclient.googlecode.com/svn/data/site/NaCl_SFI.pdf Adapting Software Fault Isolation to Contemporary CPU Architectures]</ref>
由於ARM與x86-64[[長模式]]不支援記憶體區段,因此在這些平台上NaCl的記憶體寫入地址是由沙盒過濾。<ref>{{Cite web |url=http://nativeclient.googlecode.com/svn/data/site/NaCl_SFI.pdf |title=Adapting Software Fault Isolation to Contemporary CPU Architectures |accessdate=2011-09-12 |archive-date=2011-07-23 |archive-url=https://web.archive.org/web/20110723064729/http://nativeclient.googlecode.com/svn/data/site/NaCl_SFI.pdf |dead-url=no }}</ref>


===機器碼驗證器===
===機器碼驗證器===
NaCl運用機器碼驗證器(Code Validator)来保證只有安全機器碼能在系統執行。由於x86/x86-64是[[複雜指令集]],[[指令]]長度不一,透過[[控制流程]]可能隱藏非安全機器碼,從而使驗證十分耗時。NaCl運用固定長度的16或32[[位元組]]的指令束(Instruction Bundle),使機器碼驗證器設計簡單(只有約600行[[C語言]])和高效率;<ref name="Sandboxx86"/> <ref>[http://src.chromium.org/viewvc/native_client/trunk/src/native_client/src/trusted/validator/x86/ Index of /trunk/src/native_client/src/trusted/validator/x86]</ref> 而運用指令束只是失去5%的執行效率。
NaCl運用機器碼驗證器(Code Validator)来保證只有安全機器碼能在系統執行。由於x86/x86-64是[[複雜指令集]],[[指令]]長度不一,透過[[控制流程]]可能隱藏非安全機器碼,從而使驗證十分耗時。NaCl運用固定長度的16或32[[位元組]]的指令束(Instruction Bundle),使機器碼驗證器設計簡單(只有約600行[[C語言]])和高效率;<ref name="Sandboxx86"/> <ref>{{Cite web |url=http://src.chromium.org/viewvc/native_client/trunk/src/native_client/src/trusted/validator/x86/ |title=Index of /trunk/src/native_client/src/trusted/validator/x86 |accessdate=2011-09-12 |archive-date=2012-07-20 |archive-url=https://archive.today/20120720193306/http://src.chromium.org/viewvc/native_client/trunk/src/native_client/src/trusted/validator/x86/ |dead-url=no }}</ref> 而運用指令束只是失去5%的執行效率。


== 應用軟件的移植 ==
== 應用軟件的移植 ==
NaCl支援[[單指令流多數據流]]指令(如[[SSE]]、[[3DNow!]])及[[多執行緒]]介面,應用軟件一般只需簡單的修改便可以移植到NaCl平台;在2009年一個發布會上,NaCl開發人員示範一個為NaCl平台的移植而修改了20行原始碼的[[H264]]解碼器軟件。<ref>[http://assets.en.oreilly.com/1/event/29/Native%20CPU%20Performance%20in%20the%20Browser%20with%20Google%20Native%20Client%20Presentation.pdf Native CPU Performance in the Browser with Google Native Client]</ref>
NaCl支援[[單指令流多數據流]]指令(如[[SSE]]、[[3DNow!]])及[[多執行緒]]介面,應用軟件一般只需簡單的修改便可以移植到NaCl平台;在2009年一個發布會上,NaCl開發人員示範一個為NaCl平台的移植而修改了20行原始碼的[[H264]]解碼器軟件。<ref>{{Cite web |url=http://assets.en.oreilly.com/1/event/29/Native%20CPU%20Performance%20in%20the%20Browser%20with%20Google%20Native%20Client%20Presentation.pdf |title=Native CPU Performance in the Browser with Google Native Client |accessdate=2011-09-16 |archive-date=2019-02-17 |archive-url=https://web.archive.org/web/20190217094628/http://assets.en.oreilly.com/1/event/29/Native%20CPU%20Performance%20in%20the%20Browser%20with%20Google%20Native%20Client%20Presentation.pdf |dead-url=no }}</ref>


== 參考資料 ==
== 參考資料 ==
第41行: 第44行:


==外部連結==
==外部連結==
* {{en}} [http://code.google.com/p/nativeclient/ NaCl計劃官網]
* {{en}} [http://code.google.com/p/nativeclient/ NaCl計劃官網]{{Wayback|url=http://code.google.com/p/nativeclient/ |date=20100722230056 }}
* {{en}} {{Youtube|id=2xV_0pTpNj0|title=Google I/O 2009 Native Code for Compute Intensive Web Apps}} - [[Google I/O]] 2009技術專題討論
* {{en}} {{Youtube|id=2xV_0pTpNj0|title=Google I/O 2009 Native Code for Compute Intensive Web Apps}} - [[Google I/O]] 2009技術專題討論
* {{en}} {{Youtube|id=KOsJIhmeXoc|title=Google I/O 2012 Life of a Native Client Instruction}} - Google I/O 2012技術專題討論
* {{en}} {{Youtube|id=KOsJIhmeXoc|title=Google I/O 2012 Life of a Native Client Instruction}} - Google I/O 2012技術專題討論

2023年9月16日 (六) 10:34的最新版本

Google Native Client
開發者Google,以及其他開發者
当前版本
編輯維基數據鏈接
源代码库 編輯維基數據鏈接
编程语言C語言C++
操作系统Cross-platform: Microsoft Windows, Linux, Mac OS, Chrome OS
类型利用沙盒技術,讓機器碼瀏覽器上運行
许可协议New BSD license
网站code.google.com/p/nativeclient

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

Google將這項功能合併在Chrome OS之下開發。它也可以被用來開發安全的瀏覽器外掛程式。

2017年5月31日,Google宣布放棄PNaCl轉向WebAssembly[6]

技術內容

[编辑]

NaCl使用Newlib作為它的C標準函式庫,但它也支援GNU C 函式庫

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

沙盒技術

[编辑]

NaCl運用沙盒技术以防止外來(第三方)機器碼影響系統安全;特別是在x86平台上運用記憶體區段,限制外掛程式所能讀寫的記憶體范围。[7]

由於ARM與x86-64長模式不支援記憶體區段,因此在這些平台上NaCl的記憶體寫入地址是由沙盒過濾。[8]

機器碼驗證器

[编辑]

NaCl運用機器碼驗證器(Code Validator)来保證只有安全機器碼能在系統執行。由於x86/x86-64是複雜指令集指令長度不一,透過控制流程可能隱藏非安全機器碼,從而使驗證十分耗時。NaCl運用固定長度的16或32位元組的指令束(Instruction Bundle),使機器碼驗證器設計簡單(只有約600行C語言)和高效率;[7] [9] 而運用指令束只是失去5%的執行效率。

應用軟件的移植

[编辑]

NaCl支援單指令流多數據流指令(如SSE3DNow!)及多執行緒介面,應用軟件一般只需簡單的修改便可以移植到NaCl平台;在2009年一個發布會上,NaCl開發人員示範一個為NaCl平台的移植而修改了20行原始碼的H264解碼器軟件。[10]

參考資料

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

外部連結

[编辑]