OLD | NEW |
1 {{+bindTo:partials.standard_nacl_article}} | 1 {{+bindTo:partials.standard_nacl_article}} |
2 | 2 |
3 <section id="technical-overview"> | 3 <section id="technical-overview"> |
4 <span id="overview"></span><h1 id="technical-overview"><span id="overview"></spa
n>Technical Overview</h1> | 4 <span id="overview"></span><h1 id="technical-overview"><span id="overview"></spa
n>Technical Overview</h1> |
5 <div class="contents local" id="contents" style="display: none"> | 5 <div class="contents local" id="contents" style="display: none"> |
6 <ul class="small-gap"> | 6 <ul class="small-gap"> |
7 <li><a class="reference internal" href="#introduction" id="id2">Introduction</a>
</li> | 7 <li><a class="reference internal" href="#introduction" id="id2">Introduction</a>
</li> |
8 <li><a class="reference internal" href="#why-use-native-client" id="id3">Why use
Native Client?</a></li> | 8 <li><a class="reference internal" href="#why-use-native-client" id="id3">Why use
Native Client?</a></li> |
9 <li><a class="reference internal" href="#common-use-cases" id="id4">Common use c
ases</a></li> | 9 <li><a class="reference internal" href="#common-use-cases" id="id4">Common use c
ases</a></li> |
10 <li><p class="first"><a class="reference internal" href="#how-native-client-work
s" id="id5">How Native Client works</a></p> | 10 <li><p class="first"><a class="reference internal" href="#how-native-client-work
s" id="id5">How Native Client works</a></p> |
(...skipping 24 matching lines...) Expand all Loading... |
35 applications that use NaCl and run in Chrome across multiple platforms.</p> | 35 applications that use NaCl and run in Chrome across multiple platforms.</p> |
36 <p>A web application that uses Native Client generally consists of a combination
of | 36 <p>A web application that uses Native Client generally consists of a combination
of |
37 JavaScript, HTML, CSS, and a NaCl module that is written in a language supported | 37 JavaScript, HTML, CSS, and a NaCl module that is written in a language supported |
38 by the SDK. The NaCl SDK currently supports C and C++; as compilers for | 38 by the SDK. The NaCl SDK currently supports C and C++; as compilers for |
39 additional languages are developed, the SDK will be updated to support those | 39 additional languages are developed, the SDK will be updated to support those |
40 languages as well.</p> | 40 languages as well.</p> |
41 <img alt="/native-client/images/web-app-with-nacl.png" src="/native-client/image
s/web-app-with-nacl.png" /> | 41 <img alt="/native-client/images/web-app-with-nacl.png" src="/native-client/image
s/web-app-with-nacl.png" /> |
42 <h2 id="why-use-native-client">Why use Native Client?</h2> | 42 <h2 id="why-use-native-client">Why use Native Client?</h2> |
43 <p>Native Client open-source technology is designed to run compiled code | 43 <p>Native Client open-source technology is designed to run compiled code |
44 securely inside a browser at near-native speeds. Native Client puts web | 44 securely inside a browser at near-native speeds. Native Client puts web |
45 applications on the same playing field as traditional (locally-run) | 45 applications on the same playing field as desktop software—it provides the |
46 software—it provides the means to fully harness the client’s computa
tional | 46 means to fully harness the client’s computational resources for applicatio
ns |
47 resources for applications such as 3D games, multimedia editors, CAD modeling, | 47 such as 3D games, multimedia editors, CAD modeling, |
48 client-side data analytics, and interactive simulations. | 48 client-side data analytics, and interactive simulations. |
49 Native Client also aims to give C and C++ (and eventually other languages) the | 49 Native Client also aims to give C and C++ (and eventually other languages) the |
50 same level of portability and safety that JavaScript provides on the web today.<
/p> | 50 same level of portability and safety that JavaScript provides on the web today.<
/p> |
51 <p>Here are a few of the key benefits that Native Client offers:</p> | 51 <p>Important benefits of Native Client include:</p> |
52 <ul class="small-gap"> | 52 <ul class="small-gap"> |
53 <li><strong>Graphics, audio, and much more:</strong> Run native code modules tha
t render 2D | 53 <li><strong>Graphics, audio, and much more:</strong> Running native code modules
that render 2D |
54 and 3D graphics, play audio, respond to mouse and keyboard events, run on | 54 and 3D graphics, play audio, respond to mouse and keyboard events, run on |
55 multiple threads, and access memory directly—all without requiring | 55 multiple threads, and access memory directly—all without requiring |
56 the user to install a plugin.</li> | 56 the user to install a plugin.</li> |
57 <li><strong>Portability:</strong> Write your applications once and you’ll
be able to run them | 57 <li><strong>Portability:</strong> Writing your applications once and running the
m on operating |
58 across operating systems (Windows, Linux, Mac, and Chrome OS) and CPU | 58 systems (Windows, Linux, Mac, and Chrome OS) and CPU architectures (x86 and |
59 architectures (x86 and ARM).</li> | 59 ARM).</li> |
60 <li><strong>Easy migration path to the web:</strong> Many developers and compani
es have years | 60 <li><strong>Easy migration path to the web:</strong> Leveraging years of work in
existing |
61 of work invested in existing desktop applications. Native Client makes the | 61 desktop applications. Native Client makes the transition from the desktop to a |
62 transition from the desktop to a web application significantly easier because | 62 web application significantly easier because it supports C and C++.</li> |
63 it supports C and C++.</li> | 63 <li><strong>Security:</strong> Protecting the user’s system from malicious
or buggy |
64 <li><strong>Security:</strong> Native Client uses a double sandbox model designe
d to protect | 64 applications through Native Client’s double sandbox model. This model offe
rs |
65 the user’s system from malicious or buggy applications. This model offers
the | 65 the safety of traditional web applications without sacrificing performance and |
66 safety of traditional web applications without sacrificing performance and | |
67 without requiring users to install a plugin.</li> | 66 without requiring users to install a plugin.</li> |
68 <li><strong>Performance:</strong> Native Client allows web applications to run a
t speeds | 67 <li><strong>Performance:</strong> Running at speeds comparable to desktop applic
ations (within |
69 comparable to desktop applications (within 5-15% of native speed). | 68 5-15% of native speed). Native Client also allows applications to harness all |
70 Native Client also allows applications to harness all available CPU cores via | 69 available CPU cores via a threading API; this enables demanding applications |
71 a threading API; this enables demanding applications such as console-quality | 70 such as console-quality games to run inside the browser.</li> |
72 games to run inside the browser.</li> | |
73 </ul> | 71 </ul> |
74 <h2 id="common-use-cases">Common use cases</h2> | 72 <h2 id="common-use-cases">Common use cases</h2> |
75 <p>Typical use cases for Native Client include the following:</p> | 73 <p>Typical use cases for Native Client include the following:</p> |
76 <ul class="small-gap"> | 74 <ul class="small-gap"> |
77 <li><strong>Existing software components:</strong> With support for C and C++, N
ative | 75 <li><strong>Existing software components:</strong> With support for C and C++, N
ative |
78 Client enables you to reuse existing software modules in | 76 Client lets you to reuse existing software modules in web applications. You |
79 web applications—you don’t need to rewrite and debug code | 77 don’t need to rewrite and debug code that already works.</li> |
80 that’s already proven to work well.</li> | |
81 <li><strong>Legacy desktop applications:</strong> Native Client provides a smoot
h migration | 78 <li><strong>Legacy desktop applications:</strong> Native Client provides a smoot
h migration |
82 path from desktop applications to the web. You can port and recompile existing | 79 path from desktop applications to the web. You can port and recompile existing |
83 code for the computation engine of your application directly to Native Client, | 80 code for the computation engine of your application directly to Native Client, |
84 and need repurpose only the user interface and event handling portions to the | 81 and need rebuild only the user interface and event handling portions for the |
85 new browser platform. Native Client allows you to embed existing functionality | 82 browser.</li> |
86 directly into the browser. At the same time, your application can take | |
87 advantage of things the browser does well: handling user interaction and | |
88 processing events, based on the latest developments in HTML5.</li> | |
89 <li><strong>Heavy computation in enterprise applications:</strong> Native Client
can handle the | 83 <li><strong>Heavy computation in enterprise applications:</strong> Native Client
can handle the |
90 number crunching required by large-scale enterprise applications. To ensure | 84 number crunching required by large-scale enterprise applications. To ensure |
91 protection of user data, Native Client enables you to build complex | 85 protection of user data, Native Client enables you to build complex |
92 cryptographic algorithms directly into the browser so that unencrypted data | 86 cryptographic algorithms directly into the browser so that unencrypted data |
93 never goes out over the network.</li> | 87 never goes out over the network.</li> |
94 <li><strong>Multimedia applications:</strong> Codecs for processing sounds, imag
es, and movies | 88 <li><strong>Multimedia applications:</strong> Codecs for processing sounds, imag
es, and movies |
95 can be added to the browser in a Native Client module.</li> | 89 can be added to the browser in a Native Client module.</li> |
96 <li><strong>Games:</strong> Native Client lets web applications run at close to
native | 90 <li><strong>Games:</strong> Native Client lets web applications run at close to
native |
97 speed, reuse existing multithreaded/multicore C/C++ code bases, and | 91 speed, reuse existing multithreaded/multicore C/C++ code bases, and |
98 access low-latency audio, networking APIs, and OpenGL ES with programmable | 92 access low-latency audio, networking APIs, and OpenGL ES with programmable |
99 shaders. Native Client is a natural fit for running a physics engine or | 93 shaders. Native Client is a natural fit for running a physics engine or |
100 artificial intelligence module that powers a sophisticated web game. | 94 artificial intelligence module that powers a sophisticated web game. |
101 Native Client also enables applications to run unchanged across | 95 Native Client also enables applications to run unchanged across |
102 many platforms.</li> | 96 many platforms.</li> |
103 <li><strong>Any application that requires acceleration</strong>: Native Client f
its seamlessly | 97 <li><strong>Any application that requires acceleration</strong>: Native Client f
its seamlessly |
104 into web applications—it’s up to you to decide to what extent to use
it. | 98 into web applications—it’s up to you to decide to what extent to use
it. |
105 Use of Native Client covers the full spectrum from complete applications to | 99 Use of Native Client covers the full spectrum from complete applications to |
106 small optimized routines that accelerate vital parts of web apps.</li> | 100 small optimized routines that accelerate vital parts of web applications.</li> |
107 </ul> | 101 </ul> |
108 <h2 id="how-native-client-works"><span id="link-how-nacl-works"></span>How Nativ
e Client works</h2> | 102 <h2 id="how-native-client-works"><span id="link-how-nacl-works"></span>How Nativ
e Client works</h2> |
109 <p>Native Client is an umbrella name for a set of interrelated software componen
ts | 103 <p>Native Client is an umbrella name for a set of related software components th
at |
110 that work together to provide a way to develop C/C++ applications and run them | 104 provide a way to develop C/C++ applications and run them securely on the web.</p
> |
111 securely on the web.</p> | |
112 <p>At a high level, Native Client consists of:</p> | 105 <p>At a high level, Native Client consists of:</p> |
113 <ul class="small-gap"> | 106 <ul class="small-gap"> |
114 <li><strong>Toolchains</strong>: collections of development tools (compilers, li
nkers, etc.) | 107 <li><strong>Toolchains</strong>: Collections of development tools (compilers, li
nkers, etc.) |
115 that transform C/C++ code to Native Client modules.</li> | 108 that transform C/C++ code to Native Client modules.</li> |
116 <li><strong>Runtime components</strong>: components embedded in the browser or o
ther | 109 <li><strong>Runtime components</strong>: components embedded in the browser or o
ther |
117 host platforms that allow execution of Native Client modules | 110 host platforms that allow execution of Native Client modules |
118 securely and efficiently.</li> | 111 securely and efficiently.</li> |
119 </ul> | 112 </ul> |
120 <p>The following diagram shows how these components interact:</p> | 113 <p>The following diagram shows how these components interact:</p> |
121 <img alt="/native-client/images/nacl-pnacl-component-diagram.png" src="/native-c
lient/images/nacl-pnacl-component-diagram.png" /> | 114 <img alt="/native-client/images/nacl-pnacl-component-diagram.png" src="/native-c
lient/images/nacl-pnacl-component-diagram.png" /> |
122 <p>The left side of the diagram shows how to use Portable Native Client | 115 <p>The left side of the diagram shows how to use Portable Native Client |
123 (PNaCl, pronounced “pinnacle”). Developers use the PNaCl toolchain | 116 (PNaCl, pronounced “pinnacle”). Developers use the PNaCl toolchain |
124 to produce a single, portable (<strong>pexe</strong>) module. At runtime, a tran
slator | 117 to produce a single, portable (<strong>pexe</strong>) module. At runtime, a tran
slator |
125 built into the browser translates the pexe into native code for the | 118 built into the browser translates the pexe into native code for the |
126 relevant client architecture.</p> | 119 relevant client architecture. Translation occurs before any code is executed.</p
> |
127 <p>The right side of the diagram shows how to use traditional (non-portable) | 120 <p>The right side of the diagram shows how to use (non-portable) Native Client. |
128 Native Client. Developers use a nacl-gcc based toolchain to produce multiple | 121 Developers use a nacl-gcc based toolchain to produce multiple |
129 architecture-dependent (<strong>nexe</strong>) modules, which are packaged into
an | 122 architecture-dependent (<strong>nexe</strong>) modules, which are packaged into
an |
130 application. At runtime, the browser decides which nexe to load based | 123 application. At runtime, the browser decides which nexe to load based |
131 on the architecture of the client machine.</p> | 124 on the architecture of the client machine.</p> |
132 <h3 id="security">Security</h3> | 125 <h3 id="security">Security</h3> |
133 <p>Since Native Client permits the execution of native code on client machines, | 126 <p>Since Native Client permits the execution of native code on client machines, |
134 special security measures have to be implemented:</p> | 127 special security measures have to be implemented:</p> |
135 <ul class="small-gap"> | 128 <ul class="small-gap"> |
136 <li>The NaCl sandbox ensures that code accesses system resources only through | 129 <li>The NaCl sandbox ensures that code accesses system resources only through |
137 safe, whitelisted APIs, and operates within its limits without attempting to | 130 safe, whitelisted APIs, and operates within its limits without attempting to |
138 interfere with other code running either within the browser or outside it.</li> | 131 interfere with other code running either within the browser or outside it.</li> |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 subsequent versions of Pepper/Chrome. The SDK includes multiple versions of the | 213 subsequent versions of Pepper/Chrome. The SDK includes multiple versions of the |
221 Pepper APIs to help developers make adjustments to API changes and take | 214 Pepper APIs to help developers make adjustments to API changes and take |
222 advantage of new features: <a class="reference external" href="/native-client/pe
pper_stable">stable</a>, <a class="reference external" href="/native-client/pepp
er_beta">beta</a> and <a class="reference external" href="/native-client/pepper_
dev">dev</a>.</p> | 215 advantage of new features: <a class="reference external" href="/native-client/pe
pper_stable">stable</a>, <a class="reference external" href="/native-client/pepp
er_beta">beta</a> and <a class="reference external" href="/native-client/pepper_
dev">dev</a>.</p> |
223 <h2 id="where-to-start">Where to start</h2> | 216 <h2 id="where-to-start">Where to start</h2> |
224 <p>The <a class="reference internal" href="/native-client/quick-start.html"><em>
Quick Start</em></a> document provides links to downloads and | 217 <p>The <a class="reference internal" href="/native-client/quick-start.html"><em>
Quick Start</em></a> document provides links to downloads and |
225 documentation that should help you get started with developing and distributing | 218 documentation that should help you get started with developing and distributing |
226 Native Client applications.</p> | 219 Native Client applications.</p> |
227 </section> | 220 </section> |
228 | 221 |
229 {{/partials.standard_nacl_article}} | 222 {{/partials.standard_nacl_article}} |
OLD | NEW |