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