My (Cozy ?) Firefox Cloud OS

Publié le par /

Il serait temps que je me souvienne que ce fatras est un carnet d’esquisse, et que je m’en serve pour esquisser des bribes d’inspirations pas finies, des fois que quelqu’un ait une idée pour faire avancer la réflexion.

Donc j’ai écrit une appli Web pour Firefox OS. Je dis « pour Firefox OS » car elle utilise un certain nombre de fonctionnalités qui n’existent pour l’instant que sur cette plateforme. Mais, comme je prêche que le Web est la plateforme universelle, je me suis senti obligé de faire en sorte qu’elle fonctionne également, en mode légèrement dégradé, dans tout navigateur moderne. J’ai utilisé pour cela divers types de rustines. Et je me dis que serait fort pratique un service fournissant des rustines à la demande, pour combler les manques actuels des agent utilisateurs Web.

Quelques exemples de telles rustines :

Disposer d’une meilleure connectivité réseau. Mon application intègre un lecteur de flux ATOM. Elle effectue donc des requêtes à destination de divers domaines. En Web classique, c’est interdit du fait de la politique d’origine identique. Dans Firefox OS, cette restriction peut être levée, en accordant explicitement à l’application le droit d’effectuer de telles requêtes. Pour les applications s’exécutant dans un autre environnement, lever la restriction est également faisable, en passant par un proxy CORS. Un tel proxy est l’exemple type de fonctionnalité qu’un service de rustines à la demande pourrait fournir.

Plus généralement, la plateforme Web n’a pas encore pour l’instant accès à de vrais sockets. C’est à dire qu’elle ne peut pas communiquer directement avec d’autres protocoles. Je travaille actuellement sur une application de messagerie, le client ne peut pas dialoguer directement avec des serveurs IMAP/SMTP, etc, et a donc besoin là encore d’un serveur intermédiaire. En attendant que l’API TCPSocket soit standardisée et implémentée, un service fournissant une rustine, par exemple au travers d’un pont Web Socket ↔ TCP Socket, serait le bienvenu.

La communication inter-applicative est aujourd’hui un des plus gros manques de la plateforme Web. Plusieurs propositions existent, Web Intents et Web Activities, mais ni la spécification ni les implémentations ne semblent promettre quelque chose d’utilisable dans un futur proche. En attendant, une solution utilisant un serveur et des Web Hooks me semble assez simple à mettre en œuvre et serait particulièrement utile. J’attend donc d’un service de rustines qu’il me propose une telle solution.

Parmi les fonctionnalités manquantes côté client, on peut encore par exemple citer un planificateur de tâches, capable de déclencher, à l’heure dite ou périodiquement, une fonction d’une application. Et bien évidemment, la synchronisation des données entre les instances d’une application installées sur plusieurs terminaux.

Je suis partisan d’un modèle où nos applications et nos données seraient au plus près de nous, idéalement directement dans nos terminaux. Hébergées sur chacun de nos périphériques disposant d’un navigateur. Malheureusement, une telle solution ne sera pas possible avant plusieurs années, le temps que les navigateurs implémentent les fonctionnalités qui leur manquent. En attendant, nos applications Web auront encore besoin de serveurs pour palier les manques des clients. Ces services, je ne les imagine évidemment qu’auto-hébergés, afin de pouvoir les modeler au plus proche de nos besoins et en garder le contrôle. J’imagine un monde où chaque navigateur aurait son serveur compagnon, les deux travaillant main dans la main.

Un tel projet existe, qui fournit aux applications Web les fonctionnalités aujourd’hui uniquement disponibles côté serveur : c’est Hoodie. Mais je me demande si à côté d’Hoodie, un autre service n’aurait pas sa place. Un service qui, outre ces rustines, hébergerait lui-même des applications Web statiques. Je me demande à quoi ressemblerait une version serveur de Firefox OS, si ce concept même de Firefox Server OS a un sens. Et je me demande si ce Firefox Cloud OS pourrait être un des usages de CozyCloud (le projet pour lequel je travaille). CozyCloud est un serveur hébergeant des applications Web et leur offrant des services transverses. On peut déjà installer un serveur remoteStorage dans sa CozyBox, pour synchroniser des données entre plusieurs instances d’une application. Porter sur Cozy un proxy CORS, Hoodie, ou des équivalents, ne devrait pas poser de problèmes. L’architecture actuelle utilise encore le paradigme d’applications mixtes, mi-client, mi serveur, mais rien n’interdit d’exposer les fonctionnalités spécifiques au serveur comme de réels services accessibles aux applications clientes. Cozy pourrait ainsi devenir le pendant « serveur » de Firefox OS : une plate-forme personnelle d’exécution d’applications Web offrant des fonctionnalités avancées.

Tout cela n’est qu’une intuition, et j’ai du mal à réaliser si je délire complètement ou si c’est une voie à creuser. Vos avis sont les bienvenus ☺

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