Après avoir dédouané l'équipe PNaCL/NaCl l'année dernière et ajouté un support par défaut pour WebAssembly dans Chrome en mars dernier, Google a officiellement annoncé la sortie de PNaCl en faveur de WebAssembly.
Annoncé pendant Google I/O 2013, PNaCl était la solution Google pour exécuter un code natif dans le navigateur. Elle nécessitait un seul LLVM bitcode pour toutes les plates-formes, et le navigateur traduisait et exécutait ensuite le code sur la plateforme sur laquelle Chrome fonctionait. Elle promettait des performances proches de l'exécution d’un code natif, permettant à un ancien ou à un nouveau code en C/C++ de s'exécuter en toute sécurité sur le navigateur. Bien que la technologie respecte ses promesses, PNaCl n'a jamais vu l'adoption parmi les autres fournisseurs de navigateurs, et n'a jamais largement été adoptée par les développeurs. Selon les propres mots de Google, l'utilisation de PNaCl est "suffisamment faible pour justifier sa dépréciation". À compter de Q1/2018, Chrome ne prendra plus en charge PNaCl à l'exception des applications et des extensions Chrome.
En remplacement, Google lance maintenant WebAssembly. WebAssembly a beaucoup plus de chances de réussite car il a été adopté par tous les principaux fournisseurs de navigateurs, y compris Apple, Microsoft et Mozilla. WebAssembly est un format binaire standardisé qui peut être ciblé par des outils compilant des applications natives pour le navigateur. Il est livré avec un support en C et C++ et il existe un support novateur en Rust. Puisqu'il n'a pas encore de garbage collector, les langages tels que Java et C# ne sont pas encore pris en charge, mais le seront à l'avenir.
En tant que réussite pour WebAssembly, Google a souligné cet éditeur de vidéo dans le navigateur et un jeu exécuté sur le moteur Unity à l'intérieur du navigateur.
Chrome et Firefox supportent actuellement WebAssembly par défaut alors que Edge et Safari sont en mode preview. La feuille de route pour Chrome inclut l'ajout de support pour la compilation asynchrone, asm.js, IndexedDB, threads, SIMD, entre autres. Ce Guide de Migration WebAssembly présente comment les fonctionnalités de PNaCl seront obsolètes et ce qu’il faut utiliser à leurs place.