| Index: native_client_sdk/src/doc/_developer.chrome.com_generated/nacl-and-pnacl.html
|
| diff --git a/native_client_sdk/src/doc/_developer.chrome.com_generated/nacl-and-pnacl.html b/native_client_sdk/src/doc/_developer.chrome.com_generated/nacl-and-pnacl.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a49707b59c38c43a1b18a9939f61e20ac907ecc2
|
| --- /dev/null
|
| +++ b/native_client_sdk/src/doc/_developer.chrome.com_generated/nacl-and-pnacl.html
|
| @@ -0,0 +1,110 @@
|
| +{{+bindTo:partials.standard_nacl_article}}
|
| +
|
| +<section id="nacl-and-pnacl">
|
| +<span id="id1"></span><h1 id="nacl-and-pnacl"><span id="id1"></span>NaCl and PNaCl</h1>
|
| +<p>This document describes the differences between <strong>Native Client</strong> and
|
| +<strong>Portable Native Client</strong>, and provides recommendations for when to use each.</p>
|
| +<div class="contents local topic" id="contents">
|
| +<ul class="small-gap">
|
| +<li><a class="reference internal" href="#native-client-nacl" id="id3">Native Client (NaCl)</a></li>
|
| +<li><a class="reference internal" href="#portable-native-client-pnacl" id="id4">Portable Native Client (PNaCl)</a></li>
|
| +<li><a class="reference internal" href="#when-to-use-pnacl" id="id5">When to use PNaCl</a></li>
|
| +<li><a class="reference internal" href="#when-to-use-nacl" id="id6">When to use NaCl</a></li>
|
| +</ul>
|
| +</div>
|
| +<section id="native-client-nacl">
|
| +<h2 id="native-client-nacl">Native Client (NaCl)</h2>
|
| +<p>Native Client enables the execution of native code
|
| +securely inside web applications through the use of advanced
|
| +<a class="reference external" href="https://developers.google.com/native-client/community/talks#research">Software Fault Isolation (SFI) techniques</a>.
|
| +Since its launch in 2011, Native Client has provided
|
| +developers with the ability to harness a client machine’s computational power
|
| +to a much fuller extent than traditional web technologies, by running compiled C
|
| +and C++ code at near-native speeds and taking advantage of multiple cores with
|
| +shared memory.</p>
|
| +<p>While Native Client provides operating system independence, it requires
|
| +developers to generate architecture-specific executable modules
|
| +(<strong>nexe</strong> modules) for each hardware platform. This is not only inconvenient
|
| +for developers, but architecture-specific machine code is not portable and thus
|
| +not well-suited for the open web. The traditional method of application
|
| +distribution on the web is through a self-contained bundle of HTML, CSS,
|
| +JavaScript, and other resources (images, etc.) that can be hosted on a server
|
| +and run inside a web browser. With this type of distribution, a website
|
| +created today should still work years later, on all platforms.
|
| +Architecture-specific executables are clearly not a good fit for distribution
|
| +on the web. As a consequence, Native Client has been restricted to
|
| +applications and browser extensions that are installed through the
|
| +Chrome Web Store.</p>
|
| +</section><section id="portable-native-client-pnacl">
|
| +<h2 id="portable-native-client-pnacl">Portable Native Client (PNaCl)</h2>
|
| +<p>PNaCl solves the portability problem by splitting the compilation process
|
| +into two parts:</p>
|
| +<ol class="arabic simple">
|
| +<li>compiling the source code to a portable bitcode format, and</li>
|
| +<li>translating the bitcode to a host-specific executable.</li>
|
| +</ol>
|
| +<p>PNaCl enables developers
|
| +to distribute <strong>portable executables</strong> (<strong>pexe</strong> modules) that the hosting
|
| +environment (e.g., the Chrome browser) can translate to native code before
|
| +executing. This portability aligns Native Client with existing open web
|
| +technologies such as JavaScript: A developer can distribute a <strong>pexe</strong>
|
| +as part of an application (along with HTML, CSS, and JavaScript),
|
| +and the user’s machine is simply able to run it.</p>
|
| +<p>With PNaCl, a developer generates a single <strong>pexe</strong> from source code,
|
| +rather than multiple platform-specific nexes. The <strong>pexe</strong> provides both
|
| +architecture- and OS-independence. Since the <strong>pexe</strong> uses an abstract,
|
| +architecture-independent format, it does not suffer from the portability
|
| +problem described above. Future versions of hosting environments should
|
| +have no problem executing the <strong>pexe</strong>, even on new architectures.
|
| +Moreover, if an existing architecture is subsequently enhanced, the
|
| +<strong>pexe</strong> doesn’t even have to be recompiled—in some cases the
|
| +client-side translation will automatically be able to take advantage of
|
| +the new capabilities.</p>
|
| +<p><strong>In short, PNaCl combines the portability of existing web technologies with
|
| +the performance and security benefits of Native Client.</strong></p>
|
| +<p>With the advent of PNaCl, the distribution restriction of Native Client
|
| +can be lifted. Specifically, a <strong>pexe</strong> module can be part of any web
|
| +application—it does not have to be distributed through the Chrome Web
|
| +Store.</p>
|
| +<p>PNaCl is a new technology, and as such it still has a few limitations
|
| +as compared to NaCl. These limitations are described below.</p>
|
| +</section><section id="when-to-use-pnacl">
|
| +<h2 id="when-to-use-pnacl">When to use PNaCl</h2>
|
| +<p>PNaCl is the preferred toolchain for Native Client, and the only way to deploy
|
| +Native Client modules on the open web. Unless your project is subject to one
|
| +of the narrow limitations described below
|
| +(see <a class="reference internal" href="#when-to-use-nacl"><em>When to use NaCl</em></a>), you should use PNaCl.</p>
|
| +<p>Beginning with version 31, the Chrome browser supports translation of
|
| +<strong>pexe</strong> modules and their use in web applications, without requiring
|
| +any installation (either of a browser plugin or of the applications
|
| +themselves). Native Client and PNaCl are open-source technologies, and
|
| +our hope is that they will be added to other hosting platforms in the
|
| +future.</p>
|
| +<p>If controlled distribution through the Chrome Web Store is an important part
|
| +of your product plan, the benefits of PNaCl are less critical for you. But
|
| +you can still use the PNaCl toolchain and distribute your application
|
| +through the Chrome Web Store, and thereby take advantage of the
|
| +conveniences of PNaCl, such as not having to explicitly compile your application
|
| +for all supported architectures.</p>
|
| +</section><section id="when-to-use-nacl">
|
| +<span id="id2"></span><h2 id="when-to-use-nacl"><span id="id2"></span>When to use NaCl</h2>
|
| +<p>The limitations below apply to the current release of PNaCl. If any of
|
| +these limitations are critical for your application, you should use
|
| +non-portable NaCl:</p>
|
| +<ul class="small-gap">
|
| +<li>By its nature, PNaCl does not support architecture-specific instructions in
|
| +an application (i.e., inline assembly). Future editions of PNaCl will
|
| +attempt to mitigate this problem by introducing portable intrinsics for vector
|
| +operations.</li>
|
| +<li>Currently PNaCl only supports static linking with the <code>newlib</code>
|
| +C standard library (the Native Client SDK provides a PNaCl port of
|
| +<code>newlib</code>). Dynamic linking and <code>glibc</code> are not yet supported.
|
| +Work is under way to enable dynamic linking in future versions of PNaCl.</li>
|
| +<li>In the initial release, PNaCl does not support vector types and SIMD.</li>
|
| +<li>In the initial release, PNaCl does not support some GNU extensions
|
| +like taking the address of a label for computed <code>goto</code>, or nested
|
| +functions.</li>
|
| +</ul>
|
| +</section></section>
|
| +
|
| +{{/partials.standard_nacl_article}}
|
|
|