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