blob: 4a3b43e8b2a952d9156bd73fc1c1a1b034d92a2d [file] [log] [blame]
[email protected]bde3d5d2014-01-23 19:26:041{{+bindTo:partials.standard_nacl_article}}
2
bradnelson720c608e2017-05-30 20:51:403<b><font color="#cc0000">
4NOTE:
5Deprecation of the technologies described here has been announced
6for platforms other than ChromeOS.<br/>
7Please visit our
8<a href="/native-client/migration">migration guide</a>
9for details.
10</font></b>
11<hr/><section id="frequently-asked-questions">
[email protected]bde3d5d2014-01-23 19:26:0412<h1 id="frequently-asked-questions">Frequently Asked Questions</h1>
[email protected]26420f22014-01-24 18:06:1313<div class="contents local" id="contents" style="display: none">
[email protected]bde3d5d2014-01-23 19:26:0414<ul class="small-gap">
[email protected]81156022014-07-09 22:04:5515<li><p class="first"><a class="reference internal" href="#what-is-native-client-good-for" id="id1">What is Native Client Good For?</a></p>
[email protected]bde3d5d2014-01-23 19:26:0416<ul class="small-gap">
[email protected]81156022014-07-09 22:04:5517<li><a class="reference internal" href="#why-did-google-build-native-client" id="id2">Why did Google build Native Client?</a></li>
18<li><a class="reference internal" href="#when-should-i-use-portable-native-client-instead-of-native-client" id="id3">When should I use Portable Native Client instead of Native Client?</a></li>
19<li><a class="reference internal" href="#when-should-i-use-portable-native-client-native-client" id="id4">When should I use Portable Native Client / Native Client?</a></li>
20<li><a class="reference internal" href="#how-fast-does-code-run-in-portable-native-client" id="id5">How fast does code run in Portable Native Client?</a></li>
21<li><a class="reference internal" href="#why-use-portable-native-client-instead-of-technology-x" id="id6">Why use Portable Native Client instead of <em>&lt;technology X&gt;</em>?</a></li>
22<li><a class="reference internal" href="#if-i-want-direct-access-to-the-os-should-i-use-native-client" id="id7">If I want direct access to the OS, should I use Native Client?</a></li>
[email protected]bde3d5d2014-01-23 19:26:0423</ul>
24</li>
[email protected]81156022014-07-09 22:04:5525<li><p class="first"><a class="reference internal" href="#development-environments-and-tools" id="id8">Development Environments and Tools</a></p>
[email protected]bde3d5d2014-01-23 19:26:0426<ul class="small-gap">
[email protected]81156022014-07-09 22:04:5527<li><a class="reference internal" href="#what-development-environment-and-development-operating-system-do-you-recommend" id="id9">What development environment and development operating system do you recommend?</a></li>
28<li><a class="reference internal" href="#i-m-not-familiar-with-native-development-tools-can-i-still-use-the-native-client-sdk" id="id10">I&#8217;m not familiar with native development tools, can I still use the Native Client SDK?</a></li>
[email protected]bde3d5d2014-01-23 19:26:0429</ul>
30</li>
[email protected]81156022014-07-09 22:04:5531<li><p class="first"><a class="reference internal" href="#openness-and-supported-architectures-and-languages" id="id11">Openness, and Supported Architectures and Languages</a></p>
[email protected]bde3d5d2014-01-23 19:26:0432<ul class="small-gap">
[email protected]81156022014-07-09 22:04:5533<li><a class="reference internal" href="#is-native-client-open-is-it-a-standard" id="id12">Is Native Client open? Is it a standard?</a></li>
jfb04da1492015-02-12 23:04:2734<li><a class="reference internal" href="#how-can-i-contribute-to-native-client" id="id13">How can I contribute to Native Client?</a></li>
35<li><a class="reference internal" href="#what-are-the-supported-instruction-set-architectures" id="id14">What are the supported instruction set architectures?</a></li>
36<li><a class="reference internal" href="#do-i-have-to-use-c-or-c-i-d-really-like-to-use-another-language" id="id15">Do I have to use C or C++? I&#8217;d really like to use another language.</a></li>
37<li><a class="reference internal" href="#do-you-only-support-chrome-what-about-other-browsers" id="id16">Do you only support Chrome? What about other browsers?</a></li>
38<li><a class="reference internal" href="#what-s-the-difference-between-npapi-and-pepper" id="id17">What&#8217;s the difference between NPAPI and Pepper?</a></li>
39<li><a class="reference internal" href="#is-npapi-part-of-the-native-client-sdk" id="id18">Is NPAPI part of the Native Client SDK?</a></li>
40<li><a class="reference internal" href="#does-native-client-support-simd-vector-instructions" id="id19">Does Native Client support SIMD vector instructions?</a></li>
41<li><a class="reference internal" href="#can-i-use-native-client-for-3d-graphics" id="id20">Can I use Native Client for 3D graphics?</a></li>
42<li><a class="reference internal" href="#does-native-client-support-concurrency-parallelism" id="id21">Does Native Client support concurrency/parallelism?</a></li>
[email protected]bde3d5d2014-01-23 19:26:0443</ul>
44</li>
jfb04da1492015-02-12 23:04:2745<li><p class="first"><a class="reference internal" href="#coming-soon" id="id22">Coming Soon</a></p>
[email protected]bde3d5d2014-01-23 19:26:0446<ul class="small-gap">
jfb04da1492015-02-12 23:04:2747<li><a class="reference internal" href="#do-native-client-modules-have-access-to-external-devices" id="id23">Do Native Client modules have access to external devices?</a></li>
[email protected]bde3d5d2014-01-23 19:26:0448</ul>
49</li>
jfb04da1492015-02-12 23:04:2750<li><p class="first"><a class="reference internal" href="#security-and-privacy" id="id24">Security and Privacy</a></p>
[email protected]bde3d5d2014-01-23 19:26:0451<ul class="small-gap">
jfb04da1492015-02-12 23:04:2752<li><a class="reference internal" href="#what-happens-to-my-data-when-i-use-native-client" id="id25">What happens to my data when I use Native Client?</a></li>
53<li><a class="reference internal" href="#how-does-native-client-prevent-sandboxed-code-from-doing-bad-things" id="id26">How does Native Client prevent sandboxed code from doing Bad Things?</a></li>
54<li><a class="reference internal" href="#how-does-google-know-that-the-safety-measures-in-native-client-are-sufficient" id="id27">How does Google know that the safety measures in Native Client are sufficient?</a></li>
[email protected]bde3d5d2014-01-23 19:26:0455</ul>
56</li>
jfb04da1492015-02-12 23:04:2757<li><p class="first"><a class="reference internal" href="#development" id="id28">Development</a></p>
[email protected]bde3d5d2014-01-23 19:26:0458<ul class="small-gap">
jfb04da1492015-02-12 23:04:2759<li><a class="reference internal" href="#how-do-i-debug" id="id29">How do I debug?</a></li>
60<li><a class="reference internal" href="#how-do-i-build-x86-32-x86-64-or-arm-nexes" id="id30">How do I build x86-32, x86-64 or ARM <code>.nexes</code>?</a></li>
61<li><a class="reference internal" href="#how-can-my-web-application-determine-which-nexe-to-load" id="id31">How can my web application determine which <code>.nexe</code> to load?</a></li>
62<li><a class="reference internal" href="#is-it-possible-to-build-a-native-client-module-with-just-plain-c-not-c" id="id32">Is it possible to build a Native Client module with just plain C (not C++)?</a></li>
63<li><a class="reference internal" href="#what-unix-system-calls-can-i-make-through-native-client" id="id33">What UNIX system calls can I make through Native Client?</a></li>
64<li><a class="reference internal" href="#is-my-favorite-third-party-library-available-for-native-client" id="id34">Is my favorite third-party library available for Native Client?</a></li>
65<li><a class="reference internal" href="#do-all-the-files-in-an-application-need-to-be-served-from-the-same-domain" id="id35">Do all the files in an application need to be served from the same domain?</a></li>
[email protected]bde3d5d2014-01-23 19:26:0466</ul>
67</li>
jfb04da1492015-02-12 23:04:2768<li><p class="first"><a class="reference internal" href="#portability" id="id36">Portability</a></p>
[email protected]bde3d5d2014-01-23 19:26:0469<ul class="small-gap">
jfb04da1492015-02-12 23:04:2770<li><a class="reference internal" href="#do-i-have-to-do-anything-special-to-make-my-application-run-on-different-operating-systems" id="id37">Do I have to do anything special to make my application run on different operating systems?</a></li>
71<li><a class="reference internal" href="#how-easy-is-it-to-port-my-existing-native-code-to-native-client" id="id38">How easy is it to port my existing native code to Native Client?</a></li>
[email protected]bde3d5d2014-01-23 19:26:0472</ul>
73</li>
jfb04da1492015-02-12 23:04:2774<li><p class="first"><a class="reference internal" href="#troubleshooting" id="id39">Troubleshooting</a></p>
[email protected]bde3d5d2014-01-23 19:26:0475<ul class="small-gap">
jfb04da1492015-02-12 23:04:2776<li><a class="reference internal" href="#my-pexe-isn-t-loading-help" id="id40">My <code>.pexe</code> isn&#8217;t loading, help!</a></li>
77<li><a class="reference internal" href="#my-nexe-files-never-finish-loading-what-gives" id="id41">My <code>.nexe</code> files never finish loading. What gives?</a></li>
[email protected]bde3d5d2014-01-23 19:26:0478</ul>
79</li>
80</ul>
[email protected]26420f22014-01-24 18:06:1381
82</div><p>This document answers some frequently asked questions about Native
[email protected]bde3d5d2014-01-23 19:26:0483Client (NaCl) and Portable Native Client (PNaCl, pronounced
84&#8220;pinnacle&#8221;). For a high-level overview of Native Client, see the
85<a class="reference internal" href="/native-client/overview.html"><em>Technical Overview</em></a>.</p>
86<p>If you have questions that aren&#8217;t covered in this FAQ:</p>
87<ul class="small-gap">
88<li>Scan through the <a class="reference internal" href="/native-client/sdk/release-notes.html"><em>Release Notes</em></a>.</li>
89<li>Search through or ask on the <a class="reference internal" href="/native-client/help.html"><em>Native Client Forums</em></a>.</li>
90</ul>
[email protected]bde3d5d2014-01-23 19:26:0491<h2 id="what-is-native-client-good-for">What is Native Client Good For?</h2>
[email protected]bde3d5d2014-01-23 19:26:0492<h3 id="why-did-google-build-native-client">Why did Google build Native Client?</h3>
93<ul class="small-gap">
94<li><strong>Performance:</strong> Native Client modules run nearly as fast as native
95compiled code.</li>
96<li><strong>Security:</strong> Native Client lets users run native compiled code in the
97browser with the same level of security and privacy as traditional web
98applications.</li>
99<li><p class="first"><strong>Convenience:</strong></p>
100<ul class="small-gap">
101<li>Developers can leverage existing code, written in C/C++ or other
102languages, in their applications without forcing users to install a
103plugin.</li>
104<li>This code can interact with the embedding web page as part of an
105HTML and JavaScript web application, or it can be a self-contained
106and immersive experience.</li>
107</ul>
108</li>
109<li><p class="first"><strong>Portability:</strong> Native Client and Portable Native Client applications
110can execute on:</p>
111<ul class="small-gap">
112<li>The Windows, Mac, Linux or ChromeOS operating systems.</li>
113<li>Processors with the x86-32, x86-64, or ARM instruction set
114architectures. Native Client also has experimental support for MIPS.</li>
115</ul>
116</li>
117</ul>
118<p>Portable Native client further enhances the above:</p>
119<ul class="small-gap">
120<li><strong>Performance:</strong> Each PNaCl release brings with it more performance
121enhancements. Already-released applications get faster over time,
122conserving user&#8217;s battery.</li>
123<li><strong>Security:</strong> Users are kept secure with an ever-improving sandbox
124model which adapts to novel attacks, without affecting
125already-released applications.</li>
126<li><strong>Convenience:</strong> Developers only need to ship a single <code>.pexe</code> file,
127not one <code>.nexe</code> file per supported architecture.</li>
128<li><strong>Portability:</strong> Developers and users don&#8217;t need to worry about
129already-released applications not working on new hardware: PNaCl
130already supports all architectures NaCl does, and as PNaCl evolves it
131gains support for new processors and fully uses their capabilities.</li>
132</ul>
133<p>For more details, refer to the <a class="reference internal" href="/native-client/nacl-and-pnacl.html"><em>history behind and comparison of
134NaCl and PNaCl</em></a>.</p>
[email protected]81156022014-07-09 22:04:55135<h3 id="when-should-i-use-portable-native-client-instead-of-native-client">When should I use Portable Native Client instead of Native Client?</h3>
136<p>See <a class="reference internal" href="/native-client/nacl-and-pnacl.html"><em>NaCl and PNaCl</em></a>. In short: PNaCl works on the Open
137Web platform delivered by Chrome whereas NaCl only works on the Chrome Web
138Store.</p>
[email protected]81156022014-07-09 22:04:55139<h3 id="when-should-i-use-portable-native-client-native-client">When should I use Portable Native Client / Native Client?</h3>
[email protected]bde3d5d2014-01-23 19:26:04140<p>The following are some typical use cases. For details, see the
141<a class="reference internal" href="/native-client/overview.html"><em>Technical Overview</em></a>.</p>
142<ul class="small-gap">
[email protected]81156022014-07-09 22:04:55143<li>Porting existing applications or software components, written in C/C++ or
144virtual machines written in C/C++, for use in a web application.</li>
145<li><p class="first">Using compute-intensive applications, including threads and SIMD, such as:</p>
146<ul class="small-gap">
147<li>Scientific computing.</li>
[email protected]bde3d5d2014-01-23 19:26:04148<li>Handling multimedia for a web application.</li>
[email protected]81156022014-07-09 22:04:55149<li>Various aspects of web-based games, including physics engines and AI.</li>
[email protected]bde3d5d2014-01-23 19:26:04150</ul>
[email protected]81156022014-07-09 22:04:55151</li>
152<li>Running untrusted code on a server or within an application (such as a plugin
153system for a game).</li>
154</ul>
155<p>Portable Native Client and Native Client are versatile technologies which are
[email protected]bde3d5d2014-01-23 19:26:04156used in many other contexts outside of Chrome.</p>
[email protected]bde3d5d2014-01-23 19:26:04157<h3 id="how-fast-does-code-run-in-portable-native-client">How fast does code run in Portable Native Client?</h3>
158<p>Fast! The SPEC2k benchmarks (C, C++ and floating-point benchmarks) give
159the following overhead for optimized PNaCl compared to regular optimized
160LLVM:</p>
161<table border="1" class="docutils">
162<colgroup>
163</colgroup>
164<tbody valign="top">
165<tr class="row-odd"><td>x86-32</td>
166<td>15%</td>
167</tr>
168<tr class="row-even"><td>x86-64</td>
169<td>25%</td>
170</tr>
171<tr class="row-odd"><td>ARM</td>
172<td>10%</td>
173</tr>
174</tbody>
175</table>
176<p>Note that benchmark performance is sometimes bimodal, so different use
177cases are likely to achieve better or worse performance than the above
178averages. For example floating-point heavy code usually exhibits much
179lower overheads whereas very branch-heavy code often performs worse.</p>
[email protected]2d46b9b2014-04-24 17:07:45180<p>Note that PNaCl supports performance features that are often used in
181native code such as <a class="reference internal" href="/native-client/reference/pnacl-c-cpp-language-support.html#language-support-threading"><em>threading</em></a> and
182<a class="reference internal" href="/native-client/reference/pnacl-c-cpp-language-support.html#portable-simd-vectors"><em>Portable SIMD Vectors</em></a>.</p>
[email protected]bde3d5d2014-01-23 19:26:04183<p>For details, see:</p>
184<ul class="small-gap">
[email protected]81156022014-07-09 22:04:55185<li><a class="reference external" href="https://www.youtube.com/watch?v=675znN6tntw&amp;list=PLOU2XLYxmsIIwGK7v7jg3gQvIAWJzdat_">PNaCl SIMD: Speed on the Web</a>.</li>
[email protected]bde3d5d2014-01-23 19:26:04186<li><a class="reference external" href="https://nativeclient.googlecode.com/svn/data/site/NaCl_SFI.pdf">Adapting Software Fault Isolation to Contemporary CPU Architectures</a> (PDF).</li>
187<li><a class="reference external" href="http://research.google.com/pubs/pub34913.html">Native Client: A Sandbox for Portable, Untrusted x86 Code</a> (PDF).</li>
188</ul>
189<p>If your code isn&#8217;t performing as close to native speed as you&#8217;d expect,
190<a class="reference internal" href="/native-client/help.html"><em>let us know</em></a>!</p>
[email protected]bde3d5d2014-01-23 19:26:04191<h3 id="why-use-portable-native-client-instead-of-technology-x">Why use Portable Native Client instead of <em>&lt;technology X&gt;</em>?</h3>
192<p>Many other technologies can be compared to Portable Native Client:
193Flash, Java, Silverlight, ActiveX, .NET, asm.js, etc...</p>
194<p>Different technologies have different strengths and weaknesses. In
195appropriate contexts, Portable Native Client can be faster, more secure,
196and/or more compatible across operating systems and architectures than
197other technologies.</p>
198<p>Portable Native Client complement other technologies by giving web
199developers a new capability: the ability to run fast, secure native code
200from a web browser in an architecture-independent way.</p>
[email protected]bde3d5d2014-01-23 19:26:04201<h3 id="if-i-want-direct-access-to-the-os-should-i-use-native-client">If I want direct access to the OS, should I use Native Client?</h3>
202<p>No&#8212;Native Client does not provide direct access to the OS or devices,
203or otherwise bypass the JavaScript security model. For more information,
204see later sections of this FAQ.</p>
[email protected]bde3d5d2014-01-23 19:26:04205<h2 id="development-environments-and-tools">Development Environments and Tools</h2>
[email protected]bde3d5d2014-01-23 19:26:04206<h3 id="what-development-environment-and-development-operating-system-do-you-recommend">What development environment and development operating system do you recommend?</h3>
[email protected]81156022014-07-09 22:04:55207<p>You can develop on Windows, Mac, or Linux, and the resulting Native Client or
208Portable Native Client application will run inside the Google Chrome browser on
209all those platforms as well as ChromeOS. You can also develop on ChromeOS with
210<a class="reference external" href="https://github.com/dnschneid/crouton">Crouton</a> or our <a class="reference external" href="https://www.youtube.com/watch?v=OzNuzBDEWzk&amp;list=PLOU2XLYxmsIIwGK7v7jg3gQvIAWJzdat_">experimental development environment which runs within NaCl</a>,
211and we&#8217;re working on self-hosting a full development environment on Portable
212Native Client.</p>
[email protected]bde3d5d2014-01-23 19:26:04213<p>Any editor+shell combination should work as well as IDEs like Eclipse,
214Visual Studio with the <a class="reference internal" href="/native-client/devguide/devcycle/vs-addin.html"><em>Native Client Add-In</em></a> on Windows, or Xcode on Mac OSX.</p>
[email protected]bde3d5d2014-01-23 19:26:04215<h3 id="i-m-not-familiar-with-native-development-tools-can-i-still-use-the-native-client-sdk">I&#8217;m not familiar with native development tools, can I still use the Native Client SDK?</h3>
216<p>You may find our <a class="reference internal" href="/native-client/devguide/tutorial/index.html"><em>Tutorial</em></a> and <a class="reference internal" href="/native-client/devguide/devcycle/building.html"><em>Building
217instructions</em></a> useful, and you can look at
218the code and Makefiles for the SDK examples to understand how the
219examples are built and run.</p>
[email protected]81156022014-07-09 22:04:55220<p>You&#8217;ll need to learn how to use some tools (like GCC, LLVM, make, Eclipse,
221Visual Studio, or Xcode) before you can get very far with the SDK. Try seaching
222for an <a class="reference external" href="https://www.google.com/search?q=gcc+introduction">introduction to GCC</a>.</p>
[email protected]bde3d5d2014-01-23 19:26:04223<h2 id="openness-and-supported-architectures-and-languages">Openness, and Supported Architectures and Languages</h2>
[email protected]bde3d5d2014-01-23 19:26:04224<h3 id="is-native-client-open-is-it-a-standard">Is Native Client open? Is it a standard?</h3>
225<p>Native Client is completely open: the executable format is open and the
[email protected]46daa952014-07-11 18:08:44226<a class="reference external" href="https://code.google.com/p/nativeclient/">source code is open</a>. Right
[email protected]bde3d5d2014-01-23 19:26:04227now the Native Client project is in its early stages, so it&#8217;s premature
228to consider Native Client for standardization.</p>
229<p>We consistenly try to document our design and implementation and hope to
230standardize Portable Native Client when it gains more traction. A good
231example is our <a class="reference internal" href="/native-client/reference/pnacl-bitcode-abi.html"><em>PNaCl bitcode reference manual</em></a>.</p>
jfb04da1492015-02-12 23:04:27232<h3 id="how-can-i-contribute-to-native-client">How can I contribute to Native Client?</h3>
233<p>Read about <a class="reference internal" href="/native-client/reference/ideas.html"><em>contributor ideas</em></a>.</p>
[email protected]bde3d5d2014-01-23 19:26:04234<h3 id="what-are-the-supported-instruction-set-architectures">What are the supported instruction set architectures?</h3>
235<p>Portable Native Client uses an architecture-independent format (the
236<code>.pexe</code>) which can currently be translated to execute on processors
237with the x86-32, x86-64, and ARM instruction set architectures, as well
238as experimental support for MIPS. As new architectures come along and
239become popular we expect Portable Native Client to support them without
240developers having to recompile their code.</p>
241<p>Native Client can currently execute on the same architectures as
242Portable Native Client but is only supported on the Chrome Web
243Store. Native Client&#8217;s <code>.nexe</code> files are architecture-dependent and
244cannot adapt to new architectures without recompilation, we therefore
245deem them better suited to a web store than to the open web.</p>
246<p>With Portable Native Client we deliver a system that has comparable
247portability to JavaScript and can adapt to new instruction set
248architectures without requiring recompilation. The web is better when
249it&#8217;s platform-independent, and we&#8217;d like it to stay that way.</p>
[email protected]c3c19f12014-08-06 18:01:43250<h3 id="do-i-have-to-use-c-or-c-i-d-really-like-to-use-another-language"><span id="other-languages"></span>Do I have to use C or C++? I&#8217;d really like to use another language.</h3>
[email protected]81156022014-07-09 22:04:55251<p>Right now only C and C++ are supported directly by the toolchain in the SDK. C#
252and other languages in the .NET family are supported via the <a class="reference external" href="https://github.com/elijahtaylor/mono">Mono port</a> for
253Native Client. Moreover, there are several ongoing projects to support
sbc937645f2015-12-18 06:23:27254additional language runtimes (e.g. <a class="reference external" href="https://chromium.googlesource.com/webports">webports includes Lua, Python and Ruby</a>)
[email protected]81156022014-07-09 22:04:55255as well as to compile more languages to LLVM&#8217;s intermediate representation
256(e.g. support <a class="reference external" href="http://halide-lang.org/">Halide</a>, Haskell with <a class="reference external" href="http://www.haskell.org/ghc/docs/latest/html/users_guide/code-generators.html">GHC</a> or support Fortran with <a class="reference external" href="https://flang-gsoc.blogspot.ie/2013/09/end-of-gsoc-report.html">flang</a>), or
JF Bastiend8377eb2015-01-19 18:06:14257transpile languages to C/C++ (source-to-source compilation). Even JavaScript is
258supported by compiling <a class="reference external" href="https://code.google.com/p/v8/">V8</a> to target PNaCl.</p>
259<p>The PNaCl toolchain is built on LLVM and can therefore generate code from
260languages such as <a class="reference external" href="http://www.rust-lang.org/">Rust</a>, <a class="reference external" href="https://golang.org">Go</a>, or Objective-C, but there may still be a few rough
261edges.</p>
[email protected]bde3d5d2014-01-23 19:26:04262<p>If you&#8217;re interested in getting other languages working, please contact the
jfb04da1492015-02-12 23:04:27263Native Client team by way of the <a class="reference external" href="https://groups.google.com/group/native-client-discuss">native-client-discuss</a> mailing list, and read
264through <a class="reference internal" href="/native-client/reference/ideas.html"><em>contributor ideas</em></a>.</p>
[email protected]81156022014-07-09 22:04:55265<h3 id="do-you-only-support-chrome-what-about-other-browsers">Do you only support Chrome? What about other browsers?</h3>
[email protected]bde3d5d2014-01-23 19:26:04266<p>We aim to support multiple browsers. However, a number of features that
267we consider requirements for a production-quality system that keeps the
268user safe are difficult to implement without help from the
269browser. Specific examples are an out-of-process plugin architecture and
270appropriate interfaces for integrated 3D graphics. We have worked
271closely with Chromium developers to deliver these features and we are
272eager to collaborate with developers from other browsers.</p>
[email protected]bde3d5d2014-01-23 19:26:04273<h3 id="what-s-the-difference-between-npapi-and-pepper">What&#8217;s the difference between NPAPI and Pepper?</h3>
274<p><a class="reference internal" href="/native-client/pepper_stable/index.html"><em>Pepper</em></a> (also known as PPAPI) is a new API that
275lets Native Client modules communicate with the browser. Pepper supports
276various features that don&#8217;t have robust support in NPAPI, such as event
277handling, out-of-process plugins, and asynchronous interfaces. Native
278Client has transitioned from using NPAPI to using Pepper.</p>
[email protected]bde3d5d2014-01-23 19:26:04279<h3 id="is-npapi-part-of-the-native-client-sdk">Is NPAPI part of the Native Client SDK?</h3>
[email protected]81156022014-07-09 22:04:55280<p>NPAPI is not supported by the Native Client SDK, and is <a class="reference external" href="http://blog.chromium.org/2013/09/saying-goodbye-to-our-old-friend-npapi.html">deprecated in Chrome</a>.</p>
[email protected]bde3d5d2014-01-23 19:26:04281<h3 id="does-native-client-support-simd-vector-instructions">Does Native Client support SIMD vector instructions?</h3>
[email protected]2d46b9b2014-04-24 17:07:45282<p>Portable Native Client supports portable SIMD vectors, as detailed in
283<a class="reference internal" href="/native-client/reference/pnacl-c-cpp-language-support.html#portable-simd-vectors"><em>Portable SIMD Vectors</em></a>.</p>
JF Bastien8084a6a02015-02-02 18:02:31284<p>Native Client supports SSE, AVX1, FMA3 and AVX2 (except for <cite>VGATHER</cite>) on x86
285and NEON on ARM.</p>
[email protected]bde3d5d2014-01-23 19:26:04286<h3 id="can-i-use-native-client-for-3d-graphics">Can I use Native Client for 3D graphics?</h3>
287<p>Yes. Native Client supports <a class="reference external" href="https://www.khronos.org/opengles/">OpenGL ES 2.0</a>.</p>
288<p>To alert the user regarding their hardware platform&#8217;s 3D feature set
289before loading a large NaCl application, see <a class="reference internal" href="/native-client/devguide/coding/3D-graphics.html"><em>Vetting the driver in
290Javascript</em></a>.</p>
[email protected]81156022014-07-09 22:04:55291<p>Some GL extensions are exposed to Native Client applications, see the <a class="reference external" href="https://code.google.com/p/chromium/codesearch#chromium/src/ppapi/lib/gl/gles2/gles2.c">GLES2
292file</a>. This file is part of the GL wrapper supplied by the library
293<code>ppapi_gles2</code> which you&#8217;ll want to include in your project. In most cases
294extensions map to extensions available on other platforms, or differ very
295slightly (if they differ, the extension is usually CHROMIUM or ANGLE instead of
296EXT).</p>
[email protected]bde3d5d2014-01-23 19:26:04297<h3 id="does-native-client-support-concurrency-parallelism">Does Native Client support concurrency/parallelism?</h3>
298<p>Native Client and Portable Native Client both support pthreads,
299C11/C++11 threads, and low-level synchronization primitives (mutex,
300barriers, atomic read/modify/write, compare-and-exchange, etc...), thus
301allowing your Native Client application to utilize several CPU cores.
302Note that this allows you to modify datastructures concurrently without
303needing to copy them, which is often a limitation of shared-nothing
304systems. For more information see <a class="reference internal" href="/native-client/reference/pnacl-c-cpp-language-support.html#memory-model-and-atomics"><em>memory model and atomics</em></a> and <a class="reference internal" href="/native-client/reference/pnacl-c-cpp-language-support.html#language-support-threading"><em>threading</em></a>.</p>
305<p>Native Client doesn&#8217;t support HTML5 Web Workers directly but can
306interact with JavaScript code which does.</p>
[email protected]bde3d5d2014-01-23 19:26:04307<h2 id="coming-soon">Coming Soon</h2>
[email protected]bde3d5d2014-01-23 19:26:04308<h3 id="do-native-client-modules-have-access-to-external-devices">Do Native Client modules have access to external devices?</h3>
309<p>At this time Native Client modules do not have access to serial ports,
310camera devices, or microphones: Native Client can only use native
311resources that today&#8217;s browsers can access. However, we intend to
312recommend such features to the standards bodies and piggyback on their
313efforts to make these resources available inside the browser.</p>
314<p>You can generally think of Pepper as the C/C++ bindings to the
315capabilities of HTML5. The goal is for Pepper and JavaScript to evolve
316together and stay on par with each other with respect to features and
317capabilities.</p>
[email protected]bde3d5d2014-01-23 19:26:04318<h2 id="security-and-privacy">Security and Privacy</h2>
[email protected]bde3d5d2014-01-23 19:26:04319<h3 id="what-happens-to-my-data-when-i-use-native-client">What happens to my data when I use Native Client?</h3>
320<p>Users can opt-in to sending usage statistics and crash information in
321Chrome, which includes usage statistics and crash information about
322Native Client. Crashes in your code won&#8217;t otherwise send your
323information to Google: Google counts the number of such crashes, but
324does so anonymously without sending your application&#8217;s data or its debug
325information.</p>
[email protected]81156022014-07-09 22:04:55326<p>For additional information about privacy and Chrome, see the <a class="reference external" href="https://www.google.com/chrome/intl/en/privacy.html">Google Chrome
327privacy policy</a> and the <a class="reference external" href="https://www.google.com/chrome/intl/en/eula_text.html">Google Chrome Terms of Service</a>.</p>
[email protected]bde3d5d2014-01-23 19:26:04328<h3 id="how-does-native-client-prevent-sandboxed-code-from-doing-bad-things">How does Native Client prevent sandboxed code from doing Bad Things?</h3>
329<p>Native Client&#8217;s sandbox works by validating the untrusted code (the
330compiled Native Client module) before running it. The validator checks
331the following:</p>
332<ul class="small-gap">
333<li><strong>Data integrity:</strong> No loads or stores are permitted outside of the
334data sandbox. In particular this means that once loaded into memory,
335the binary is not writable. This is enforced by operating system
336protection mechanisms. While new instructions can be inserted at
337runtime to support things like JIT compilers, such instructions will
338be subject to runtime verification according to the following
339constraints before they are executed.</li>
340<li><strong>No unsafe instructions:</strong> The validator ensures that the Native
341Client application does not contain any unsafe instructions. Examples
342of unsafe instructions are <code>syscall</code>, <code>int</code>, and <code>lds</code>.</li>
343<li><strong>Control flow integrity:</strong> The validator ensures that all direct and
344indirect branches target a safe instruction.</li>
345</ul>
346<p>The beauty of the Native Client sandbox is in reducing &#8220;safe&#8221; code to a
347few simple rules that can be verified by a small trusted validator: the
348compiler isn&#8217;t trusted. The same applies to Portable Native Client where
349even the <code>.pexe</code> to <code>.nexe</code> translator, a simplified compiler
350backend, isn&#8217;t trusted: it is validated before executing, and so is its
351output.</p>
[email protected]81156022014-07-09 22:04:55352<p>In addition to static analysis of untrusted code, the Native Client runtime also
353includes an outer sandbox that mediates system calls. For more details about
354both sandboxes, see <a class="reference external" href="http://research.google.com/pubs/pub34913.html">Native Client: A Sandbox for Portable, Untrusted x86 Code</a>
[email protected]bde3d5d2014-01-23 19:26:04355(PDF).</p>
[email protected]bde3d5d2014-01-23 19:26:04356<h3 id="how-does-google-know-that-the-safety-measures-in-native-client-are-sufficient">How does Google know that the safety measures in Native Client are sufficient?</h3>
[email protected]81156022014-07-09 22:04:55357<p>Google has taken several steps to ensure that Native Client&#8217;s security works,
358including:</p>
[email protected]bde3d5d2014-01-23 19:26:04359<ul class="small-gap">
360<li>Open source, peer-reviewed papers describing the design.</li>
361<li>A <a class="reference internal" href="/native-client/community/security-contest/index.html"><em>security contest</em></a>.</li>
362<li>Multiple internal and external security reviews.</li>
363<li>The ongoing vigilance of our engineering and developer community.</li>
364</ul>
[email protected]81156022014-07-09 22:04:55365<p>Google is committed to making Native Client safer than JavaScript and other
366popular browser technologies. If you have suggestions for security improvements,
367let the team know, by way of the <a class="reference external" href="https://groups.google.com/group/native-client-discuss">native-client-discuss</a> mailing list.</p>
[email protected]bde3d5d2014-01-23 19:26:04368<h2 id="development">Development</h2>
[email protected]bde3d5d2014-01-23 19:26:04369<h3 id="how-do-i-debug">How do I debug?</h3>
370<p>Instructions on <a class="reference internal" href="/native-client/sdk/examples.html#debugging-the-sdk-examples"><em>debugging the SDK examples</em></a> using GDB are available. You can also
371debug Native Client modules with some <a class="reference internal" href="/native-client/devguide/devcycle/debugging.html"><em>alternative approaches</em></a>.</p>
[email protected]bde3d5d2014-01-23 19:26:04372<h3 id="how-do-i-build-x86-32-x86-64-or-arm-nexes">How do I build x86-32, x86-64 or ARM <code>.nexes</code>?</h3>
373<p>By default, the applications in the <code>/examples</code> folder create
374architecture-independent <code>.pexe</code> for Portable Native Client. To
Julien Brianceau3d71a3cd2017-08-04 18:45:10375generate a <code>.nexe</code> targeting one specific architecture using the
[email protected]bde3d5d2014-01-23 19:26:04376Native Client or Portable Native Client toolchains, see the
377<a class="reference internal" href="/native-client/devguide/devcycle/building.html"><em>Building instructions</em></a>.</p>
[email protected]bde3d5d2014-01-23 19:26:04378<h3 id="how-can-my-web-application-determine-which-nexe-to-load">How can my web application determine which <code>.nexe</code> to load?</h3>
379<p>Your application does not need to make the decision of loading an
380x86-32, x86-64 or ARM <code>.nexe</code> explicitly&#8212;the Native Client runtime
381examines a manifest file (<code>.nmf</code>) to pick the right <code>.nexe</code> file for
382a given user. You can generate a manifest file using a Python script
383that&#8217;s included in the SDK (see the <code>Makefile</code> in any of the SDK
384examples for an illustration of how to do so). Your HTML file specifies
385the manifest filename in the <code>src</code> attribute of the <code>&lt;embed&gt;</code>
386tag. You can see the way the pieces fit together by examining the
387examples included in the SDK.</p>
[email protected]bde3d5d2014-01-23 19:26:04388<h3 id="is-it-possible-to-build-a-native-client-module-with-just-plain-c-not-c">Is it possible to build a Native Client module with just plain C (not C++)?</h3>
389<p>Yes. See the <code>&quot;Hello, World!&quot;</code> in C example in the SDK under
390<code>examples/tutorial/using_ppapi_simple/</code>, or the Game of Life example
391under <code>examples/demo/life/life.c</code>.</p>
[email protected]bde3d5d2014-01-23 19:26:04392<h3 id="what-unix-system-calls-can-i-make-through-native-client">What UNIX system calls can I make through Native Client?</h3>
393<p>Native Client doesn&#8217;t directly expose any system calls from the host OS
394because of the inherent security risks and because the resulting
395application would not be portable across operating systems. Instead,
396Native Client provides portable cross-OS abstractions wrapping or
397proxying OS functionality or emulating UNIX system calls. For example,
398Native Client provides an <code>mmap()</code> system call that behaves much like
399the standard UNIX <code>mmap()</code> system call.</p>
[email protected]bde3d5d2014-01-23 19:26:04400<h3 id="is-my-favorite-third-party-library-available-for-native-client">Is my favorite third-party library available for Native Client?</h3>
[email protected]81156022014-07-09 22:04:55401<p>Google has ported several third-party libraries to Native Client; such libraries
sbc937645f2015-12-18 06:23:27402are available in the <a class="reference external" href="https://chromium.googlesource.com/webports">webports</a> project. We encourage you to contribute
403libraries to webports, and/or to host your own ported libraries, and to let the
jfb04da1492015-02-12 23:04:27404team know about it on <a class="reference external" href="https://groups.google.com/group/native-client-discuss">native-client-discuss</a> when you do. You can also read
405through <a class="reference internal" href="/native-client/reference/ideas.html"><em>contributor ideas</em></a> to find ideas of new projects
406to port.</p>
[email protected]bde3d5d2014-01-23 19:26:04407<h3 id="do-all-the-files-in-an-application-need-to-be-served-from-the-same-domain">Do all the files in an application need to be served from the same domain?</h3>
408<p>The <code>.nmf</code>, and <code>.nexe</code> or <code>.pexe</code> files must either be served from the
409same origin as the embedding page or an origin that has been configured
410correctly using <a class="reference external" href="http://en.wikipedia.org/wiki/Cross-origin_resource_sharing">CORS</a>.</p>
411<p>For applications installed from the Chrome Web Store the Web Store manifest
412must include the correct, verified domain of the embedding page.</p>
[email protected]bde3d5d2014-01-23 19:26:04413<h2 id="portability">Portability</h2>
[email protected]bde3d5d2014-01-23 19:26:04414<h3 id="do-i-have-to-do-anything-special-to-make-my-application-run-on-different-operating-systems">Do I have to do anything special to make my application run on different operating systems?</h3>
415<p>No. Native Client and Portable Native Client applications run without
416modification on all supported operating systems.</p>
417<p>However, to run on different instruction set architectures (such as
418x86-32, x86-64 or ARM), you currently have to either:</p>
419<ul class="small-gap">
420<li>Use Portable Native Client.</li>
421<li>Build and supply a separate <code>.nexe</code> file for each architecture, and
422make them available on the Chrome Web Store. See <a class="reference internal" href="/native-client/devguide/devcycle/building.html"><em>target
423architectures</em></a> for details about which
424<code>.nexe</code> files will run on which architectures.</li>
425</ul>
[email protected]bde3d5d2014-01-23 19:26:04426<h3 id="how-easy-is-it-to-port-my-existing-native-code-to-native-client">How easy is it to port my existing native code to Native Client?</h3>
427<p>In most cases you won&#8217;t have to rewrite much, if any, code. The Native
428Client-specific tools, such as <code>pnacl-clang++</code> or <code>x86_64-nacl-g++</code>,
429take care of most of the necessary changes. You may need to make some
430changes to your operating system calls and interactions with external
431devices to work with the web. Porting existing Linux libraries is
432generally straightforward, with large libraries often requiring no
433source change.</p>
434<p>The following kinds of code may be more challenging to port:</p>
435<ul class="small-gap">
jfbececadd2015-02-09 23:29:55436<li>Code that does direct <a class="reference external" href="pepper_stable/cpp/classpp_1_1_t_c_p_socket">TCP</a> or
jfbbd7a2732015-02-09 18:22:10437<a class="reference external" href="pepper_stable/cpp/classpp_1_1_u_d_p_socket">UDP</a> networking. For security
jfbf67a7e52015-02-10 19:09:19438reasons these APIs are only available to <a class="reference external" href="/apps">Chrome apps</a> after asking
439for the appropriate permissions, not on the open web. Native Client is
440otherwise restricted to the networking APIs available in the browser. You may
441want to use to <a class="reference external" href="nacl_io">nacl_io library</a> to use POSIX-like sockets.</li>
jfbbd7a2732015-02-09 18:22:10442<li>Code that creates processes, including UNIX <code>fork</code>, won&#8217;t function
443as-is. However, threads are supported. You can nonetheless create new
jfbe6357572015-02-09 22:49:50444<code>&lt;embed&gt;</code> tags in your HTML page to launch new PNaCl processes. You can even
445use new <code>.pexe</code> files that your existing <code>.pexe</code> saved in a local
jfbbd7a2732015-02-09 18:22:10446filesystem. This is somewhat akin to <code>execve</code>, but the process management
447has to go through <code>postMessage</code> to JavaScript in order to create the new
448<code>&lt;embed&gt;</code>.</li>
449<li>Code that needs to do local file I/O. Native Client is restricted to accessing
450URLs and to local storage in the browser (the Pepper <a class="reference internal" href="/native-client/devguide/coding/file-io.html"><em>File IO API</em></a> has access to the same per-application storage that
451JavaScript has via Local Storage). HTML5 File System can be used, among
452others. For POSIX compatabiliy the Native Client SDK includes a library called
453nacl_io which allows the application to interact with all these types of files
454via standard POSIX I/O functions (e.g. <code>open</code> / <code>fopen</code> / <code>read</code> /
455<code>write</code> / ...). See <a class="reference internal" href="/native-client/devguide/coding/nacl_io.html"><em>Using NaCl I/O</em></a> for more
456details.</li>
[email protected]bde3d5d2014-01-23 19:26:04457</ul>
[email protected]c3c19f12014-08-06 18:01:43458<h2 id="troubleshooting"><span id="faq-troubleshooting"></span>Troubleshooting</h2>
[email protected]bde3d5d2014-01-23 19:26:04459<h3 id="my-pexe-isn-t-loading-help">My <code>.pexe</code> isn&#8217;t loading, help!</h3>
460<ul class="small-gap">
461<li>You must use Google Chrome version 31 or greater for Portable Native
jfbbd7a2732015-02-09 18:22:10462Client. Find your version of chrome by opening <code>about:chrome</code>, and <a class="reference external" href="http://www.google.com/chrome/">update
463Chrome</a> if you are on an older version. If
464you&#8217;re already using a recent version, open <code>about:components</code> and &#8220;Check
465for update&#8221; for PNaCl. Note that on ChromeOS PNaCl is always up to date,
466whereas on other operating systems it updates shortly after Chrome updates.</li>
jmedleya7749732014-11-05 15:19:55467<li>A PNaCl <code>.pexe</code> must be compiled with pepper_31 SDK or higher. <a class="reference internal" href="/native-client/sdk/download.html#updating-bundles"><em>Update
468your bundles</em></a> and make sure you&#8217;re using a version of
469Chrome that matches the SDK version.</li>
[email protected]bde3d5d2014-01-23 19:26:04470<li>Your application can verify that Portable Native Client is supported
471in JavaScript with <code>navigator.mimeTypes['application/x-pnacl'] !==
472undefined</code>. This is preferred over checking the Chrome version.</li>
473</ul>
[email protected]bde3d5d2014-01-23 19:26:04474<h3 id="my-nexe-files-never-finish-loading-what-gives">My <code>.nexe</code> files never finish loading. What gives?</h3>
475<p>Here are ways to resolve some common problems that can prevent loading:</p>
476<ul class="small-gap">
477<li>You must use Google Chrome version 14 or greater for Native Client.</li>
478<li>If you haven&#8217;t already done so, enable the Native Client flag in
479Google Chrome. Type <code>about:flags</code> in the Chrome address bar, scroll
480down to &#8220;Native Client&#8221;, click the &#8220;Enable&#8221; link, scroll down to the
481bottom of the page, and click the &#8220;Relaunch Now&#8221; button (all browser
482windows will restart).</li>
483<li>Verify that the Native Client plugin is enabled in Google Chrome. Type
484<code>about:plugins</code> in the Chrome address bar, scroll down to &#8220;Native
485Client&#8221;, and click the &#8220;Enable&#8221; link. (You do not need to relaunch
486Chrome after you enable the Native Client plugin).</li>
487<li>Make sure that the <code>.nexe</code> files are being served from a web
488server. Native Client uses the same-origin security policy, which
489means that modules will not load in pages opened with the <code>file://</code>
490protocol. In particular, you can&#8217;t run the examples in the SDK by
491simply dragging the HTML files from the desktop into the browser. See
492<a class="reference internal" href="/native-client/devguide/devcycle/running.html"><em>Running Native Client Applications</em></a>
493for instructions on how to run the httpd.py mini-server included in
494the SDK.</li>
495<li>The <code>.nexe</code> files must have been compiled using SDK version 0.5 or
496greater.</li>
497<li>You must load the correct <code>.nexe</code> file for your machine&#8217;s specific
498instruction set architecture (x86-32, x86-64 or ARM). You can ensure
499you&#8217;re loading the correct <code>.nexe</code> file by building a separate
500<code>.nexe</code> for each architecture, and using a <code>.nmf</code> manifest file to
501let the browser select the correct <code>.nexe</code> file. Note: the need to
502select a processor-specific <code>.nexe</code> goes away with Portable Native
503Client.</li>
504<li>If things still aren&#8217;t working, <a class="reference internal" href="/native-client/help.html"><em>ask for help</em></a>!</li>
505</ul>
[email protected]c3c19f12014-08-06 18:01:43506</section>
[email protected]bde3d5d2014-01-23 19:26:04507
508{{/partials.standard_nacl_article}}