Acthésis : prothèse pour activités Web

Publié le par /

Mozilla travaille d’arrache-pied pour faire du Web une plate-forme applicative de premier plan, c’est à dire pour permettre aux applications développées avec les technologies du Web et s’exécutant dans les navigateurs d’être aussi puissantes que les applications « natives ». À cet effet, Mozilla enrichit fréquemment la plateforme de nouvelles APIs, offrant des fonctionnalités avancées aux applications Web. Avec l’arrivée de Firefox OS et la volonté de transformer le navigateur en système d’exploitation complet, le nombre de nouvelles APIs a cru rapidement.

Malheureusement, la standardisation n’avance pas aussi rapidement que la technique, et la plupart des APIs créées pour Firefox OS n’ont pas encore été approuvées comme des standards, et ne sont implémentées par aucun autre navigateur. La plupart ne sont même disponibles que pour Firefox OS, et non dans Firefox. Ce qui pose un problème : les applications Web qui les utilisent ne peuvent fonctionner que sur Firefox OS. Ce sont donc pour l’instant non de vrais applications Web, avec ce que ça implique d’universalité, mais des applications spécifiques à Firefox OS, utilisant des technologies Web.

Cette situation n’est pas nouvelle, car c’est souvent ainsi qu’avance le Web : un navigateur implémente une fonctionnalité, elle est ensuite standardisée et implémentée par les autres navigateurs. Et comme le Web est une plateforme géniale, il dispose d’une technique permettant souvent de pallier les problèmes de compatibilité le temps qu’une technologie soit disponible dans tous les navigateurs : les prothèses, ou polyfill. Ce sont des bouts de code qui implémentent une nouvelle fonctionnalité en utilisant celles existantes.

Pour permettre aux nouvelles APIs proposées par Mozilla d’être utilisées partout, nous devons donc créer des prothèses qui les rendent disponibles dans les autres navigateurs. C’est ce à quoi je me suis modestement attelé avec une bibliothèque, Acthesis, qui essaie de rendre utilisable dans tous les navigateurs l’API Web Activity. Celle-ci permet à une application de déléguer certaines activités à une autre application. Chaque applications peut ainsi se concentrer sur une tâche et interagir avec d’autres pour tout ce qui n’est pas son cœur de métier. Par exemple, votre application de courrier électronique pourra communiquer via Web Activity avec celles qui gérent votre carnet d’adresses, vos fichiers, votre agenda…

Les programmes qui prennent en charge une activité l’indiquent à un registre central. Une application souhaitant déléguer une activité interroge ce registre, qui répond avec la liste des prestataires disponibles. L’utilisateur choisit un de ces prestataires, qui est alors lancé, et une réponse est éventuellement envoyée à l’application initiale. Dans le cas de Firefox OS, le registre central jouant l’intermédiaire entre les applications est l’OS lui-même. Pour ma prothèse, j’ai choisi de passer par un serveur Web. C’est la solution la plus portable, mais elle présente quelques inconvénients (en particulier elle ne fonctionne pas lorsque le navigateur est hors ligne). Une alternative serait de proposer la prothèse sous forme d’extension pour les navigateurs.

L’utilisation d’Acthésis implique donc de disposer d’un serveur et de configurer toutes les applications pour l’utiliser (WebFinger pourrait probablement être ici de quelqu’aide) Par ailleurs, je ne gère pour l’instant pas de notions de droits d’accès, donc le serveur doit être personnel.

Acthésis est avant tout une démonstration pour valider la possibilité de créer de créer des prothèses pour certaines des APIs développées par Mozilla pour Firefox OS. Je pense que le jeu en vaut la chandelle, mais j’attend à présent des retours.

Accessoirement, j’utilise aussi cette bibliothèque pour des démonstrations (tout ce que je sais faire) de communication entre les applications de Cozy Cloud. J’ai dans mes tiroirs un prototype fonctionnel de communication entre la messagerie et le gestionnaire des fichiers. Il permet d’attacher à un nouveau message des fichiers stockés dans dans son nuage personnel, et d’enregistrer dans son nuage les pièces jointes des messages reçus. Le gestionnaire de fichiers étant, grâce à ce module complémentaire, capable de recevoir et partager des fichiers via des Web Activities, toute autre application externe à Cozy peut utiliser ce mécanisme pour accéder à un de mes fichiers stockés dans le nuage.

À titre expérimental, j’ai commencé à implémenter d’autres APIs dans Acthésis :

  • MozAlarms permet de créer des alarmes qui lanceront une application et lui feront exécuter une tâche. Par exemple, une application de lecture de flux RSS pourra être réveillée toutes les heures pour récupérer les nouveaux articles parus dans les flux, les enregistrer, puis se rendormir ;
  • Simple Push permet d’envoyer à une application des informations sans qu’elle les ait demandées.

Ces deux APIs posent cependant un problème : la prothèse ne peut fonctionner que si l’application est déjà ouverte dans un onglet du navigateur. Pour résoudre ce souci, il faudrait soit avoir une application toujours ouverte qui jouerait un rôle d’intermédiaire et ouvrirait à la demande les autres applications dans de nouvelles fenêtres, soit implémenter la prothèse sous la forme d’une extension pour les navigateurs. Une solution moins portable et moins universelle, mais qui rendrait la prothèse plus proche des fonctionnalités émulées.

Voilà. Quelqu’un a un avis ?

Pour réagir, n'hésitez-pas à m'écrire : clochix chez clochix.net ou à soumettre l'url de votre commentaire :
(Je traite les mentions à la main, elles peuvent mettre plusieurs jours avant d'apparaître)

Si vous avez un compte Github, vous pouvez me proposer des corrections en éditant ce billet

Fork me on GitHub