NaCl, Native Client

NaCl est une technologie obsolète maintenant remplacée par WebAssembly. Elle n'est plus supportée par le navigateur Chrome de Google depuis 2018. Cet article à un intérêt purement historique.

L'API client natif Native Client veut accélérer les applications Web au point de leur donner la vitesse des jeux en 3D, en permettant de faire tourner des logiciels programmés en langage C ou C++ ou autre langage dans le navigateur.
Cela permet aux applications Web d'exécuter du code natif compilé. Celui est sécurisé au même titre que JavaScript. Cela peut permettre au navigateur de constituer une alternative à l'interface Metro de Windows 8.

Native Client, en abrégé NaCl, était supporté sur le navigateur Chrome. Firefox le supportait aussi avec un plugin. Google incitait les développeurs de jeux à réaliser une version de leur jeu pour Chrome. Le framework Unity 3D permet de générer automatiquement une version pour le navigateur.
Google a lui-même porté le logiciel bureautique QuickOffice racheté en 2012 sur NaCl, fournissant ainsi une alternative à Office dans le navigateur.

Afin de rendre le code plus portable, les développeurs ont interfacé NaCl avec le compilateur LLVM qui produit du code intermédiaire, compilé à son tour en code machine. Cette version, Portable NaCl, semble plus pratique à tous égards.

Noter que NaCl est aussi la formule du chlorure de sodium, autrement dit du sel de table. Du sel dans vos applications...

En juin 2015, Google a annoncé sa participation avec les autres éditeurs de navigateurs au projet WebAssembly de bytecode fonctionnant dans le navigateur. Ce nouveau backend combine les avantages d'Asm.js avec ceux de NaCl, dont on peut prévoir qui Google cessera de supporter NaCl dans un futur proche.

Créer sa plateforme de programmation pour Native Client

Pour développer sur Native Client, vous pourrez avoir besoin de ces logiciels (l'utilisateur final n'en a pas besoin).

LLVM se rapproche de Native Client depuis le 2 décembre 2011. La nouvelle version de la plateforme de développement C++ facilite la création d'applications sous Native Client. Il était déjà possible de l'utiliser dans ce cadre, mais cela n'était pas prévu dans sa conception. Les choses ont évolué.

Ce mode opératoire peut évoluer avec le temps. Regarder dans le manuel Getting Started pour la dernière version.

  1. Télécharger le SDK Native Client propre à un système d'exploitation, parmi Windows, Linux ou MacOS.
  2. Créer un répertoire, par exemple nacl, et y désarchiver le contenu.
  3. Lire le manuel Getting started. (Anglais).
  4. Essayer une des démonstrations en ligne de commande.
  5. Bookmarker la page nacl/build/native_client.
    nacl est votre répertoire d'installation.
  6. Fermer les navigateurs supportant Native Client.
  7. Installer le plugin en ligne de commande avec scon.bat sous Windows et scon sous Unix.
    Pour cela, lancer scon.bat ou scon dans /nacl/build/native_client/
  8. Démarrer un serveur local comme Wamp.
  9. Tester avec la page de test:
    http://localhost:5103/scons-out/nacl-x86-32/staging/examples.html
    Qui est dans le répertoire /nacl/build/native_client/.

Voir le tutoriel C++ pour Native Client pour des instructions détaillées.

Avec Chrome 14, NaCl dispose d'une interface entre HTML 5 et le code natif nommée Pepper (Piment) ou plus précisément Pepper Plugin API, un nouveau système de plugin qui remplace le système actuel inventé par Netscape. Mais ce système est propriétaire et est une des raisons pour lesquelles NaCl n'a jamais été porté par Firefox, outre le fait que Mozilla dispose d'une alternative en Asm.js.

Sur les versions anciennes de Chrome il faut activer NaCl. Taper about:flags dans la barre d'adresse de Chrome et aller à la rubrique native client. Cliquer sur enable.

PNaCl, une seule compilation pour tous les systèmes

Portable Native Client, ou PNaCl se prononce comme pinnacle et est un complément à NaCl qui devrait supprimer l'inconvénient de compiler l'application pour chaque système. C'est un ensemble d'outils qui convertit l'application NaCl en bitcode LLVM. Ce dernier qui est contenu dans un fichier .pexe peut être converti automatiquement en code binaire lors de l'exécution.
Il est possible d'exécuter directement le LLVM par une machine virtuelle une fois implémentée dans le navigateur. Cela fait alors de PNaCl une alternative à Asm.js.
Un compilateur PNaCl est integré dans la version 31 de Chrome. Il transforme le code LLVM sur le serveur en langage machine sur le poste client. Il est donc possible d'avoir du code C++ ou tout autre language qui fonctionne dans le navigateur, comme JavaScript!

Exécuter des applications dans le navigateur, un autre moyen simple...

Cela peut être une alternative à NaCl si l'on veut exécuter des applications natives dans le navigateur.
Grâce à un émulateur entièrement écrit en JavaScript, il est possible de faire tourner des programmes Linux en ligne de commande avec JSLinux.

Par exemple, essayez:

tcc -run hello.c

Puis taper ls pour voir les fichiers dans le répertoire.
Ou encore pour éditer le fichier:

emacs hello.c

Une autre solution encore a été imaginée: exécuter une application native GTK dans Canvas. (Anglais). Depuis la version 3.2, GTK permet d'exécuter les applications natives dans le navigateur, à priori sur un système Linux, avec un backend special dénommé Broadway. Ce n'est pas aussi portable.

Voir aussi...