Exécution de code natif dans le navigateur. Tsunami en vue

Web Assembly, Blazor and Co.

Lors de cette édition 2019 de la conférence Build, l’exécution de code natif dans le navigateur a été un bon sujet de discussion. Plusieurs grosses sessions y ont été consacrées. J’ai participé à plusieurs d’entre elles et vous fait un petit retour sur ce que j’ai appris et ce que je pense. N’hésitez pas à me partager vos remarques et commentaires.

WebAssembly (Wasm) est une specification qui définit un format de représentation binaire de code exécutable optimisé et ouvert pour le web. Pour les développeurs .NET ou Java que nous sommes, c’est l’équivalent du IL ou du ByteCode. L’objectif visé est de permettre l’exécution de code natif sur le web.

Aujourd’hui les principaux navigateurs PC ou mobiles du marché implémentent déjà WebAssembly 1.0. Et si vous avez un doute sur les capacités de la technologie, jetez un oeil à la capture d’écran suivante dans laquelle un système d’exploitation Windows 2000 complet tourne à l’intérieur d’une page web. Bluffant!

20190508_084109 (2)
Windows 2000 Professionnel s’exécute à l’intérieur du page HTML!

Pourquoi Web Assembly pourrait être la prochaine révolution du Web?

Voici les principales raisons pour lesquelles WebAssembly a toutes ses chances de percer.

Il offre des performances qui dépassent de loin ce que peut faire Javascript. Il utilise des interfaces qui lui donnent accès aux ressources matérielles communes aux différents types d’appareils. Javascript est interprété et n’exploite pas le multithreading à l’intérieur du navigateur. WebAssembly a moins de limitations de ce côté.

Il offre les mêmes garanties d’isolation (sandboxing) que Javascript. Le code binaire se voit contraint aux mêmes limitations que les scripts (pas d’accès aux systèmes de fichiers, aux processus, à la mémoire etc.). Donc on fait du natif au moins aussi secure que Javascript.

L’exécution de code WebAssembly est disponible par défaut car il fait partie du navigateur. Nul besoin de télécharger des runtimes. C’est un bon avantage par rapport à certaines technologies comme Silverlight ou encore Flash. On se facilite grandement la vie pour le déploiement, la disponibilité et la gestion des versions.

Il garantit une portabilité du code à travers les plateformes. Le même fichier binaire s’exécute dans tous les navigateurs sans adaptation. Il faut savoir que Wasm n’est pas limité à s’exécuter dans des navigateurs. Il est déjà aujourd’hui utilisé dans d’autres contextes comme dans le Blockchain par exemple. C’est juste qu’aujourd’hui l’engouement a pas mal pris du côté de la communauté Web qui y voit de l’intérêt. À terme, Wasm devrait même devenir une cible de compilation dans votre IDE préféré au même titre que x86, x64 ou ARM!

Wasm est un standard du W3C. Le groupe de travail est composé entre autres de représentants des principaux navigateurs du marché. Nul doute que cela contribuer positivement à son adoption, à sa compatibilité et à sa pérennité.

Comment exploiter Web Assembly ?

Aujourd’hui des langages comme C/C++/RUST et Go possèdent déjà du tooling pour produire du binaire au format Wasm. Ce sont des langages qui sont des citoyens de premières classes pour Web Assembly.

WebAssemblyStudio
WebAssembly Studio vous permet de compiler et d’exécuter du code C dans votre navigateur.

Mais qu’en est-il du C# et du code .NET ?

C’est là que les équipes Xamarin et .NET Core entrent en jeux.

L’équipe Xamarin a produit une version du runtime Mono au format Wasm qui fonctionne dans le compilateur et qui est capable de transformer à la volée du code IL .NET vers WebAssembly. Pour ceux qui ne sont pas familier avec Mono, il s’agit d’une implémentation alternative du Framework .NET qui tourne sous Mac, Linux, iOS et Android. Elle est conforme .NET Standard 2.0. Mono est donc le socle technique qui permet l’exécution de code .NET à l’intérieur du navigateur.

20190508_085124 (2)

Du côté de l’équipe ASP.NET Core, on s’est penchés sur la faisabilité et l’opportunité de proposer un rendu client basé sur une réutilisation de certaines technologies disponibles. Elle a donc démarré un projet expérimental dont le nom de code est Blazor. Objectif: proposer les vues Razor de ASP.NET dans le navigateur. Sur les derniers mois, les livraisons à la communauté ont été très fréquentes pour partager les avancées réalisées et récolter du feedback. Après 9 itérations, l’intérêt et la faisabilité ont été prouvées. L’équipe ASP.NET vient d’officialiser sont support.

20190507_142801 (2)
Blazor offre deux modes de fonctionnement pour le rendu. Aujourd’hui, seul le rendu server-side est supporté. Le client-side nécessite encore quelques optimisations.

Je suis allé voir la session de Daniel Roth durant laquelle il a démontré une application web réalisée avec Blazor. C’est durant cette présentation que j’ai vraiment pu prendre la mesure de l’intérêt de cette technologie:

  • Tout d’abord Blazor et le support de .NET en général dans le navigateur permet de réutiliser du code qu’on a déjà éventuellement écrit comme des contrôles utilisateurs, des routines de validation, de la logique d’affaire.
  • On peut utiliser toutes les librairies disponibles sur Nuget.org qui sont compatibles .NET Standard 2.0. C’est un gros plus.
  • On peux valoriser nos connaissances du langage C# et de .NET pour faire du code client! Pas de nécessité de se développer une seconde expertise dans un langage Javascript.

Je trouve que ce dernier point est important pour les entreprises qui ont fortement investi dans la formation de leurs employés ces dernières années.

20190507_142715 (3)
L’application Blazzing Pizza exploite pleinement Blazor pour le rendu. Tapez le lien dans votre navigateur pour accéder au code et aux explications.

La plateforme Uno

La compagnie nventive, basée à Montréal, a développé une plateforme qui s’appelle Uno et qui elle aussi offre une option d’exécution dans le navigateur.

Uno propose d’utiliser la technologie XAML introduite par WPF pour concevoir l’interface de votre application quelque soit la plateforme sur laquelle elle doit fonctionner ultimement. Elle s’appuit sur un tooling de conversion qui va produire un rendu équivalent, mais en utilisant des fonctionnalités natives aux plateformes cibles. Ainsi, par exemple, le Button XAML deviendra un DIV dans votre navigateur.

Uno possède déjà une bonne maturité et une notoriété grandissante. nventive l’utilise depuis longtemps pour développer des applications mobiles pour de grandes entreprises partout dans le monde (UPS, Red Bull etc). C’est assez récemment que l’équipe a développé le support pour Web Assembly.

En conclusion

En revenant du Build, je suis pas mal convaincu que nous allons beaucoup entendre parler de Web Assembly dans les mois qui viennent. Le tooling autour de C# et de .NET va certainement évoluer rapidement et cela va valoir la peine de se pencher sur cette technologie qui a tellement à offrir.

Je retiens aussi que pour les entreprises qui veulent préserver leurs investissements dans le temps que c’est une technologie qui offre des perspectives uniques en terme de réutilisation de code et de réutilisation des connaissances des développeurs.

I believe

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s