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