Fix crash on app list start page contents not existing.
[chromium-blink-merge.git] / native_client_sdk / src / doc / sdk / release-notes.rst
blobf3ccf1537a6546e5fe3be27b5349cbe72681a60a
1 .. _sdk-release-notes:
3 #############
4 Release Notes
5 #############
7 The dates in the following release notes denote when Chrome and the NaCl SDK
8 reached canary status. The stable release is typically 6 weeks later.
11 .. Chrome/Pepper 43 (03 April 2015)
12 .. ===================================
14 .. PNaCl
15 .. -----
17 .. * The C11/C++11 `acquire`, `release`, and `acq_rel` memory orders are now
18    generated by default. The in-browser Chrome 42 translator supports them, the
19    SDK can therefore generate them.
21 Chrome/Pepper 42 (20 February 2015)
22 ===================================
24 SDK
25 ---
27 * The SDK now contains experimental versions of ``i686-nacl-clang``,
28   ``x86_64-nacl-clang``, and ``arm-nacl-clang`` as well as the ``clang++``
29   equivalents. These toolchains are based on the same LLVM version as PNaCl, but
30   can be used to generate NaCl ``.nexe`` files instead of translating a
31   ``.pexe`` locally or using the GCC toolchain.
33 NaCl
34 ----
36 * The x86 NaCl validators accept instructions from the FMA3 extensions, as well
37   as AVX2 instructions (except `VGATHER`).
39 PNaCl
40 -----
42 * PNaCl supports C11/C++11 memory orders `acquire`, `release`, and `acq_rel`. It
43   used to upgrade all accesses to `seq_cst`. It still upgrades `consume` to
44   `acquire` (no compiler currently implements `consume`), and `relaxed` to
45   `seq_cst` (to conservatively avoid platform differences due to out-of-thin-air
46   problems). This is currently disabled by default in the SDK so that the
47   in-browser translator installed on users' machines has time to gain this
48   support. Developers can turn it on by passing the
49   ``-pnacl-memory-order-seq-cst-only=false`` flag to ``opt``.
50 * PNaCl handles nested struct type expansion, which allows it to better support
51   non-C languages such as Rust.
52 * PNaCl breaks up many integer operations over 64-bits into individual 64-bit
53   operations. This is often encountered when using large consecutive bitfields.
55 Chrome/Pepper 41 (09 January 2015)
56 ==================================
58 NaCl
59 ----
61 * The x86 NaCl validators accept instructions from the AVX1 extensions.
63 PNaCl
64 -----
66 * PNaCl is now based on LLVM 3.5.
68 Chrome/Pepper 40 (November 07 2014)
69 ===================================
71 * `VideoDecoder
72   </native-client/pepper_stable/cpp/classpp_1_1_video_decoder.html>`_ is now
73   stable, see the SDK example in ``pepper_canary/examples/api/video_decode``.
75 Chrome/Pepper 39 (26 September 2014)
76 ====================================
78 Pepper
79 ------
81 * Support for ``DEBUG_ONLY:dev://postmessage`` has been removed in favor of
82   :ref:`other more useful debugging approaches <devcycle-debugging>`.
83 * ``postMessageAndAwaitResponse`` is now stable and allows JavaScript to
84   `communicate synchronously
85   </native-client/pepper_stable/cpp/classpp_1_1_message_handler>`_ with PNaCl
86   embeds.
88 Chrome/Pepper 38 (15 August 2014)
89 =================================
91 PNaCl
92 -----
94 * Compilation speed improvements due to validation caching of the translator and
95   linker.
96 * Performance improvement of SIMD vector shuffle.
98 Chrome/Pepper 37 (20 June 2014)
99 ===============================
101 PNaCl
102 -----
104 * 2–10% translation time improvement.
105 * Improved vector load/store and shuffle performance.
107 Pepper
108 ------
110 * Media Streams Input support.
111 * Compositor API.
112 * Hardware Decode API in development preview.
113 * Sync API in development preview.
118 * Demo of a :ref:`full development environment in the browser <io2014>`.
120 Chrome/Pepper 36 (09 May 2014)
121 ==============================
123 PNaCl
124 -----
125 * Support `LLVM vectors
126   <http://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors>`_
127   and `GCC vectors
128   <http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html>`_ for SIMD
129   vectors through :ref:`Portable SIMD Vectors
130   <portable_simd_vectors>`. Note that this is still an early release,
131   and performance is expected to become acceptable for version 37 of
132   Chrome. More SIMD instructions will be added in later releases.
134 Chrome/Pepper 35 (31 Mar 2014)
135 ==============================
137 PNaCl
138 -----
139 * Upgraded LLVM to version 3.4.
140 * Translation now uses dynamic load balancing, making translation time faster.
141 * Unstable pexes (i.e. non-finalized) with debug information can be loaded by
142   Chrome, simplifying debugging with PNaCl. See :ref:`Debugging PNaCl pexes
143   <debugging_pnacl_pexes>`
146 Chrome/Pepper 34 (20 Feb 2014)
147 ==============================
149 Pepper
150 ------
151 * Filesystems can now be passed from JavaScript to NaCl. The resulting
152   ``pp::Var`` will contain a ``pp::Resource`` that can be given to the
153   ``pp::FileSystem`` constructor.
154 * New Audio and Video input APIs have been added as dev interfaces. See
155   `pp::MediaStreamAudioTrack
156   </native-client/pepper_dev/cpp/classpp_1_1_media_stream_audio_track>`_ and
157   `pp::MediaStreamVideoTrack
158   </native-client/pepper_dev/cpp/classpp_1_1_media_stream_video_track>`_ for
159   more details.
161 PNaCl
162 -----
163 * Parallel translation: at least 1.7x faster, even with older pexes.
164 * Intelligent abbreviations in the bitcode: 20% reduction in binary size using
165   the :ref:`pnacl-compress <pnacl_compress>` tool.
167 Chrome/Pepper 33 (16 Dec 2013)
168 ==============================
170 Portable Native Client
171 ----------------------
173 * PNaCl's default C++ standard library is now LLVM's own libc++, based on
174   LLVM 3.3. This library now supports optional ``setjmp``/``longjmp`` exception
175   handling (see `announcement
176   <https://groups.google.com/forum/#!topic/native-client-discuss/0spfg6O04FM>`_
177   for details).
182 * The ``nacl_io`` library now includes a FUSE mount.
183 * In the SDK examples, ``common.js`` now loads the Release version of the
184   nexes/pexes that are built (by default).
185 * "``make debug``" and "``make run``" have been fixed on Mac.
187 PNaCl enabled by default in Chrome 31 (12 Nov 2013)
188 ===================================================
190 * Portable Native Client (PNaCl) is enabled by default in Chrome 31. See
191   :doc:`NaCl and PNaCl </nacl-and-pnacl>` for details on the differences between
192   NaCl and PNaCl.
193 * The PNaCl ABI has changed from the preview release in Chrome 30.
194   Pexe modules built with the ``pepper_30`` bundle in the SDK must be recompiled
195   with the ``pepper_31`` bundle or later.
196   As a general rule, we always recommended building applications with the latest
197   stable bundle in the Native Client SDK.
198   The PNaCl ABI will remain stable starting with the release of Chrome 31.
199 * Additional changes in the Chrome/Pepper 31 release:
201   * Updates to the Pepper API, including socket and network support
202   * Improved socket support in the ``nacl_io`` library
204 PNaCl in Chrome 30 Dev channel (01 Aug 2013)
205 ============================================
207 * Portable Native Client (PNaCl) is currently available for preview in Chrome
208   30 (currently in the Dev channel). Apps and sites built with PNaCl can run in
209   Chrome 30 without an explicit flag.
210 * See `Introduction to Portable Native Client
211   <http://www.chromium.org/nativeclient/pnacl/introduction-to-portable-native-client>`_
212   for information on developing for PNaCl. More documentation will be available
213   soon.
214 * Please note that the `PNaCl bitcode ABI
215   <http://www.chromium.org/nativeclient/pnacl/bitcode-abi>`_ may still change
216   before the official public release; if you're developing a PNaCl-based
217   application, be sure to build your code with the latest version of the Native
218   Client SDK.
219 * Update: PNaCl is not enabled by default in beta or stable versions of M30.
221 PNaCl (15 May 2013)
222 ===================
224 * Portable Native Client (PNaCl) is currently available for developer preview
225   in Chrome 29 or higher.
226 * To produce a PNaCl executable (.pexe) file, you must use the pnacl toolchain
227   in the current ``pepper_canary`` bundle. Chrome 29 does not support .pexe
228   files produced by earlier versions of the pnacl toolchain (that is,
229   executables compiled with the ``pepper_28`` bundle or earlier).
230 * To run an application with a PNaCl module, you must launch Chrome 29 with the
231   ``--enable-pnacl`` flag (for `Chrome apps </apps>`_), or the ``--enable-nacl``
232   flag (for other apps).
233 * When you launch Chrome with the ``--enable-pnacl`` flag, Chrome loads a PNaCl
234   translator in the background. Wait about a minute after you launch Chrome and
235   check `chrome://nacl <chrome://nacl>`_ to verify that the translator loaded.
236 * PNaCl translators are currently available for 32-bit x86, 64-bit x86, and ARM
237   architectures.
238 * PNaCl applications must use the newlib C library (glibc and dynamic linking
239   are not supported yet).
240 * The intermediate representation (IR) format may change prior to the release
241   of PNaCl. If so, you will need to recompile your application with the pnacl
242   toolchain in a new SDK bundle.
244 Pepper 27 (12 April 2013)
245 =========================
247 The Pepper 27 bundle features a significant number of new libraries that have
248 been incorporated directly into the SDK.
250 Libraries
251 ---------
253 * A number of libraries from the naclports project have been incorporated
254   directly into the Native Client SDK. These libraries include:
256   * image encoding/decoding: jpeg, tiff, png, webp
257   * multimedia: openal, freealut, ogg, vorbis
258   * XML parsing: tinyxml, xml2
259   * miscellaneous: zlib (general purpose compression), freetype (font
260     rendering), lua (Lua interpreter)
262   The libraries are located in ``ports/lib``, and the header files are in
263   ``ports/include``.
265 * The ``httpfs`` filesystem in the nacl_io library now caches content in memory
266   by default; this improves performance considerably.
267 * For applications compiled with a glibc toolchain, ``dlopen()`` can now be
268   used to open shared libraries that are not specified in an application's
269   Native Client manifest (.nmf) file. This allows applications, for example, to
270   download a shared object and then use ``dlopen()`` to access the shared
271   object.  The ``dlopen`` example has been modified to demonstrate this
272   functionality: reverse.cc is built into a shared object (.so) file, which is
273   downloaded and opened using an ``httpfs`` mount.
275 Examples
276 --------
278 * Each example now has a single ``index.html`` file, instead of multiple HTML
279   files corresponding to NaCl modules built using different toolchains and
280   configurations. By default, most examples are built using one toolchain
281   (newlib) and one configuration (Debug). If you build an example using
282   multiple toolchains or configurations, you can specify which version to run
283   in Chrome using the query parameters ``tc`` and ``config``. For example,
284   assuming you are serving an example from the local server localhost:5103, you
285   can run a version of the example built with the glibc toolchain in the
286   Release configuration by specifying the following URL in Chrome:
287   ``http://localhost:5103/index.html?tc=glibc&config=Release``. For additional
288   information about how different NaCl modules are loaded into ``index.html``,
289   see the ``common.js`` file in each example.
291 Build tools and toolchains
292 --------------------------
294 * Common makefiles, including ``tools/common.mk``, can now handle source files
295   located outside of an application's root directory. For example, a Makefile
296   for an application can specify a source file to compile such as
297   ``../../some/other/place.cpp``.
299 Pepper 26 (29 March 2013)
300 =========================
302 The Pepper 26 bundle includes a new HTTP filesystem type in the nacl_mounts
303 library (which has been renamed nacl_io), changes to the example Makefiles, a
304 simple new 3D example, and a threaded file IO example.
306 Build tools and toolchains
307 --------------------------
309 * Makefiles have been changed significantly:
311   * Build commands are now specified in a number of common files
312     (``tools/*.mk``), which are included in the Makefiles in the examples.
313   * By default, make displays a simplified list of build steps (e.g., ``CC
314     newlib/Debug/hello_world_x86_32.o``) rather than the actual build commands.
315     To see the actual build commands, run ``make V=1``.
316   * By default, most examples are built using one toolchain (newlib) and one
317     configuration (Debug). To build an example using a different toolchain or
318     configuration, run ``make`` with the parameters ``TOOLCHAIN=<x>`` or
319     ``CONFIG=<y>``.  You can also run make ``all_versions`` to build an example
320     with all toolchains.
322 * Header files have been moved out of the toolchains. All toolchains now share
323   the same set of header files as host builds. Previously host and NaCl builds
324   used different headers, which could cause build problems.
326 Libraries
327 ---------
329 * The nacl_mounts library has been renamed **nacl_io**, and has been expanded
330   with a new type of mount, httpfs, which can be used to read URLs via HTTP.
331   For details see ``include/nacl_io/nacl_io.h``, as well as the
332   ``hello_nacl_io`` example.
334 Examples
335 --------
337 * A new example, **hello_world_instance3d**, has been added to demonstrate a
338   simplified 3D app.
339 * The **file_io** example has been rewritten to do all file operations on a
340   thread.  The example demonstrates how to use the MessageLoop API and blocking
341   callbacks on a thread.
343 General
344 -------
346 * Old bundles (``pepper_20`` and earlier) have been removed from the Native
347   Client SDK Manifest, and will no longer be updated by the ``naclsdk``
348   command.
350 Pepper 25 (21 December 2012)
351 ============================
353 The Pepper 25 bundle features an ARM toolchain to build Native Client modules
354 for ARM devices, two new Pepper APIs (including the MessageLoop API, which lets
355 you make Pepper calls on background threads), two new libraries (nacl_mounts,
356 which provides a virtual file system that you can use with standard C file
357 operations, and ppapi_main, which lets you implement a Native Client module
358 using a simple ppapi_main function), and two new examples that demonstrate how
359 to use the nacl_mounts and ppapi_main libraries.
361 Build tools and toolchains
362 --------------------------
364 * The SDK includes a new toolchain to build Native Client executables (.nexe
365   files) for **ARM devices**.
367   * Currently the ARM toolchain can only be used to compile modules that use
368     the :ref:`newlib C library <c_libraries>`. You cannot use the ARM toolchain
369     to compile modules that use the glibc library.
370   * The ARM toolchain is in the directory
371     ``pepper_25/toolchain/<host>_arm_newlib``.  The bin subdirectory contains
372     the compiler (``arm-nacl-gcc``), the linker (``arm-nacl-g++``), and the
373     other tools in the toolchain.
374   * Take a look at the ``hello_world`` example to see how to use the ARM
375     toolchain. Go to ``examples/hello_world`` and run ``make``. When the build
376     finishes, the newlib/Debug and newlib/Release subdirectories will contain
377     .nexe files for the x86-32, x86-64, and ARM target architecutes, and a
378     Native Client manifest (.nmf file) that references those three .nexe files.
380 * The simple web server included in the SDK, ``httpd.py``, has been moved from
381   the ``examples/`` directory to the ``tools/`` directory. On Windows, you can
382   run ``httpd.cmd`` (in the ``examples/`` directory) to start the server.
384 PPAPI
385 -----
387 Pepper 25 includes two new APIs:
389 * The `Console API
390   </native-client/pepper_stable/c/struct_p_p_b___console__1__0>`_ lets your
391   module log messages to the JavaScript console in the Chrome browser.
392 * The `MessageLoop
393   </native-client/pepper_stable/cpp/classpp_1_1_message_loop>`_ API lets your
394   module make PPAPI calls on a background thread.  Once you've created a
395   message loop resource, attached it to a thread, and run it, you can post work
396   to the thread, including completion callbacks for asynchronous operations.
397   For a C++ example of how to use the MessageLoop API, see
398   ``pepper_25/include/ppapi/utility/threading/simple_thread.h``. Note that you
399   cannot make asynchronous PPAPI calls on a background thread without creating
400   and using a message loop.
402 Libraries
403 ---------
405 The SDK includes two new libraries:
407 * The **nacl_mounts** library provides a virtual file system that your module
408   can "mount" in a given directory tree. The file system can be one of several
409   types:
411   * "memfs" is an in-memory file system,
412   * "dev" is a file system with various utility nodes (e.g., ``/dev/null``,
413     ``/dev/console[0-3]``, ``/dev/tty``), and
414   * "html5fs" is a persistent file system.
416   Once you've mounted a file system in your module, you can use standard C
417   library file operations: fopen, fread, fwrite, fseek, and fclose. How those
418   operations are performed depends on the type of file system (e.g., for
419   html5fs, the operations are performed using the Pepper FileIO API). For a
420   list of the types of file systems you can mount, see
421   include/nacl_mounts/nacl_mounts.h. For an example of how to use nacl_mounts,
422   see examples/hello_nacl_mounts. Note that html5fs is subject to the same
423   constraints as persistent :ref:`local file IO <devguide-coding-fileio>` in
424   Chrome (for example, prior to using an html5fs file system, you must `enable
425   local file IO <enabling_file_access>`_).
427 * The **ppapi_main** library simplifies the creation of a NaCl module by
428   providing a familiar C programming environment. With this library, your
429   module can have a simple entry point called ppapi_main(), which is similar to
430   the standard C main() function, complete with argc and argv[] parameters.
431   Your module can also use standard C functions such as printf(), fopen(), and
432   fwrite(). For details see include/ppapi_main/ppapi_main.h. For an example of
433   how to use ppapi_main, see examples/hello_world_stdio.
435 Header files for the new libraries are in the ``include/`` directory, source
436 files are in the ``src/`` directory, and compiled libraries are in the ``lib/``
437 directory.
439 Examples
440 --------
442 * The SDK includes two new examples:
444   * **hello_nacl_mounts** illustrates how to use standard C library file
445     operations in a Native Client module through the use of the nacl_mounts
446     library.
447   * **hello_world_stdio** illustrates how to implement a Native Client module
448     with a ppapi_main() function, and how to write to STDOUT and STDERR in a
449     module, through the use of the nacl_mounts and ppapi_main libraries. This
450     example makes it easy for new users to get started with Native Client by
451     letting them start making changes in a familiar C environment.
453 * With a few exceptions, the Makefile for each example now builds the following
454   versions of each example:
456   * glibc toolchain: 32-bit and 64-bit .nexes for the x86 target architecture
457   * newlib toolchain: 32-bit and 64-bit .nexes for the x86 target architecture,
458     and ARM .nexe for the ARM architecture
459   * pnacl toolchain: .pexe (which is subsequently tranlsated to .nexes for the
460     x86-32, x86-64, and ARM architectures)
461   * hosted toolchain: .so or .dll (to be executed as a Pepper plug-in in
462     Chrome)
464 * Additionally, each version is built in both a Debug and a Release
465   configuration.
466 * The Makefile for each example includes two new targets: ``make RUN`` and
467   ``make LAUNCH``. These targets, which are interchangeable, launch a local
468   server and an instance of Chrome to run an example. When the instance of
469   Chrome is closed, the local server is shut down as well.
470 * The hello_world_stdio example includes a simplified Makefile that only lists
471   source dependencies, and invokes the build rules in a separate file
472   (common.mk).
474 Pepper 24 (5 December 2012)
475 ===========================
477 The Pepper 24 bundle features a new, experimental toolchain called PNaCl (short
478 for "Portable Native Client"), a new library (pthreads-win32) for the Windows
479 SDK, and an expanded list of attributes for Pepper 3D contexts that lets
480 applications specify a GPU preference for low power or performance.
482 Build tools and toolchains
483 --------------------------
485 * The SDK includes a new, experimental toolchain called `PNaCl
486   <http://nativeclient.googlecode.com/svn/data/site/pnacl.pdf>`_ (pronounced
487   "pinnacle"). The PNaCl toolchain produces architecture-independent executable
488   files (.pexe files). Chrome doesn't yet support .pexe files directly, but if
489   you want to experiment with this early preview of PNaCl, the toolchain
490   includes a tool to translate .pexe files into architecture-specific .nexe
491   files. Take a look at the ``hello_world`` example to see how to build a .pexe
492   file and translate it into multiple .nexe files. Note that PNaCl is currently
493   restricted to the newlib C standard library – if your application uses glibc,
494   you can't build it with PNaCl.
495 * The ``create_nmf.py`` script uses ELF headers (rather than file names) to
496   determine the architecture of .nexe files. That means you can change the
497   names of your .nexe files and ``create_nmf.py`` will still be able to
498   generate the appropriate Native Client manifest file for your application.
500 Examples
501 --------
503 * The SDK examples now build with four toolchains: the glibc and newlib
504   toolchains, the experimental PNaCl toolchain, and the hosted toolchain on
505   your development machine. Within each toolchain build, each example also
506   builds both a debug and a release version.
507 * The example Makefiles use dependency (.d) files to enable incremental builds.
508 * The pong example has been cleaned up and modified to run more smoothly. The
509   drawing function is now set up as the Flush() callback, which allows 2D
510   drawing to occur as quickly as possible.
512 PPAPI
513 -----
515 * When creating a 3D rendering context, the `attribute list
516   </native-client/pepper_stable/c/group___enums#ga7df48e1c55f6401beea2a1b9c07967e8>`_
517   for the context can specify whether to prefer low power or performance for
518   the GPU. Contexts with a low power preference may be created on an integrated
519   GPU; contexts with a performance preference may be created on a discrete GPU.
521 Windows SDK
522 -----------
524 * The Windows SDK includes the pthreads-win32 library to assist in porting from
525   win32 code. You can use this library when developing your module as a Pepper
526   plug-in (.dll). See pepper_24/include/win/pthread.h and
527   pepper_24/src/pthread/README for additional information.
528 * The update utility naclsdk.bat works when it is run from a path with spaces.
530 Pepper 23 (15 October 2012)
531 ===========================
533 The Pepper 23 bundle includes support for the nacl-gdb debugger on Mac and
534 32-bit Windows, resources to enable hosted development on Linux, and changes to
535 make the SDK examples compliant with version 2 of the Chrome Web Store manifest
536 file format.
538 Tools
539 -----
541 * The :ref:`nacl-gdb debugger <using_gdb>` now works on all systems (Mac,
542   Windows, and Linux).
544 * The output of the SDK update utility has been simplified. When you run the
545   command ``naclsdk list``, the utility displays one line for each available
546   bundle, annotated with an "``I``" if the bundle is already installed on your
547   system, and a "``*``" if the bundle has an update available. To see full
548   information about a bundle, use the command ``naclsdk info <bundle>`` (for
549   example, ``naclsdk info pepper_28``).
551 Linux SDK
552 ---------
554 * Developers using the Linux SDK now have resources, including pre-built
555   libraries and example Makefiles, that make it easier to **build a module as a
556   Pepper plugin** (sometimes called a "trusted" or "in-process" plugin) using
557   the native C/C++ compiler on their development system. In essence this makes
558   developing a Native Client module a two-step process:
560   #. Build the module into a shared library (.so file) using your system's
561      C/C++ compiler. Test and debug the .so file using the tools in your normal
562      development environment.
563   #. Build the module into a .nexe file using the compiler from one of the
564      Native Client toolchains in the SDK (nacl-gcc or nacl-g++). Test and debug
565      the .nexe file using nacl-gdb.
567   This two step development process has many benefits—in particular, you can
568   use the compilers, debuggers, profilers, and other tools that you're already
569   familiar with. But there are a few potential issues to keep in mind:
571   * Chrome uses different threading models for trusted plugins and Native
572     Client modules.
573   * Certain operations such as platform-specific library calls and system calls
574     may succeed during trusted development, but fail in Native Client.
576   Here are the resources you can use to build your module into a Pepper plugin:
578   * header files are in ``pepper_23/include``
579   * source files are in ``pepper_23/src``
580   * pre-built libraries are in ``pepper_23/lib``
582   You can now build and run most of the examples in the SDK as Pepper plugins.
584   * Look at the example Makefiles or run ``make`` in the example directories to
585     see the commands and flags used to build modules as Pepper plugins.
586   * Run ``make LAUNCH`` in the example directories to see how to use the
587     ``--register-pepper-plugins`` argument to load a Pepper plugin in Chrome.
588     Note that you must set the ``CHROME_PATH`` environment variable and start a
589     :ref:`local server <web_server>` prior to running this command.
591 Examples
592 --------
594 * On Linux and Windows systems, most of the examples now build with three
595   toolchains: the Native Client glibc and newlib toolchains, and the native
596   toolchain on the host system. Modules built with the native toolchain on the
597   host system can only run as Pepper plugins.
598 * All examples in the SDK now comply with version 2 of the Chrome Web Store
599   `manifest file format </extensions/manifest>`_. By default,
600   applications that use version 2 of the manifest file format apply a strict
601   `content security policy </extensions/contentSecurityPolicy>`_, which
602   includes a restriction against inline JavaScript. This restriction prohibits
603   both inline ``<script>`` blocks and inline event handlers (e.g., ``<button
604   onclick="...">``).  See `Manifest Version </extensions/manifestVersion>`_ for
605   a list of changes between version 1 and version 2 of the manifest file
606   format, and a support schedule for applications that use version 1.
608 PPAPI
609 -----
611 * `PP_InputEvent_Modifier
612   </native-client/pepper_stable/c/group___enums#ga21b811ac0484a214a8751aa3e1c959d9>`_
613   has two new enum values (_ISLEFT and _ISRIGHT).
614 * The memory leak in the `WebSocket
615   </native-client/pepper_stable/c/struct_p_p_b___web_socket__1__0>`_ API has
616   been fixed.
618 Pepper 22 (22 August 2012)
619 ==========================
621 The Pepper 22 bundle includes a **command-line debugger**, resources to enable
622 **hosted development on Windows**, and changes to the example Makefiles (each
623 example now builds both a debug and a release version).
625 Tools
626 -----
628 * The SDK now includes a **command-line debugger** that you can use to debug
629   Native Client modules. See :ref:`Debugging with nacl-gdb
630   <devcycle-debugging>` for instructions on how to use this debugger. For now,
631   nacl-gdb only works on 64-bit Windows, 64-bit Linux, and 32-bit Linux
632   systems. Support for Mac and 32-bit Windows systems will be added soon.
634 Windows SDK
635 -----------
637 * Developers using the Windows SDK can now **build a module as a Pepper
638   plugin** (sometimes called a "trusted" or "in-process" plugin) using the
639   native C/C++ compiler on their development system. In essence this makes
640   developing a Native Client module a two-step process:
642   #. Build the module into a DLL using your system's C/C++ compiler. Test and
643      debug the DLL using the tools in your normal development environment.
644   #. Build the module into a .nexe using the compiler from one of the Native
645      Client toolchains in the SDK (nacl-gcc or nacl-g++). Test and debug the
646      .nexe using nacl-gdb.
648   This two step development process has many benefits—in particular, you can
649   use the compilers, debuggers, profilers, and other tools that you're already
650   familiar with. But there are a few potential issues to keep in mind:
652   * Some libraries that are commonly used with Native Client may not build
653     easily on Windows.
654   * You may need to put in extra effort to get source code to compile with
655     multiple compilers, e.g., Microsoft Visual Studio and GCC.
656   * Chrome uses different threading models for trusted plugins and Native
657     Client modules.
658   * Certain operations such as platform-specific library calls and system calls
659     may succeed during trusted development, but fail in Native Client.
661   Here are the resources you can use to build your module into a DLL:
663   * header files are in ``pepper_22\include``
664   * source files are in ``pepper_22\src``
665   * pre-built libraries are in ``pepper_22\lib``
667 * A Visual Studio add-in will be available in the near future with
668   configurations that include platforms for both Pepper plugins and NaCl
669   modules.
671 .. Note::
672   :class: note
674   **Note:** It's also possible to build a module as a trusted plugin on Mac and
675   Linux systems, but doing so requires more work because the SDK does not yet
676   include the above resources (library source files and pre-built libraries)
677   for Mac and Linux systems. To build and debug a trusted plugin on Mac and
678   Linux systems, you need to `get the Chromium code
679   <http://dev.chromium.org/developers/how-tos/get-the-code>`_ and then follow
680   the `Mac instructions
681   <http://www.chromium.org/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac>`_
682   or `Linux instructions
683   <http://www.chromium.org/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux>`_.
684   In the future, the SDK will include resources for hosted development on Mac
685   and Linux as well as Windows.
687 Examples
688 --------
690 * Each example in the SDK now builds both a debug and a release version. As
691   before, most examples also build newlib and glibc versions, which means that
692   there are now four versions for each example. Take a look at the Makefiles in
693   the examples to see the compiler flags that are used for debug and release
694   versions. For a description of those flags, see :ref:`Compile flags for
695   different development scenarios <compile_flags>`.
696 * Comments have been added to common.js, which is used in all the examples. The
697   JavaScript in common.js inserts an <embed> element that loads the NaCl module
698   in each example's web page, attaches event listeners to monitor the loading
699   of the module, and implements handleMessage() to respond to messages sent
700   from the NaCl module to the JavaScript side of the application
702 PPAPI
703 -----
705 * The ``CompletionCallbackFactory`` class template now takes a thread traits
706   class as its second parameter. For details see the `CompletionCallbackFactory
707   class template reference
708   </native-client/pepper_stable/cpp/classpp_1_1_completion_callback_factory#details>`_.
710 .. TODO: Port release notes for older releases