Lydéric's Blog

Talking about technology, business, personal development and science.

View on GitHub
2 February 2021

Consommer "Local-First" en informatique

by Lydéric Dutillieux

Introduction

C'est qui le patron ? L'utilisateur ou le data center ?

En 2020, chacun de nous a généré en moyenne 1.7 Mo de donnée par seconde. Pourtant, à l'heure où la donnée est considérée comme “le nouveau pétrole du net”, du moins par ceux qui savent l'exploiter, le constat est sans appel : les données que nous générons ne nous sont pas facilement accessibles. Une bonne partie de cette donnée atterrie dans “Le Cloud”, c'est à dire dans “l'ordinateur de quelqu'un d'autre”, si l'on s'autorise cette définition vulgaire du cloud.

Certains fournisseurs de services en ligne proposent des fonctionnalités d'export de vos données. En tant qu'utilisateur, cela vous permet de “récupérer” vos données sur votre machine, et de jouir de la liberté de les visualiser ou les traiter comme bon vous semble. Mais j'insiste sur la sémantique du mot 'récupérer' : Verbe transitif signifiant 'rentrer en possession de ce qu'on avait perdu ou dépensé'.

Dans de nombreux cas, lorsque vous exportez des données depuis votre fournisseur de service en ligne, vous effectuez bien une 'récupération' avec le sens donné ci-dessus. Vous récupérez sur votre machine des données qui n'y ont jusqu'alors jamais résidé bien que vous les ayez envoyées au fournisseur de services cloud. Qui plus est, vous ne récupérez que ce que le fournisseur de services accepte d'exporter. Rendez-vous compte de la situation. Pour avoir vos propres données sur votre propre machine, vous devez d'abord en faire don à votre fournisseur de services et ensuite lui en demander une copie.

Vous avez certainement déjà expérimenté la situation suivante:

Aujourd'hui, ce scénario est si courant qu'il en est devenu habituel. On n'imagine pas d'alternative, c'est presque incontestable : c'est le serveur qui décide. Vous conviendrez qu'il peut-être pertinent de remettre en doute cette dernière assertion. Qui est vraiment le patron des données que je génère ? Est-ce moi, ou bien est-ce le serveur qui me permet d'y accéder via internet ?

En 2021, souvent, c'est la donnée présente sur les serveurs qui fait foi. Mais il n'en a pas toujours été ainsi… Remontons le temps ensemble, et rappelons nous ce que nous avons oublié de l'époque où l'outillage informatique n'était pas “serveur-centré”.

Comment on faisait avant internet ? Retour vers le futur

Avant qu'internet ne devienne ce que nous connaissons aujourd'hui, nous avions un usage très différent de nos ordinateurs, particulièrement en ce qui concerne les activités de création de contenu ou de gestion de données personnelles. Nous installions des logiciels sur notre machine et pouvions directement commencer à les utiliser. Inutile de 'Créer un compte', 'Choisir une adresse mail', 'Choisir un mot de passe', 'Choisir un mot de passe avec minimum 8 caractères, un caractère spécial, et de la poudre de perlimpinpin'. Nos données étaient stockées uniquement dans notre machine, elle même protégée par un mot de passe utilisateur pour en assurer la sécurité.

Dans certains cas, les données étaient stockées sous forme de fichiers lisibles et éditables, permettant des cas d'usages que l'outil en question n'avait pas prévu. Les modifications que nous entreprenions sur un fichier étaient instantanées, sans latence réseau, sans contempler le mouvement perpétuel de l'icône de chargement, sans dépendre d'une connexion internet. Les seules limites étaient la puissance de calcul, la vitesse d'écriture sur les disques durs et l'espace disponible sur ces derniers. Ces limites ont d'ailleurs été repoussées depuis, et continuent de l'être.

Quant à la collaboration entre collègues, elle n'était pas impossible pour autant. Peut-être était elle moins fluide qu'avec les actuels espaces de travail en ligne ? Je l'accorde. Mais c'est davantage une question de moyens techniques disponibles à l'époque qu'une question d'architecture centralisée des SI (Systèmes d'Information).

Les partages de fichiers se faisaient pour partie en P2P (Peer to Peer, de paire à paire). Via les logiciels directement, ou bien plus primitivement, par clef USB, par email, ou encore par Ethernet. La donnée ne voyageait pas bien loin, les transferts étaient peu gourmands en bande passante et en énergie. La sécurité informatique était plus primitive, physique, géographique.

Si Bob voulait accéder au fichier d'Alice, cette dernière pouvait tout de même partager tout un dossier de son ordinateur aux autres utilisateurs du réseau LAN (réseau privé). Il était également possible de stocker les données utilisées par le programme sur un serveur propre à l'entreprise, disponible uniquement sur le réseau local privé et régi par des droits d'accès utilisateur.

En guise de synthèse rétrospective et schématique, on peut affirmer deux choses :

Et si nous pouvions tirer le meilleur des deux mondes ? C'est la promesse de l'approche *”Local First”*.

Qu'est-ce que le Local-First ?

Définition de l'approche Local First

L'approche 'Local-First', en génie logiciel, est un ensemble de principes promouvant le fonctionnement en local d'un système informatique.

Cette approche a été démocratisée par Martin Kleppmann en Avril 2019 dans son article scientifique “Local-first software: you own your data, in spite of the cloud”. (Aparté : Je vous encourage vivement à lire ses travaux, très riches en information. Je ne me concentre ici que sur une partie essentielle mais non exhaustive de son article. Le reste de mon propos est issu de mes propres réflexions sur le sujet.)

Kleppmann y définit les 7 propriété idéales des logiciels Local-First:

En résumé, un logiciel *'Local-First'* doit être capable de fonctionner en toute indépendance de l'éditeur logiciel, sur l'infrastructure privée et locale de l'utilisateur. Par construction, cela lui garantit un fonctionnement hors-ligne (sans internet), une latence minimale, une disponibilité maximale, la même sécurité que sa machine personnelle et des interactions à huis clos entre collaborateurs. Dans un système 'Local-First', c'est la donnée présente sur la machine de l'utilisateur qui fait autorité, et le serveur qui en “récupère” une copie cryptée, pas l'inverse.

Pour quel type de services ?

Soyons nuancés et objectifs. Aucune approche n'est “une balle en argent”. En informatique comme dans toute autre science pratique, tout est question de compromis. Certains modèles fonctionnent bien pour certains besoins et moins bien pour d'autres. Il en est exactement de même pour l'approche Local-First.

Prenons le contre-exemple d'un réseau social comme Linkedin ou Reddit, pour ne citer qu'eux. L'essence même de ces plateformes est de permettre à des individus d'interagir sur une place virtuelle publique. Par construction, et bien qu'elle soit envisageable, une approche Local-First ne semble pas pertinente au premier abord pour construire des systèmes à forte interaction publique.

En revanche, il est fréquent pour une équipe de partager des fichiers sur Google Docs, OneDrive ou DropBox, communiquer sur Slack, Teams ou Discord, organiser son travail sur Trello ou encore Jira. Pourtant l'usage que nous faisons de ces services externes est principalement privé. La donnée générée par cet usage a vocation à être utilisée en local sur la machine des utilisateurs, et à transiter d'un collaborateur à l'autre uniquement. Nous pourrions tout à fait utiliser des services Local-First qui couvrent exactement les mêmes besoins et garantissent une collaboration à huis clos performante et sécurisée. Alors pourquoi pas ?

L'Université de Cambridge et Ink & Switch, un laboratoire de recherche informatique, se sont penchés sur la question et ont réalisé trois prototypes assez complets pour prouver par l'exemple la viabilité d'une approche Local-First. En particulier, ils ont développé Trellis, un clone de Trello, le fameux outil de gestion de projet qui s'inspire de la méthode Kanban développée par Toyota. Alors que Trello est complètement serveur-centré, Trellis est Local-First. Pour illustrer mes propos, voici une courte vidéo de démonstration de Trellis ici. Le code source est disponible en open-source. Chers confrères informaticiens, n'hésitez pas à vous en inspirer.

Les autres vertus du 'Local-First'

Pour l'utilisateur, les avantages du local-first sont vraiment nombreux. Si la sécurité de vos données n'est pas votre principale préoccupation, vous conviendrez sans doute que la décentralisation des services présente d'autres avantages :

Les enjeux du Local-First…

… sur le plan UX

S'affranchir d'internet n'est pas une mince affaire. Fort heureusement, des solutions sont dores et déjà employées pour relever les défis du Local-First.

Par exemple, un utilisateur inaccoutumé aux applications décentralisées pourrait être surpris par des changements en terme d'expérience utilisateur. En effet, les systèmes décentralisés offrent beaucoup plus de choix et de libertés aux utilisateurs. Des étapes de configuration ou d'administration système peuvent s'avérer nécessaires à l'installation ou en début de session. Le risque de tomber dans le paradoxe du choix est à prendre en compte, et une solution “clef en main”/”magique” offrant moins de libertés peut alors s'avérer attractive, surtout à court terme, aussi contre-intuitif que cela puisse sembler.

D'autres considérations sont à prendre en compte pour l'utilisateur. En fonction de l'usage qu'il choisit de faire du système local-first, il peut être responsabilisé et amené à gérer lui même la sécurité de son infrastructure locale, le dimensionnement de ses moyens de stockage, les sauvegardes de données et la configuration de ses canaux de communication pour une synchronisation entre appareils. Gérer une installation sur son ordinateur peut également s'avérer fastidieux en comparaison avec une simple connexion à un portail web.

Pour aider les utilisateurs à consommer local-first, il est possible en tant qu'éditeur logiciel de fournir une bonne configuration de base par type d'utilisateurs et laisser l'utilisateur modifier sa configuration plus tard, lorsqu'il aura acquis de l'expérience sur logiciel. Pour une entreprise, il est possible de faire appel à un administrateur système et de réduire au maximum les nombres de choix qu'auront à effectuer les utilisateurs.

Par ailleurs, au fil des années, les formats de données supportés par les applications et logiciels évoluent. De nouveaux émergent, d'autres sombrent. Si l'on envisage de faire un usage durable de sa donnée, alors on peut être amené à utiliser des convertisseurs d'un format à l'autre, ou des scripts de migration. Effectuer ces opérations régulièrement permet d'éviter d'accumuler de la dette technique.

Il arrive parfois que des utilisateurs très insatisfaits abandonnent des solutions propriétaires opaques ou payantes. Certains de ces utilisateurs se tournent alors vers des éditeurs de logiciels du monde de l'Open Source et leur font don du montant économisé. Je peux citer l'exemple de ce bloggeur, qui a résilié son abonnement de 10€/mois chez DropBox et en a fait don à Syncthing, solution open-source, partiellement Local-First et bien plus à son goût. Voilà de quoi remettre un peu de sens derrière les métiers techniques : en construisant de beaux produits qui bichonnent les utilisateurs, on améliore leur vie au point d'en obtenir des dons.

… sur le plan technique

*Nota bene* : N'hésitez pas à sauter cette partie, en particulier si vous n'êtes pas familier avec le jargon technique. Les parties qui suivent donnent un peu moins mal aux cheveux.

Permettre un usage hors-ligne impose quelques contraintes techniques et qualitatives.

Des solutions existent pour que les navigateurs internet puissent fonctionner sans connexion à internet et stocker des données en local sur la machine des utilisateurs. Dans son article, Kleppmann cite les plus connues : le 'localStorage', les 'services workers', les 'PWA' (Progressive Web Apps), l'API cache JavaScript, … Cependant, étant donné l'historique très “serveur-centré” des navigateurs internet, ces solutions fonctionnent davantage comme une roue de secours que comme le moteur de la machinerie. En particulier, il peut arriver qu'un utilisateur supprime ses cookies ou son cache, manuellement ou automatiquement, et par conséquent, qu'il perde ses précieuses données. Sans compter qu'il semble difficile pour l'utilisateur d'empêcher les mises à jour indésirables de la webapp lorsqu'il s'y connecte.

Par soucis de résilience à ce genre de risques, mieux vaut se pencher sur des alternatives en dehors du navigateur web. Je pense notamment à deux grandes possiblités :

Un autre problème technique mineur pouvant survenir est la compatibilité entre les différentes version du logiciel, en particulier lorsque des individus voués à collaborer utilisent des versions différentes. Il faut donc privilégier les modifications non cassantes ou agir collectivement lors d'un passage à une version plus récente.

Une fois résolus tous ces problèmes de surface, rentrons un peu plus dans le détail (mais pas trop, je me réserve le luxe de vous expliquer tout ça dans un autre article, un peu plus technique)

Pour conclure sur l'aspect technique, vous conviendrez qu'adopter une approche Local-First demande un peu de préparation. Il faut s'approprier des technologies récentes, parfois bas niveau, dont l'usage n'est ni industrialisé à l'heure ou j'écris lignes, ni maîtrisé par le plus grand nombre. Il faut accepter de remettre en question les modèles 'classiques' et aligner son approche avec le besoin utilisateur ou le produit que l'on cherche à construire.

… sur le plan business

Les fins nez qui ont tenu jusqu'ici m'attendent certainement au tournant. Comment développer un logiciel Local-First peut-il être rentable ?

Si les utilisateurs d'un logiciel Local-First choisissent de ne pas partager leur données, l'éditeur n'a aucune chance de générer de la valeur en exploitant ou revendant ces données. Pour l'éditeur, ce manque à gagner est en quelque sorte le prix à payer pour construire un système sain et éthique au regard des données de ses utilisateurs.

Notons au passage que disposer d'une faible quantité de données sur les usages qui sont faits d'un logiciel peut rendre difficile l'amélioration continue de ce dernier et le développement de nouvelles fonctionnalités. Sans retour utilisateur automatique via une collecte de données, l'éditeur peut avoir l'impression de travailler à l'aveugle. Pour autant, rien ne lui empêche de mener régulièrement des enquêtes de satisfaction utilisateur, ou de disposer d'un espace de réclamation en ligne. Autrement dit, il est possible de collecter des retours utilisateurs de façon ciblée, explicite et consentie.

De plus, la rareté de la compétence couplée au temps nécessaire pour développer du Local-First laissent penser qu'un investissement initial conséquent est à prévoir.

Alors finalement, est-ce que ça vaut vraiment le coup ?

Bien sur que oui !

Collecter, exploiter et revendre des données n'est pas la seule façon de gagner de l'argent avec une solution logicielle !

Vente de licences d'utilisation, vente d'extensions sur-mesures pour ses clients, support technique, hébergement ou assistance à l'hébergement autonome, maintenance, sponsoring, …

Les opportunités sont nombreuses et les modèles économiques de l'Open Source ne peuvent qu'appuyer mes propos.

Pour autant, et bien que j'en sois un fervent défenseur, il n'est pas requis de tomber dans l'idéalisme de l'Open Source : les logiciels propriétaires ont davantage de raisons de générer du profit. Occulter la recette de fabrication d'une technologie innovante, qui plus est dont le coût de développement est élevé, permet de réduire le risque d'apparition de nouveaux entrants (cf les Cinq Forces de Michael Porter) et d'être en position de force sur le marché de la prestation de services autour de son produit.

Prendre en otage les données des utilisateurs n'est pas le seul moyen d'en améliorer le taux de rétention. Construire un produit éthique, respectueux et permissif en est un autre. Certes, cela impose quelques contraintes techniques, managériales, économiques et stratégiques, mais à mon sens, le jeu en vaut largement la chandelle : qualité inégalée, utilisateurs conquis même sur le long terme, produit sans écart moral, …

… sur le plan sociétal

Produire Local-First, c'est “ouvrir les binaires” (i.e. partager aux utilisateurs les fichiers nécessaires pour faire tourner le programme en local) ou encore “ouvrir le code source”. Mais consommer Local-First, c'est potentiellement *”fermer la donnée”*.

Quel serait l'impact sur la société d'une rétention de données généralisée ?

Ne pas partager ses données, c'est risquer de ne pas en exploiter tout le potentiel. Prenons un exemple marquant pour illustrer cela : Supposons que je collecte à titre personnel et privé des données bio-métriques sur mon métabolisme, et que je m'en réserve l'accès exclusif. N'ayant aucune compétence en médecine, je serais dans l'incapacité de détecter une anomalie et donc de prévenir un accident grave ou vital. Supposons à présent que des milliers d'individus au profil similaire au mien font la même chose, et possèdent les même symptômes que moi, probablement pour les mêmes raisons (condition de vie, génôme, …). Sans partage de données à l'échelle de la société, les études statistiques macroscopiques sont impossibles. Lorsqu'elles ne sont pas saisies, ces opportunités de faire progresser les diagnostics médicaux, et plus généralement la science, constituent un véritable manque à gagner pour la société. Partager ses données peut permettre d'oeuvrer intelligemment et collectivement.

Il est essentiel qu'un tiers qui collecte des données adopte une politique éthique, transparente et intelligible. En levant toute ambiguïté quant aux usages, les utilisateurs comprennent les intérêts individuels et collectifs du partage de donnée, et y consentent de manière réfléchie, sans aucun rapport de force. En ce sens, il est possible de collecter des données avec le Local-First. Cependant, cette démarche est rendue tangible puisque le partage de données est optionnel donc explicite et manuel au moment de la configuration, et se fait en contrepartie de bénéfices bien définis. L'utilisateur est plus engagé sur le devenir de sa donnée.

Par ailleurs, produire et consommer Local-First n'est pas sans conséquences sur l'écologie. Décentraliser le stockage ou la puissance de calcul peut provoquer des régressions en terme d'efficience (perte des économies d'échelle, baisse des taux d'utilisation, hardware archaïque et gourmand, infrastructure sub-optimales, …). Pour autant, si la donnée circule moins et que les tensions sur les infrastructures réseau ou les serveurs diminuent, alors des optimisations en énergie plutôt qu'en performance/rapidité deviennent possible. Attention cependant : ce ne sont que de simples conjectures qui ne s'appuient sur aucune étude spécifique. Ces assertions restent à prouver par des données chiffrées, ce qui dépasse largement le périmètre de cet article. La décentralisation offre des avantages écologiques, la centralisation en offre d'autres. Sans données 'terrain', le débat est loin d'être tranché.

Conclusion

L'informatique s'est imposée comme l'une des disciplines les plus importantes de notre ère. Notre société est devenue de plus en plus interconnectée. Cela a requis des infrastructures, des architectures et des technologies capables de supporter cette interconnection toujours croissante. Il y a quelques années, les solutions Cloud centralisées ont fait leur apparition, ont gagné beaucoup de terrain et ont tenu leur rôle de pionnières dans l'outillage pour une collaboration fluide, ergonomique et sans contrainte de distance.

Cet article a présenté une alternative à ces architectures Cloud centralisées : les architectures Local-First. Ces dernières mettent l'accent sur la souveraineté de l'utilisateur au regard de ses données et de ses usages, tout en respectant les exigences qualitatives de notre époque. Si cette architecture émerge, c'est qu'elle comble certaines lacunes des solutions cloud classiques : privacy, efficience, propriété, extensibilité, interopérabilité, durée de vie, disponibilité et rapports de force.

Le Local-First n'est pas sans challenges techniques, managériaux, stratégiques et économiques. Cependant, les bénéfices qui en découlent méritent l'attention des investisseurs, des éditeurs, des experts techniques mais aussi des utilisateurs. En joignant nos forces, nous pouvons façonner l'informatique de demain, et la rendre plus juste.

tags: