| 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 |