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