Cast: Stop logging kVideoFrameSentToEncoder and rename a couple events.
[chromium-blink-merge.git] / native_client_sdk / src / doc / sdk / release-notes.rst
blobd13eacb145fcb73126177e6bb4c180e49e995584
1 .. _sdk-release-notes:
3 #############
4 Release Notes
5 #############
7 Chrome/Pepper 36 (09 May 2014)
8 ==============================
10 PNaCl
11 -----
12 * Support `LLVM vectors
13   <http://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors>`_
14   and `GCC vectors
15   <http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html>`_ for SIMD
16   vectors.
18 Chrome/Pepper 35 (31 Mar 2014)
19 ==============================
21 PNaCl
22 -----
23 * Upgraded LLVM to version 3.4.
24 * Translation now uses dynamic load balancing, making translation time faster.
25 * Unstable pexes (i.e. non-finalized) with debug information can be loaded by
26   Chrome, simplifying debugging with PNaCl. See :ref:`Debugging PNaCl pexes
27   <debugging_pnacl_pexes>`
30 Chrome/Pepper 34 (20 Feb 2014)
31 ==============================
33 Pepper
34 ------
35 * Filesystems can now be passed from JavaScript to NaCl. The resulting
36   ``pp::Var`` will contain a ``pp::Resource`` that can be given to the
37   ``pp::FileSystem`` constructor.
38 * New Audio and Video input APIs have been added as dev interfaces. See
39   `pp::MediaStreamAudioTrack
40   </native-client/pepper_dev/cpp/classpp_1_1_media_stream_audio_track>`_ and
41   `pp::MediaStreamVideoTrack
42   </native-client/pepper_dev/cpp/classpp_1_1_media_stream_video_track>`_ for
43   more details.
45 PNaCl
46 -----
47 * Parallel translation: at least 1.7x faster, even with older pexes.
48 * Intelligent abbreviations in the bitcode: 20% reduction in binary size using
49   the :ref:`pnacl-compress <pnacl_compress>` tool.
51 Chrome/Pepper 33 (16 Dec 2013)
52 ==============================
54 Portable Native Client
55 ----------------------
57 * PNaCl's default C++ standard library is now LLVM's own libc++, based on
58   LLVM 3.3. This library now supports optional ``setjmp``/``longjmp`` exception
59   handling (see `announcement
60   <https://groups.google.com/forum/#!topic/native-client-discuss/0spfg6O04FM>`_
61   for details).
63 SDK
64 ---
66 * The ``nacl_io`` library now includes a FUSE mount.
67 * In the SDK examples, ``common.js`` now loads the Release version of the
68   nexes/pexes that are built (by default).
69 * "``make debug``" and "``make run``" have been fixed on Mac.
71 PNaCl enabled by default in Chrome 31 (12 Nov 2013)
72 ===================================================
74 * Portable Native Client (PNaCl) is enabled by default in Chrome 31. See
75   :doc:`NaCl and PNaCl </nacl-and-pnacl>` for details on the differences between
76   NaCl and PNaCl.
77 * The PNaCl ABI has changed from the preview release in Chrome 30.
78   Pexe modules built with the ``pepper_30`` bundle in the SDK must be recompiled
79   with the ``pepper_31`` bundle or later.
80   As a general rule, we always recommended building applications with the latest
81   stable bundle in the Native Client SDK.
82   The PNaCl ABI will remain stable starting with the release of Chrome 31.
83 * Additional changes in the Chrome/Pepper 31 release:
85   * Updates to the Pepper API, including socket and network support
86   * Improved socket support in the ``nacl_io`` library
88 PNaCl in Chrome 30 Dev channel (01 Aug 2013)
89 ============================================
91 * Portable Native Client (PNaCl) is currently available for preview in Chrome
92   30 (currently in the Dev channel). Apps and sites built with PNaCl can run in
93   Chrome 30 without an explicit flag.
94 * See `Introduction to Portable Native Client
95   <http://www.chromium.org/nativeclient/pnacl/introduction-to-portable-native-client>`_
96   for information on developing for PNaCl. More documentation will be available
97   soon.
98 * Please note that the `PNaCl bitcode ABI
99   <http://www.chromium.org/nativeclient/pnacl/bitcode-abi>`_ may still change
100   before the official public release; if you're developing a PNaCl-based
101   application, be sure to build your code with the latest version of the Native
102   Client SDK.
103 * Update: PNaCl is not enabled by default in beta or stable versions of M30.
105 PNaCl (15 May 2013)
106 ===================
108 * Portable Native Client (PNaCl) is currently available for developer preview
109   in Chrome 29 or higher.
110 * To produce a PNaCl executable (.pexe) file, you must use the pnacl toolchain
111   in the current ``pepper_canary`` bundle. Chrome 29 does not support .pexe
112   files produced by earlier versions of the pnacl toolchain (that is,
113   executables compiled with the ``pepper_28`` bundle or earlier).
114 * To run an application with a PNaCl module, you must launch Chrome 29 with the
115   ``--enable-pnacl`` flag (for `packaged apps </apps/about_apps>`_), or the
116   ``--enable-nacl`` flag (for other apps).
117 * When you launch Chrome with the ``--enable-pnacl`` flag, Chrome loads a PNaCl
118   translator in the background. Wait about a minute after you launch Chrome and
119   check `chrome://nacl <chrome://nacl>`_ to verify that the translator loaded.
120 * PNaCl translators are currently available for 32-bit x86, 64-bit x86, and ARM
121   architectures.
122 * PNaCl applications must use the newlib C library (glibc and dynamic linking
123   are not supported yet).
124 * The intermediate representation (IR) format may change prior to the release
125   of PNaCl. If so, you will need to recompile your application with the pnacl
126   toolchain in a new SDK bundle.
128 Pepper 27 (12 April 2013)
129 =========================
131 The Pepper 27 bundle features a significant number of new libraries that have
132 been incorporated directly into the SDK.
134 Libraries
135 ---------
137 * A number of libraries from the naclports project have been incorporated
138   directly into the Native Client SDK. These libraries include:
140   * image encoding/decoding: jpeg, tiff, png, webp
141   * multimedia: openal, freealut, ogg, vorbis
142   * XML parsing: tinyxml, xml2
143   * miscellaneous: zlib (general purpose compression), freetype (font
144     rendering), lua (Lua interpreter)
146   The libraries are located in ``ports/lib``, and the header files are in
147   ``ports/include``.
149 * The ``httpfs`` filesystem in the nacl_io library now caches content in memory
150   by default; this improves performance considerably.
151 * For applications compiled with a glibc toolchain, ``dlopen()`` can now be
152   used to open shared libraries that are not specified in an application's
153   Native Client manifest (.nmf) file. This allows applications, for example, to
154   download a shared object and then use ``dlopen()`` to access the shared
155   object.  The ``dlopen`` example has been modified to demonstrate this
156   functionality: reverse.cc is built into a shared object (.so) file, which is
157   downloaded and opened using an ``httpfs`` mount.
159 Examples
160 --------
162 * Each example now has a single ``index.html`` file, instead of multiple HTML
163   files corresponding to NaCl modules built using different toolchains and
164   configurations. By default, most examples are built using one toolchain
165   (newlib) and one configuration (Debug). If you build an example using
166   multiple toolchains or configurations, you can specify which version to run
167   in Chrome using the query parameters ``tc`` and ``config``. For example,
168   assuming you are serving an example from the local server localhost:5103, you
169   can run a version of the example built with the glibc toolchain in the
170   Release configuration by specifying the following URL in Chrome:
171   ``http://localhost:5103/index.html?tc=glibc&config=Release``. For additional
172   information about how different NaCl modules are loaded into ``index.html``,
173   see the ``common.js`` file in each example.
175 Build tools and toolchains
176 --------------------------
178 * Common makefiles, including ``tools/common.mk``, can now handle source files
179   located outside of an application's root directory. For example, a Makefile
180   for an application can specify a source file to compile such as
181   ``../../some/other/place.cpp``.
183 Pepper 26 (29 March 2013)
184 =========================
186 The Pepper 26 bundle includes a new HTTP filesystem type in the nacl_mounts
187 library (which has been renamed nacl_io), changes to the example Makefiles, a
188 simple new 3D example, and a threaded file IO example.
190 Build tools and toolchains
191 --------------------------
193 * Makefiles have been changed significantly:
195   * Build commands are now specified in a number of common files
196     (``tools/*.mk``), which are included in the Makefiles in the examples.
197   * By default, make displays a simplified list of build steps (e.g., ``CC
198     newlib/Debug/hello_world_x86_32.o``) rather than the actual build commands.
199     To see the actual build commands, run ``make V=1``.
200   * By default, most examples are built using one toolchain (newlib) and one
201     configuration (Debug). To build an example using a different toolchain or
202     configuration, run ``make`` with the parameters ``TOOLCHAIN=<x>`` or
203     ``CONFIG=<y>``.  You can also run make ``all_versions`` to build an example
204     with all toolchains.
206 * Header files have been moved out of the toolchains. All toolchains now share
207   the same set of header files as host builds. Previously host and NaCl builds
208   used different headers, which could cause build problems.
210 Libraries
211 ---------
213 * The nacl_mounts library has been renamed **nacl_io**, and has been expanded
214   with a new type of mount, httpfs, which can be used to read URLs via HTTP.
215   For details see ``include/nacl_io/nacl_io.h``, as well as the
216   ``hello_nacl_io`` example.
218 Examples
219 --------
221 * A new example, **hello_world_instance3d**, has been added to demonstrate a
222   simplified 3D app.
223 * The **file_io** example has been rewritten to do all file operations on a
224   thread.  The example demonstrates how to use the MessageLoop API and blocking
225   callbacks on a thread.
227 General
228 -------
230 * Old bundles (``pepper_20`` and earlier) have been removed from the Native
231   Client SDK Manifest, and will no longer be updated by the ``naclsdk``
232   command.
234 Pepper 25 (21 December 2012)
235 ============================
237 The Pepper 25 bundle features an ARM toolchain to build Native Client modules
238 for ARM devices, two new Pepper APIs (including the MessageLoop API, which lets
239 you make Pepper calls on background threads), two new libraries (nacl_mounts,
240 which provides a virtual file system that you can use with standard C file
241 operations, and ppapi_main, which lets you implement a Native Client module
242 using a simple ppapi_main function), and two new examples that demonstrate how
243 to use the nacl_mounts and ppapi_main libraries.
245 Build tools and toolchains
246 --------------------------
248 * The SDK includes a new toolchain to build Native Client executables (.nexe
249   files) for **ARM devices**.
251   * Currently the ARM toolchain can only be used to compile modules that use
252     the :ref:`newlib C library <c_libraries>`. You cannot use the ARM toolchain
253     to compile modules that use the glibc library.
254   * The ARM toolchain is in the directory
255     ``pepper_25/toolchain/<host>_arm_newlib``.  The bin subdirectory contains
256     the compiler (``arm-nacl-gcc``), the linker (``arm-nacl-g++``), and the
257     other tools in the toolchain.
258   * Take a look at the ``hello_world`` example to see how to use the ARM
259     toolchain. Go to ``examples/hello_world`` and run ``make``. When the build
260     finishes, the newlib/Debug and newlib/Release subdirectories will contain
261     .nexe files for the x86-32, x86-64, and ARM target architecutes, and a
262     Native Client manifest (.nmf file) that references those three .nexe files.
264 * The simple web server included in the SDK, ``httpd.py``, has been moved from
265   the ``examples/`` directory to the ``tools/`` directory. On Windows, you can
266   run ``httpd.cmd`` (in the ``examples/`` directory) to start the server.
268 PPAPI
269 -----
271 Pepper 25 includes two new APIs:
273 * The `Console API
274   </native-client/pepper_stable/c/struct_p_p_b___console__1__0>`_ lets your
275   module log messages to the JavaScript console in the Chrome browser.
276 * The `MessageLoop
277   </native-client/pepper_stable/cpp/classpp_1_1_message_loop>`_ API lets your
278   module make PPAPI calls on a background thread.  Once you've created a
279   message loop resource, attached it to a thread, and run it, you can post work
280   to the thread, including completion callbacks for asynchronous operations.
281   For a C++ example of how to use the MessageLoop API, see
282   ``pepper_25/include/ppapi/utility/threading/simple_thread.h``. Note that you
283   cannot make asynchronous PPAPI calls on a background thread without creating
284   and using a message loop.
286 Libraries
287 ---------
289 The SDK includes two new libraries:
291 * The **nacl_mounts** library provides a virtual file system that your module
292   can "mount" in a given directory tree. The file system can be one of several
293   types:
295   * "memfs" is an in-memory file system,
296   * "dev" is a file system with various utility nodes (e.g., ``/dev/null``,
297     ``/dev/console[0-3]``, ``/dev/tty``), and
298   * "html5fs" is a persistent file system.
300   Once you've mounted a file system in your module, you can use standard C
301   library file operations: fopen, fread, fwrite, fseek, and fclose. How those
302   operations are performed depends on the type of file system (e.g., for
303   html5fs, the operations are performed using the Pepper FileIO API). For a
304   list of the types of file systems you can mount, see
305   include/nacl_mounts/nacl_mounts.h. For an example of how to use nacl_mounts,
306   see examples/hello_nacl_mounts. Note that html5fs is subject to the same
307   constraints as persistent :ref:`local file IO <devguide-coding-fileio>` in
308   Chrome (for example, prior to using an html5fs file system, you must `enable
309   local file IO <enabling_file_access>`_).
311 * The **ppapi_main** library simplifies the creation of a NaCl module by
312   providing a familiar C programming environment. With this library, your
313   module can have a simple entry point called ppapi_main(), which is similar to
314   the standard C main() function, complete with argc and argv[] parameters.
315   Your module can also use standard C functions such as printf(), fopen(), and
316   fwrite(). For details see include/ppapi_main/ppapi_main.h. For an example of
317   how to use ppapi_main, see examples/hello_world_stdio.
319 Header files for the new libraries are in the ``include/`` directory, source
320 files are in the ``src/`` directory, and compiled libraries are in the ``lib/``
321 directory.
323 Examples
324 --------
326 * The SDK includes two new examples:
328   * **hello_nacl_mounts** illustrates how to use standard C library file
329     operations in a Native Client module through the use of the nacl_mounts
330     library.
331   * **hello_world_stdio** illustrates how to implement a Native Client module
332     with a ppapi_main() function, and how to write to STDOUT and STDERR in a
333     module, through the use of the nacl_mounts and ppapi_main libraries. This
334     example makes it easy for new users to get started with Native Client by
335     letting them start making changes in a familiar C environment.
337 * With a few exceptions, the Makefile for each example now builds the following
338   versions of each example:
340   * glibc toolchain: 32-bit and 64-bit .nexes for the x86 target architecture
341   * newlib toolchain: 32-bit and 64-bit .nexes for the x86 target architecture,
342     and ARM .nexe for the ARM architecture
343   * pnacl toolchain: .pexe (which is subsequently tranlsated to .nexes for the
344     x86-32, x86-64, and ARM architectures)
345   * hosted toolchain: .so or .dll (to be executed as a Pepper plug-in in
346     Chrome)
348 * Additionally, each version is built in both a Debug and a Release
349   configuration.
350 * The Makefile for each example includes two new targets: ``make RUN`` and
351   ``make LAUNCH``. These targets, which are interchangeable, launch a local
352   server and an instance of Chrome to run an example. When the instance of
353   Chrome is closed, the local server is shut down as well.
354 * The hello_world_stdio example includes a simplified Makefile that only lists
355   source dependencies, and invokes the build rules in a separate file
356   (common.mk).
358 Pepper 24 (5 December 2012)
359 ===========================
361 The Pepper 24 bundle features a new, experimental toolchain called PNaCl (short
362 for "Portable Native Client"), a new library (pthreads-win32) for the Windows
363 SDK, and an expanded list of attributes for Pepper 3D contexts that lets
364 applications specify a GPU preference for low power or performance.
366 Build tools and toolchains
367 --------------------------
369 * The SDK includes a new, experimental toolchain called `PNaCl
370   <http://nativeclient.googlecode.com/svn/data/site/pnacl.pdf>`_ (pronounced
371   "pinnacle"). The PNaCl toolchain produces architecture-independent executable
372   files (.pexe files). Chrome doesn't yet support .pexe files directly, but if
373   you want to experiment with this early preview of PNaCl, the toolchain
374   includes a tool to translate .pexe files into architecture-specific .nexe
375   files. Take a look at the ``hello_world`` example to see how to build a .pexe
376   file and translate it into multiple .nexe files. Note that PNaCl is currently
377   restricted to the newlib C standard library – if your application uses glibc,
378   you can't build it with PNaCl.
379 * The ``create_nmf.py`` script uses ELF headers (rather than file names) to
380   determine the architecture of .nexe files. That means you can change the
381   names of your .nexe files and ``create_nmf.py`` will still be able to
382   generate the appropriate Native Client manifest file for your application.
384 Examples
385 --------
387 * The SDK examples now build with four toolchains: the glibc and newlib
388   toolchains, the experimental PNaCl toolchain, and the hosted toolchain on
389   your development machine. Within each toolchain build, each example also
390   builds both a debug and a release version.
391 * The example Makefiles use dependency (.d) files to enable incremental builds.
392 * The pong example has been cleaned up and modified to run more smoothly. The
393   drawing function is now set up as the Flush() callback, which allows 2D
394   drawing to occur as quickly as possible.
396 PPAPI
397 -----
399 * When creating a 3D rendering context, the `attribute list
400   </native-client/pepper_stable/c/group___enums#ga7df48e1c55f6401beea2a1b9c07967e8>`_
401   for the context can specify whether to prefer low power or performance for
402   the GPU. Contexts with a low power preference may be created on an integrated
403   GPU; contexts with a performance preference may be created on a discrete GPU.
405 Windows SDK
406 -----------
408 * The Windows SDK includes the pthreads-win32 library to assist in porting from
409   win32 code. You can use this library when developing your module as a Pepper
410   plug-in (.dll). See pepper_24/include/win/pthread.h and
411   pepper_24/src/pthread/README for additional information.
412 * The update utility naclsdk.bat works when it is run from a path with spaces.
414 Pepper 23 (15 October 2012)
415 ===========================
417 The Pepper 23 bundle includes support for the nacl-gdb debugger on Mac and
418 32-bit Windows, resources to enable hosted development on Linux, and changes to
419 make the SDK examples compliant with version 2 of the Chrome Web Store manifest
420 file format.
422 Tools
423 -----
425 * The :ref:`nacl-gdb debugger <using_gdb>` now works on all systems (Mac,
426   Windows, and Linux).
428 * The output of the SDK update utility has been simplified. When you run the
429   command ``naclsdk list``, the utility displays one line for each available
430   bundle, annotated with an "``I``" if the bundle is already installed on your
431   system, and a "``*``" if the bundle has an update available. To see full
432   information about a bundle, use the command ``naclsdk info <bundle>`` (for
433   example, ``naclsdk info pepper_28``).
435 Linux SDK
436 ---------
438 * Developers using the Linux SDK now have resources, including pre-built
439   libraries and example Makefiles, that make it easier to **build a module as a
440   Pepper plugin** (sometimes called a "trusted" or "in-process" plugin) using
441   the native C/C++ compiler on their development system. In essence this makes
442   developing a Native Client module a two-step process:
444   #. Build the module into a shared library (.so file) using your system's
445      C/C++ compiler. Test and debug the .so file using the tools in your normal
446      development environment.
447   #. Build the module into a .nexe file using the compiler from one of the
448      Native Client toolchains in the SDK (nacl-gcc or nacl-g++). Test and debug
449      the .nexe file using nacl-gdb.
451   This two step development process has many benefits—in particular, you can
452   use the compilers, debuggers, profilers, and other tools that you're already
453   familiar with. But there are a few potential issues to keep in mind:
455   * Chrome uses different threading models for trusted plugins and Native
456     Client modules.
457   * Certain operations such as platform-specific library calls and system calls
458     may succeed during trusted development, but fail in Native Client.
460   Here are the resources you can use to build your module into a Pepper plugin:
462   * header files are in ``pepper_23/include``
463   * source files are in ``pepper_23/src``
464   * pre-built libraries are in ``pepper_23/lib``
466   You can now build and run most of the examples in the SDK as Pepper plugins.
468   * Look at the example Makefiles or run ``make`` in the example directories to
469     see the commands and flags used to build modules as Pepper plugins.
470   * Run ``make LAUNCH`` in the example directories to see how to use the
471     ``--register-pepper-plugins`` argument to load a Pepper plugin in Chrome.
472     Note that you must set the ``CHROME_PATH`` environment variable and start a
473     :ref:`local server <web_server>` prior to running this command.
475 Examples
476 --------
478 * On Linux and Windows systems, most of the examples now build with three
479   toolchains: the Native Client glibc and newlib toolchains, and the native
480   toolchain on the host system. Modules built with the native toolchain on the
481   host system can only run as Pepper plugins.
482 * All examples in the SDK now comply with version 2 of the Chrome Web Store
483   `manifest file format </extensions/manifest>`_. By default,
484   applications that use version 2 of the manifest file format apply a strict
485   `content security policy </extensions/contentSecurityPolicy>`_, which
486   includes a restriction against inline JavaScript. This restriction prohibits
487   both inline ``<script>`` blocks and inline event handlers (e.g., ``<button
488   onclick="...">``).  See `Manifest Version </extensions/manifestVersion>`_ for
489   a list of changes between version 1 and version 2 of the manifest file
490   format, and a support schedule for applications that use version 1.
492 PPAPI
493 -----
495 * `PP_InputEvent_Modifier
496   </native-client/pepper_stable/c/group___enums#ga21b811ac0484a214a8751aa3e1c959d9>`_
497   has two new enum values (_ISLEFT and _ISRIGHT).
498 * The memory leak in the `WebSocket
499   </native-client/pepper_stable/c/struct_p_p_b___web_socket__1__0>`_ API has
500   been fixed.
502 Pepper 22 (22 August 2012)
503 ==========================
505 The Pepper 22 bundle includes a **command-line debugger**, resources to enable
506 **hosted development on Windows**, and changes to the example Makefiles (each
507 example now builds both a debug and a release version).
509 Tools
510 -----
512 * The SDK now includes a **command-line debugger** that you can use to debug
513   Native Client modules. See :ref:`Debugging with nacl-gdb
514   <devcycle-debugging>` for instructions on how to use this debugger. For now,
515   nacl-gdb only works on 64-bit Windows, 64-bit Linux, and 32-bit Linux
516   systems. Support for Mac and 32-bit Windows systems will be added soon.
518 Windows SDK
519 -----------
521 * Developers using the Windows SDK can now **build a module as a Pepper
522   plugin** (sometimes called a "trusted" or "in-process" plugin) using the
523   native C/C++ compiler on their development system. In essence this makes
524   developing a Native Client module a two-step process:
526   #. Build the module into a DLL using your system's C/C++ compiler. Test and
527      debug the DLL using the tools in your normal development environment.
528   #. Build the module into a .nexe using the compiler from one of the Native
529      Client toolchains in the SDK (nacl-gcc or nacl-g++). Test and debug the
530      .nexe using nacl-gdb.
532   This two step development process has many benefits—in particular, you can
533   use the compilers, debuggers, profilers, and other tools that you're already
534   familiar with. But there are a few potential issues to keep in mind:
536   * Some libraries that are commonly used with Native Client may not build
537     easily on Windows.
538   * You may need to put in extra effort to get source code to compile with
539     multiple compilers, e.g., Microsoft Visual Studio and GCC.
540   * Chrome uses different threading models for trusted plugins and Native
541     Client modules.
542   * Certain operations such as platform-specific library calls and system calls
543     may succeed during trusted development, but fail in Native Client.
545   Here are the resources you can use to build your module into a DLL:
547   * header files are in ``pepper_22\include``
548   * source files are in ``pepper_22\src``
549   * pre-built libraries are in ``pepper_22\lib``
551 * A Visual Studio add-in will be available in the near future with
552   configurations that include platforms for both Pepper plugins and NaCl
553   modules.
555 .. Note::
556   :class: note
558   **Note:** It's also possible to build a module as a trusted plugin on Mac and
559   Linux systems, but doing so requires more work because the SDK does not yet
560   include the above resources (library source files and pre-built libraries)
561   for Mac and Linux systems. To build and debug a trusted plugin on Mac and
562   Linux systems, you need to `get the Chromium code
563   <http://dev.chromium.org/developers/how-tos/get-the-code>`_ and then follow
564   the `Mac instructions
565   <http://www.chromium.org/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac>`_
566   or `Linux instructions
567   <http://www.chromium.org/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux>`_.
568   In the future, the SDK will include resources for hosted development on Mac
569   and Linux as well as Windows.
571 Examples
572 --------
574 * Each example in the SDK now builds both a debug and a release version. As
575   before, most examples also build newlib and glibc versions, which means that
576   there are now four versions for each example. Take a look at the Makefiles in
577   the examples to see the compiler flags that are used for debug and release
578   versions. For a description of those flags, see :ref:`Compile flags for
579   different development scenarios <compile_flags>`.
580 * Comments have been added to common.js, which is used in all the examples. The
581   JavaScript in common.js inserts an <embed> element that loads the NaCl module
582   in each example's web page, attaches event listeners to monitor the loading
583   of the module, and implements handleMessage() to respond to messages sent
584   from the NaCl module to the JavaScript side of the application
586 PPAPI
587 -----
589 * The ``CompletionCallbackFactory`` class template now takes a thread traits
590   class as its second parameter. For details see the `CompletionCallbackFactory
591   class template reference
592   </native-client/pepper_stable/cpp/classpp_1_1_completion_callback_factory#details>`_.
594 .. TODO: Port release notes for older releases