Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 .. _overview: | 1 .. _overview: |
| 2 | 2 |
| 3 ################## | 3 ################## |
| 4 Technical Overview | 4 Technical Overview |
| 5 ################## | 5 ################## |
| 6 | 6 |
| 7 .. contents:: | 7 .. contents:: |
| 8 :local: | 8 :local: |
| 9 :backlinks: none | 9 :backlinks: none |
| 10 :depth: 2 | 10 :depth: 2 |
| 11 | 11 |
| 12 Introduction | |
| 13 ============ | |
| 14 | |
| 15 **Native Client** (NaCl) is an open-source technology for running native | 12 **Native Client** (NaCl) is an open-source technology for running native |
| 16 compiled code in the browser, with the goal of maintaining the portability | 13 compiled code in the browser, with the goal of maintaining the portability |
| 17 and safety that users expect from web applications. Native Client expands web | 14 and safety that users expect from web applications. Native Client expands web |
| 18 programming beyond JavaScript, enabling developers to enhance their web | 15 programming beyond JavaScript, enabling you to enhance your web applications |
| 19 applications using their preferred language. This document describes some of | 16 using your preferred language. This document describes some of the key benefits |
| 20 the key benefits and common use cases of Native Client. | 17 and common use cases of Native Client. |
| 21 | 18 |
| 22 Google has implemented the open-source `Native Client project | 19 Google has implemented the open-source `Native Client project |
| 23 <http://www.chromium.org/nativeclient>`_ in the Chrome browser on Windows, Mac, | 20 <http://www.chromium.org/nativeclient>`_ in the Chrome browser on Windows, Mac, |
| 24 Linux, and Chrome OS. The :doc:`Native Client Software Development Kit (SDK) | 21 Linux, and Chrome OS. The :doc:`Native Client Software Development Kit (SDK) |
| 25 <sdk/download>`, itself an open-source project, lets developers create web | 22 <sdk/download>`, itself an open-source project, lets you create web applications |
| 26 applications that use NaCl and run in Chrome across multiple platforms. | 23 that use NaCl and run in Chrome across multiple platforms. |
| 27 | 24 |
| 28 A web application that uses Native Client generally consists of a combination of | 25 A Native Client web application consists of JavaScript, HTML, CSS, and a NaCl |
| 29 JavaScript, HTML, CSS, and a NaCl module that is written in a language supported | 26 module written in a language supported by the SDK. The NaCl SDK currently |
| 30 by the SDK. The NaCl SDK currently supports C and C++; as compilers for | 27 supports C and C++; as compilers for additional languages are developed, the SDK |
| 31 additional languages are developed, the SDK will be updated to support those | 28 will be updated. |
| 32 languages as well. | |
| 33 | 29 |
| 34 .. image:: /images/web-app-with-nacl.png | 30 .. figure:: /images/web-app-with-nacl.png |
| 31 :alt: A web application with and without Native Client | |
| 32 | |
| 33 A web application with and without Native Client | |
| 34 | |
| 35 Native Client comes in two flavors: traditional (NaCl) and portable (PNaCl). | |
| 36 Traditional, which must be distributed through the Chrome Web Store lets you | |
| 37 target a specific hardware platform. Portable can run on any Chrome browser. A | |
| 38 bitcode file that can be loaded from any web server is downloaded to a client | |
| 39 machine and converted to hardware-specific code before any execution. For | |
| 40 details, see :doc:`NaCl and PNaCl </nacl-and-pnacl>`. | |
| 41 | |
| 42 .. _why-use-native-client: | |
| 35 | 43 |
| 36 Why use Native Client? | 44 Why use Native Client? |
| 37 ====================== | 45 ====================== |
| 38 | 46 |
| 39 Native Client open-source technology is designed to run compiled code | 47 Native Client open-source technology is designed to run compiled code |
| 40 securely inside a browser at near-native speeds. Native Client puts web | 48 securely inside a browser at near-native speeds. Native Client gives web |
| 41 applications on the same playing field as desktop software---it provides the | 49 applications some advantages of desktop software. Specifically, it provides the |
| 42 means to fully harness the client's computational resources for applications | 50 means to fully harness the client's computational resources for applications |
| 43 such as 3D games, multimedia editors, CAD modeling, | 51 such as: |
| 44 client-side data analytics, and interactive simulations. | 52 |
| 53 - 3D games | |
| 54 - multimedia editors | |
| 55 - CAD modeling | |
| 56 - client-side data analytics | |
| 57 - interactive simulations. | |
| 58 | |
| 45 Native Client also aims to give C and C++ (and eventually other languages) the | 59 Native Client also aims to give C and C++ (and eventually other languages) the |
| 46 same level of portability and safety that JavaScript provides on the web today. | 60 same level of portability as JavaScript, but with greater safety. |
|
binji
2014/09/18 17:58:38
not quite right; we shouldn't claim to be safer th
jpmedley
2014/09/18 19:03:00
I reversed this. Now I want to play devil's advoca
| |
| 47 | 61 |
| 48 Important benefits of Native Client include: | 62 .. _benefits-of-native-client: |
| 63 | |
| 64 Benefits of Native Client | |
| 65 ========================= | |
| 66 | |
| 67 Benefits of Native Client include: | |
| 49 | 68 |
| 50 * **Graphics, audio, and much more:** Running native code modules that render 2D | 69 * **Graphics, audio, and much more:** Running native code modules that render 2D |
| 51 and 3D graphics, play audio, respond to mouse and keyboard events, run on | 70 and 3D graphics, play audio, respond to mouse and keyboard events, run on |
| 52 multiple threads, and access memory directly---all without requiring | 71 multiple threads, and access memory directly---all without requiring the user |
| 53 the user to install a plugin. | 72 to install a plug-in. |
| 54 * **Portability:** Writing your applications once and running them on operating | 73 * **Portability:** Writing your applications once and running them on multiple |
| 55 systems (Windows, Linux, Mac, and Chrome OS) and CPU architectures (x86 and | 74 operating systems (Windows, Linux, Mac, and Chrome OS) and CPU architectures |
| 56 ARM). | 75 (x86 and ARM). |
| 57 * **Easy migration path to the web:** Leveraging years of work in existing | 76 * **Easy migration path to the web:** Leveraging years of work in existing |
| 58 desktop applications. Native Client makes the transition from the desktop to a | 77 desktop applications. Native Client makes the transition from the desktop to |
| 59 web application significantly easier because it supports C and C++. | 78 a web application significantly easier because it supports C and C++. |
| 60 * **Security:** Protecting the user's system from malicious or buggy | 79 * **Security:** Protecting the user's system from malicious or buggy |
| 61 applications through Native Client's double sandbox model. This model offers | 80 applications through Native Client's double sandbox model. This model offers |
| 62 the safety of traditional web applications without sacrificing performance and | 81 the safety of traditional web applications without sacrificing performance |
| 63 without requiring users to install a plugin. | 82 and without requiring users to install a plug-in. |
| 64 * **Performance:** Running at speeds comparable to desktop applications (within | 83 * **Performance:** Running at speeds within 5% to 15% of a native desktop |
| 65 5-15% of native speed). Native Client also allows applications to harness all | 84 application. Native Client also allows applications to harness all available |
| 66 available CPU cores via a threading API; this enables demanding applications | 85 CPU cores via a threading API. This enables demanding applications such as |
| 67 such as console-quality games to run inside the browser. | 86 console-quality games to run inside the browser. |
| 68 | 87 |
| 88 .. _common-use-cases: | |
| 89 | |
| 69 Common use cases | 90 Common use cases |
| 70 ================ | 91 ================ |
| 71 | 92 |
| 72 Typical use cases for Native Client include the following: | 93 Typical use cases for Native Client include the following: |
| 73 | 94 |
| 74 * **Existing software components:** With support for C and C++, Native | 95 * **Existing software components:** Native Client lets you to repurpose existing |
|
binji
2014/09/18 17:58:38
remove "to"
jpmedley
2014/09/18 19:03:00
Done.
| |
| 75 Client lets you to reuse existing software modules in web applications. You | 96 C and C++ software in web applications. You don't need to rewrite and debug |
| 76 don't need to rewrite and debug code that already works. | 97 code that already works. |
| 77 * **Legacy desktop applications:** Native Client provides a smooth migration | 98 * **Legacy desktop applications:** Native Client provides a smooth migration |
| 78 path from desktop applications to the web. You can port and recompile existing | 99 path from desktop applications to the web. You can port and recompile existing |
| 79 code for the computation engine of your application directly to Native Client, | 100 code for the computation engine of your application directly to Native Client, |
| 80 and need rebuild only the user interface and event handling portions for the | 101 and need rebuild only the user interface and event handling portions for the |
| 81 browser. | 102 browser. |
| 103 * **Existing functionality:** Native Client allows you to embed existing | |
|
binji
2014/09/18 17:58:38
I'm not sure I understand what this first means by
jpmedley
2014/09/18 19:03:00
I don't remember what I was thinking that day. I'l
| |
| 104 functionality in a web page. This lets your application take advantage of | |
| 105 things the browser does well such as handling user interaction and processing | |
| 106 events. You can also take advantage of the latest developments in HTML5. | |
| 82 * **Heavy computation in enterprise applications:** Native Client can handle the | 107 * **Heavy computation in enterprise applications:** Native Client can handle the |
| 83 number crunching required by large-scale enterprise applications. To ensure | 108 number crunching required by large-scale enterprise applications. To ensure |
| 84 protection of user data, Native Client enables you to build complex | 109 protection of user data, Native Client lets you run complex cryptographic |
| 85 cryptographic algorithms directly into the browser so that unencrypted data | 110 algorithms directly in the browser so that unencrypted data never goes out |
| 86 never goes out over the network. | 111 over the network. |
| 87 * **Multimedia applications:** Codecs for processing sounds, images, and movies | 112 * **Multimedia applications:** Codecs for processing sounds, images, and movies |
| 88 can be added to the browser in a Native Client module. | 113 can be added to the browser in a Native Client module. |
| 89 * **Games:** Native Client lets web applications run at close to native | 114 * **Games:** Native Client lets web applications run at close to native |
| 90 speed, reuse existing multithreaded/multicore C/C++ code bases, and | 115 speed, reuse existing multithreaded/multicore C/C++ code bases, and |
| 91 access low-latency audio, networking APIs, and OpenGL ES with programmable | 116 access low-latency audio, networking APIs, and OpenGL ES with programmable |
| 92 shaders. Native Client is a natural fit for running a physics engine or | 117 shaders. Native Client is a natural fit for running a physics engine or |
| 93 artificial intelligence module that powers a sophisticated web game. | 118 artificial intelligence module that powers a sophisticated web game. |
| 94 Native Client also enables applications to run unchanged across | 119 Native Client also enables applications to run unchanged across |
| 95 many platforms. | 120 many platforms. |
| 96 * **Any application that requires acceleration**: Native Client fits seamlessly | 121 * **Any application that requires acceleration:** Native Client fits seamlessly |
| 97 into web applications---it's up to you to decide to what extent to use it. | 122 into web applications. It's up to you to decide to what extent to use it. |
| 98 Use of Native Client covers the full spectrum from complete applications to | 123 Use of Native Client covers the full spectrum from complete applications to |
| 99 small optimized routines that accelerate vital parts of web applications. | 124 small optimized routines that accelerate vital parts of web applications. |
| 100 | 125 |
| 101 .. _link_how_nacl_works: | 126 .. _link_how_nacl_works: |
| 102 | 127 |
| 103 How Native Client works | 128 How Native Client works |
| 104 ======================= | 129 ======================= |
| 105 | 130 |
| 106 Native Client is an umbrella name for a set of related software components that | 131 Native Client is an umbrella name for a set of related software components for |
| 107 provide a way to develop C/C++ applications and run them securely on the web. | 132 developing C/C++ applications and running them securely on the web. At a high |
| 133 level, Native Client consists of: | |
| 108 | 134 |
| 109 At a high level, Native Client consists of: | 135 * **Toolchains:** collections of development tools (compilers, linkers, etc.) |
| 110 | 136 that transform C/C++ code to Portable Native Client modules or Native Client |
| 111 * **Toolchains**: Collections of development tools (compilers, linkers, etc.) | 137 modules. |
| 112 that transform C/C++ code to Native Client modules. | 138 * **Runtime components:** components embedded in the browser or other host |
| 113 * **Runtime components**: components embedded in the browser or other | 139 platforms that allow execution of Native Client modules securely and |
| 114 host platforms that allow execution of Native Client modules | 140 efficiently. |
| 115 securely and efficiently. | |
| 116 | 141 |
| 117 The following diagram shows how these components interact: | 142 The following diagram shows how these components interact: |
| 118 | 143 |
| 119 .. image:: /images/nacl-pnacl-component-diagram.png | 144 .. figure:: /images/nacl-pnacl-component-diagram.png |
| 145 :alt: The Native Client toolchains and their outputs | |
| 146 | |
| 147 The Native Client toolchains and their outputs | |
| 120 | 148 |
| 121 The left side of the diagram shows how to use Portable Native Client | 149 .. _toolchains: |
| 122 (PNaCl, pronounced "pinnacle"). Developers use the PNaCl toolchain | |
| 123 to produce a single, portable (**pexe**) module. At runtime, a translator | |
| 124 built into the browser translates the pexe into native code for the | |
| 125 relevant client architecture. Translation occurs before any code is executed. | |
| 126 | 150 |
| 127 The right side of the diagram shows how to use (non-portable) Native Client. | 151 Toolchains |
| 128 Developers use a nacl-gcc based toolchain to produce multiple | 152 ---------- |
| 129 architecture-dependent (**nexe**) modules, which are packaged into an | 153 |
| 130 application. At runtime, the browser decides which nexe to load based | 154 A Native Client toolchain consists of a compiler, a linker, an assembler and |
| 131 on the architecture of the client machine. | 155 other tools that are used to convert C/C++ source code into a module that is |
| 156 loadable by a browser. | |
| 157 | |
| 158 The Native Client SDK provides two toolchains: | |
| 159 | |
| 160 * The left side of the diagram shows **Portable Native Client** (PNaCl, | |
| 161 pronounced "pinnacle"). An LLVM based toolchain produces a single, portable | |
| 162 (**pexe**) module. At runtime, a translator built into the browser translates | |
| 163 the pexe into native code for the relevant client architecture. Translation | |
| 164 occurs before any code is executed. | |
| 165 | |
| 166 * The right side of the diagram shows **(non-portable) Native Client**. A gcc | |
| 167 based toolchain produces multiple architecture-dependent (**nexe**) modules, | |
| 168 which are packaged into an application. At runtime the browser determines | |
| 169 which nexe to load based on the architecture of the client machine. | |
| 170 | |
| 171 The PNaCl toolchain is recommended for most applications. The nacl-gcc | |
| 172 toolchain should only be used for applications that wont be distributed on the | |
| 173 open web. | |
| 174 | |
| 175 .. _security: | |
| 132 | 176 |
| 133 Security | 177 Security |
| 134 -------- | 178 -------- |
| 135 | 179 |
| 136 Since Native Client permits the execution of native code on client machines, | 180 Since Native Client permits the execution of native code on client machines, |
| 137 special security measures have to be implemented: | 181 special security measures have to be implemented: |
| 138 | 182 |
| 139 * The NaCl sandbox ensures that code accesses system resources only through | 183 * The NaCl sandbox ensures that code accesses system resources only through |
| 140 safe, whitelisted APIs, and operates within its limits without attempting to | 184 safe, whitelisted APIs, and operates within its limits without attempting to |
| 141 interfere with other code running either within the browser or outside it. | 185 interfere with other code running either within the browser or outside it. |
| 142 * The NaCl validator statically analyzes code prior to running it | 186 * The NaCl validator statically analyzes code before running it to make sure it |
| 143 to make sure it only uses code and data patterns that are permitted and safe. | 187 only uses code and data patterns that are permitted and safe. |
| 144 | 188 |
| 145 The above security measures are in addition to the existing sandbox in the | 189 These security measures are in addition to the existing sandbox in the |
| 146 Chrome browser---the Native Client module always executes in a process with | 190 Chrome browser. The Native Client module always executes in a process with |
| 147 restricted permissions. The only interaction between this process and the | 191 restricted permissions. The only interaction between this process and the |
| 148 outside world is through sanctioned browser interfaces. Because of the | 192 outside world is through defined browser interfaces. Because of the |
| 149 combination of the NaCl sandbox and the Chrome sandbox, we say that | 193 combination of the NaCl sandbox and the Chrome sandbox, we say that |
| 150 Native Client employs a double sandbox design. | 194 Native Client employs a **double sandbox** design. |
| 195 | |
| 196 .. _portability: | |
| 151 | 197 |
| 152 Portability | 198 Portability |
| 153 ----------- | 199 ----------- |
| 154 | 200 |
| 155 Portable Native Client (PNaCl, prounounced "pinnacle") employs state-of-the-art | 201 Portable Native Client (PNaCl, prounounced "pinnacle") employs state-of-the-art |
| 156 compiler technology to compile C/C++ source code to a portable bitcode | 202 compiler technology to compile C/C++ source code to a portable bitcode |
| 157 executable (**pexe**). PNaCl bitcode is an OS- and architecture-independent | 203 executable (**pexe**). PNaCl bitcode is an OS- and architecture-independent |
| 158 format that can be freely distributed on the web and :ref:`embedded in web | 204 format that can be freely distributed on the web and :ref:`embedded in web |
| 159 applications<link_nacl_in_web_apps>`. | 205 applications<link_nacl_in_web_apps>`. |
| 160 | 206 |
| 161 The PNaCl translator is a component embedded in the Chrome browser; its task is | 207 The PNaCl translator is a component embedded in the Chrome browser; its task is |
| 162 to run pexe modules. Internally, the translator compiles a pexe to a nexe | 208 to run pexe modules. Internally, the translator compiles a pexe to a nexe |
| 163 (a native executable for the client platform's architecture), and then executes | 209 (described above), and then executes the nexe within the Native Client sandbox |
| 164 the nexe within the Native Client sandbox as described above. It also uses | 210 as described above. The translator uses intelligent caching to avoid |
| 165 intelligent caching to avoid re-compiling the pexe if it was previously compiled | 211 re-compiling the pexe if it was previously compiled on the client's browser. |
| 166 on the client's browser. | |
| 167 | 212 |
| 168 Native Client also supports the execution of nexe modules directly in the | 213 Native Client also supports the execution of nexe modules directly in the |
| 169 browser. However, since nexes contain architecture-specific machine code, | 214 browser. However, since nexes contain architecture-specific machine code, they |
| 170 they are not allowed to be distributed on the open web---they can only be | 215 are not allowed to be distributed on the open web. They can only be used as part |
| 171 used as part of applications and extensions that are installed from the | 216 of applications and extensions that are installed from the Chrome Web Store. |
| 172 Chrome Web Store. | |
| 173 | 217 |
| 174 For more details on the difference between NaCl and PNaCl, see | 218 For more details on the difference between NaCl and PNaCl, see |
| 175 :doc:`NaCl and PNaCl <nacl-and-pnacl>`. | 219 :doc:`NaCl and PNaCl <nacl-and-pnacl>`. |
| 176 | 220 |
| 177 .. _toolchains: | |
| 178 | |
| 179 Toolchains | |
| 180 ---------- | |
| 181 | |
| 182 A toolchain is a set of tools used to create an application from a set of | |
| 183 source files. In the case of Native Client, a toolchain consists of a compiler, | |
| 184 linker, assembler and other tools that are used to convert an | |
| 185 application written in C/C++ into a module that is loadable by the browser. | |
| 186 | |
| 187 The Native Client SDK provides two toolchains: | |
| 188 | |
| 189 * a **PNaCl toolchain** for generating portable NaCl modules (pexe files) | |
| 190 * a **gcc-based toolchain (nacl-gcc)** for generating non-portable NaCl modules | |
| 191 (nexe files) | |
| 192 | |
| 193 The PNaCl toolchain is recommended for most applications. The nacl-gcc | |
| 194 toolchain should only be used for applications that will not be distributed | |
| 195 on the open web. | |
| 196 | |
| 197 .. _link_nacl_in_web_apps: | 221 .. _link_nacl_in_web_apps: |
| 198 | 222 |
| 199 Native Client in a web application | 223 Structure of a web application |
| 200 ================================== | 224 ============================== |
| 201 | 225 |
| 202 .. _application_files: | 226 .. _application_files: |
| 203 | 227 |
| 204 A Native Client application consists of a set of files: | 228 A Native Client application consists of a set of files: |
| 205 | 229 |
| 206 * **HTML**, **CSS**, and **JavaScript** files, as in any modern web | 230 * **HTML and CSS:** The HTML file tells the browser where to find the manifest |
| 207 application. The JavaScript code is responsible for communicating with the | 231 (nmf file) through the embed tag. |
| 208 NaCl module. | 232 |
| 209 * A **pexe** (portable NaCl) file. This module uses the :ref:`Pepper | 233 .. naclcode:: |
| 210 <link_pepper>` API, which provides the bridge to JavaScript and | 234 |
| 211 browser resources. | 235 <embed name="mygame" src="mygame.nmf" type="application/x-pnacl" /> |
| 212 * A Native Client **manifest** file that specifies the pexe to load, along with | |
| 213 some loading options. This manifest file is embedded into the HTML page | |
| 214 through an ``<embed>`` tag, as shown in the figure below. | |
| 215 | 236 |
| 216 .. image:: /images/nacl-in-a-web-app.png | 237 * **Manifest:** The manifest identifies the module to load and specifies |
| 238 options. For example, "mygame.nmf" might look like this: | |
| 239 | |
| 240 .. naclcode:: | |
| 241 | |
| 242 {... | |
| 243 ... | |
| 244 "url": "mygame.pexe", | |
| 245 } | |
| 246 | |
| 247 * **pexe (portable NaCl file):** A compiled Native Client module. It uses the | |
| 248 :ref:`Pepper API <link_pepper>`, which provides a bridge to JavaScript and | |
| 249 other browser resources. | |
| 250 | |
| 251 .. figure:: /images/nacl-in-a-web-app.png | |
| 252 :alt: Structure of a web application | |
| 253 | |
| 254 Structure of a web application | |
| 217 | 255 |
| 218 For more details, see :doc:`Application Structure | 256 For more details, see :doc:`Application Structure |
| 219 <devguide/coding/application-structure>`. | 257 <devguide/coding/application-structure>`. |
| 220 | 258 |
| 221 .. _link_pepper: | 259 .. _link_pepper: |
| 222 | 260 |
| 223 Pepper Plugin API | 261 Pepper plug-in API |
| 224 ----------------- | 262 ------------------ |
| 225 | 263 |
| 226 The Pepper Plugin API (PPAPI), called **Pepper** for convenience, is an | 264 The Pepper plug-in API (PPAPI), called **Pepper** for convenience, is an |
| 227 open-source, cross-platform C/C++ API for web browser plugins. From the point | 265 open-source, cross-platform C/C++ API for web browser plug-ins. Pepper allows a |
| 228 of view of Native Client, Pepper allows a C/C++ module to communicate with | 266 C/C++ module to communicate with the hosting browser and to access system-level |
| 229 the hosting browser and get access to system-level functions in a safe and | 267 functions in a safe and portable way. One of the security constraints in Native |
| 230 portable way. One of the security constraints in Native Client is that modules | 268 Client is that modules cannot make OS-level calls. Pepper provides analogous |
| 231 cannot make any OS-level calls directly. Pepper provides analogous APIs that | 269 APIs that modules can use instead. |
| 232 modules can target instead. | |
| 233 | 270 |
| 234 You can use the Pepper APIs to gain access to the full array of browser | 271 You can use the Pepper APIs to gain access to the full array of browser |
| 235 capabilities, including: | 272 capabilities, including: |
| 236 | 273 |
| 237 * :doc:`Talking to the JavaScript code in your application | 274 * :doc:`Talking to the JavaScript code in your application |
| 238 <devguide/coding/message-system>` from the C++ code in your NaCl module. | 275 <devguide/coding/message-system>` from the C++ code in your NaCl module. |
| 239 * :doc:`Doing file I/O <devguide/coding/file-io>`. | 276 * :doc:`Doing file I/O <devguide/coding/file-io>`. |
| 240 * :doc:`Playing audio <devguide/coding/audio>`. | 277 * :doc:`Playing audio <devguide/coding/audio>`. |
| 241 * :doc:`Rendering 3D graphics <devguide/coding/3D-graphics>`. | 278 * :doc:`Rendering 3D graphics <devguide/coding/3D-graphics>`. |
| 242 | 279 |
| 243 Pepper includes both a C API and a C++ API. The C++ API is a set of bindings | 280 Pepper includes both a :doc:`C API </c-api>` and a :doc:`C++ API </cpp-api>`. |
| 244 written on top of the C API. For additional information about Pepper, see | 281 The C++ API is a set of bindings written on top of the C API. For additional |
| 245 `Pepper Concepts <http://code.google.com/p/ppapi/wiki/Concepts>`_. | 282 information about Pepper, see `Pepper Concepts |
| 283 <http://code.google.com/p/ppapi/wiki/Concepts>`_. | |
| 284 | |
| 285 .. _versioning: | |
| 246 | 286 |
| 247 Versioning | 287 Versioning |
| 248 ========== | 288 ========== |
| 249 | 289 |
| 250 Chrome is released on a six week cycle, and developer versions of Chrome are | 290 Chrome is released on a six week cycle, and developer versions of Chrome are |
| 251 pushed to the public beta channel three weeks before each release. As with any | 291 pushed to the public beta channel three weeks before each release. As with any |
| 252 software, each release of Chrome may include changes to Native Client and the | 292 software, each release of Chrome may include changes to Native Client and the |
| 253 Pepper interfaces that may require modification to existing applications. | 293 Pepper interfaces that may require modification to existing applications. |
| 254 However, modules compiled for one version of Pepper/Chrome should work with | 294 However, modules compiled for one version of Pepper/Chrome should work with |
| 255 subsequent versions of Pepper/Chrome. The SDK includes multiple versions of the | 295 subsequent versions of Pepper/Chrome. The SDK includes multiple versions of the |
| 256 Pepper APIs to help developers make adjustments to API changes and take | 296 Pepper APIs to help you make adjustments to API changes and take |
| 257 advantage of new features: `stable </native-client/pepper_stable>`_, `beta | 297 advantage of new features: `stable </native-client/pepper_stable>`_, `beta |
| 258 </native-client/pepper_beta>`_ and `dev </native-client/pepper_dev>`_. | 298 </native-client/pepper_beta>`_ and `dev </native-client/pepper_dev>`_. |
| 259 | 299 |
| 300 .. _where-to-start: | |
| 301 | |
| 260 Where to start | 302 Where to start |
| 261 ============== | 303 ============== |
| 262 | 304 |
| 263 The :doc:`Quick Start <quick-start>` document provides links to downloads and | 305 The :doc:`Quick Start <quick-start>` document provides links to downloads and |
| 264 documentation that should help you get started with developing and distributing | 306 documentation to help you get started with developing and distributing Native |
| 265 Native Client applications. | 307 Client applications. |
| OLD | NEW |