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