Romain Goyet — 1 décembre 2017
Vous écrivez un logiciel de mise à jour ? Essayez WebUSB !
Comme sur Wikipédia, tout le monde peut contribuer au code source de notre calculatrice et partager ses améliorations avec la communauté.
Mais pour que tout le monde puisse profiter de ces améliorations, nous avons fait en sorte que notre calculatrice puisse être mise à jour très facilement. Étant donné que des mises à jour sans fil ne sont pas possibles, nous avons dû chercher la méthode de mise à jour par câble la plus simple possible.
Nous souhaitions
- Que la mise à jour soit possible depuis un maximum d’ordinateurs et de systèmes d’exploitations.
- Que les utilisateurs n’aient pas besoin d’installer un logiciel spécifique pour mettre à jour leur calculatrice.
- Écrire le moins de code possible. Moins de code, moins de bugs.
Ce qui n’a pas marché
Avant de trouver une bonne solution, nous avons essayé différentes alternatives.
Écrire une application native
C’est de loin la méthode la plus courante, mais malheureusement elle ne répond qu’à un seul de nos trois critères.
- Les utilisateurs doivent installer une app spécifique uniquement pour mettre à jour leur machine. De plus cela peut ne pas fonctionner pour certains utilisateurs qui n’ont pas les droits d’administration nécessaires.
- Difficile à distribuer. Il y a tellement de plateformes différentes qu’il est vraiment difficile de toutes les adresser.
- Du code spécifique à chaque plateforme sera nécessaire. Bien qu’il existe des outils cross-platform comme Qt et libusb, ceux-ci ne dispensent pas de test et de debug sur chaque plateforme. En particulier libusb ne permet pas d’abstraire les différences très significatives des piles USB des différents systèmes d’exploitation.
- L’arroseur arrosé : vos utilisateurs devront maintenant mettre à jour le logiciel de mise à jour…
Écrire une application web couplée à un pont USB-vers-HTTP
Un compromis peut être d’écrire une application web pour l’interface de mise à jour et un petit composant sans interface pour gérer les communications USB. Ce composant expose une API HTTP qui est consommée par ladite application web. C’est une option que nous avons utilisée pendant un moment mais dont nous nous sommes éloignés.
- HTTPs ne peut être utilisé car il est impossible de fournir un certificat valide pour localhost
- C’est toujours pénible à distribuer, et vous aurez toujours besoin de mettre à jour le pont (mais moins qu’une application graphique)
WebUSB à la rescousse !
WebUSB est un ensemble de fonctions qui permettent de faire des communications USB en JavaScript directement depuis votre navigateur web. Cette fonctionnalité répond à l’intégralité de nos besoins :
Une solution parfaite…
- Qui est disponible sur un éventail très large d’appareils et de systèmes d’exploitation (Android, Windows, macOS et Linux)
- Qui fonctionne directement sur la plupart des systèmes d’exploitation
- Qui nous permet d’écrire un seul logiciel en JavaScript : difficile de faire plus efficace !
…qui n’est pas tout à fait magique non plus
- Techniquement WebUSB est un standard ouvert. Mais à date seul Chrome implémente cette spécification, donc les utilisateurs auront peut-être besoin de changer temporairement de navigateur pour mettre à jour leur appareil.
- Sous Windows, il faut un driver. Cela peut être évité pour certaines versions de Windows si vous pouvez ajouter des descripteurs USB spécifiques à votre appareil. Mais quoi qu’il en soit, ce n’est pas un très gros sujet car il s’agit d’un driver sans code.
- Les appareils iOS ne sont pas supportés, mais ces appareils sont tellement verrouillés que c’était une bataille perdue d’avance.
Merci !
WebUSB est disponible dans Chrome à partir de la version 61, disponible depuis septembre. C’est un ajout très utile aux technologies web, et nous souhaitons remercier Reilly Grant et Ken Rockot de Google pour cette initiative.
WebUSB correspond parfaitement à nos besoins, et nous ne serions pas surpris que cette technologie devienne assez populaire pour des cas similaires. Si vous souhaitez l’essayez, rendez-vous sur notre Workshop et mettez à jour votre calculatrice directement depuis votre navigateur !
Romain Goyet — Fondateur de NumWorks
Romain est diplômé de l'École Polytechnique et il a créé NumWorks en mars 2016. Quelques mois auparavant, Romain passait dans le rayon des calculatrices graphiques d'un supermarché et étrangement, ces calculatrices étaient exactement les mêmes que celle qu'il avait au lycée dix ans auparavant ! Il était donc grand temps que cela change. Romain a une curiosité sans limite qu'il assouvit notamment avec des vidéos Youtube très étranges… N'hésitez pas à lui demander conseil !