Sommaire

Le contexte: centralisation, décentralisation, et distribution.

Je suis depuis très longtemps sensible aux potentielles aliénations numériques que je perçois. Afin d'y apporter des solutions concrètes, autant que pour apprendre, je m'auto-héberge d'ailleurs depuis plusieurs années (mail, cloud, messagerie instantanée, VPN, etc.).

Jusqu'ici j'ai plutôt fait la promotion de la décentralisation. Je réalise cependant que sa principale limite est de ne pas s'attaquer à la dépendance vis-à-vis d'un "centre". Ce centre, c'est un serveur ou d'un service qu'il s'agit d'héberger et de maintenir, avec toute la charge de travail spécifique que cela entraine. Il est possible d'assumer soi-même cette charge lorsqu'on est curieux, débrouillard et qu'on y consacre le temps nécessaire, mais pour le commun des mortels, il devient nécessaire de déléguer à un tiers, que ce soit par exemple Google pour ses services ou OVH pour son hébergement. Au passage, les uns et les autres méritent évidemment d'être rétribués pour ce travail qu'ils fournissent, qu'ils facturent ou qu'ils profitent de nos données personnelles.

En parallèle de ce constat sur les limites de la décentralisation, j'ai pu comme vous voir l'émergence progressive de solutions distribuées plus ou moins équivalentes en terme de fonctionnalités à celles, décentralisées, que j'ai mises en place dans le cadre de mon auto-hébergement. J'envisage donc d'explorer les possibilités de remplacement de mes services décentralisés par des solutions distribuées là où c'est possible, et de vous faire un compte-rendu ici de temps en temps.

Le premier épisode sera lié au besoin de partage/synchronisation de fichiers. Si ce journal reçoit un accueil favorable, je pourrais reprendre le clavier concernant la messagerie instantanée (remplacement d'un serveur XMPP), l'aide à distance (remplacement d'un VPN).

Le partage / synchronisation de fichiers

Mon premier besoin est simple et je crois que nous sommes beaucoup à le partager ici: il s'agit de pouvoir synchroniser et partager des contenus entre plusieurs machines (y compris un téléphone Android).

Le partage/synchronisation de fichiers peut se faire via un service centralisé comme Google Drive ou Dropbox, un serveur décentralisé et libre comme ownCloud ou Seafile, ou sans serveur du tout par Bittorrent Sync par exmple, ou en l'occurrence plutôt Syncthing qui a l'avantage d'être libre.

Il y a 4 ans, j'avais choisi ownCloud. Je me pose aujourd'hui la question de lui renouveler ma confiance. J'en suis très content, mais l'administration du serveur m'agace un peu. De plus, j'ai été confronté à un problème de mise à jour de la version 8.2.2 vers la version 9.0.0 - sans doute lié à ma configuration atypique, je ne blâme pas ownCloud lui-même, n'empêche que ça coince et que je suis lassé de devoir décoincer.

J'ai donc installé Syncthing en test, et voilà mes impressions après deux semaines.

Installation de Syncthing

Syncthing s'installe très facilement, y compris sur Android. Le binaire peut être lancé à la main ou en tant que service au démarrage de la machine. Par défaut, il ne propose qu'une interface web, rapide et très claire. Il faut donc se tourner vers un programme annexe avoir une icône dans le systray, comme Syncthing-gtk ou QSyncthingTray. À noter que Syncthing vérifie régulièrement si les répertoires partagés ont changé. L'installation de syncthing-inotify permet de déclencher automatiquement les synchronisations. C'est plus efficace et plus propre.

Configuration

Des machines, des répertoires

Pour chaque machine, elle se fait en deux étapes: il faut déclarer auprès d'elle les autres machines avec lesquelles des répertoires vont être partagés, et ces répertoires eux-mêmes. Avec Syncthing: pas de nom d'utilisateur, pas de mot de passe, tout passe par des clés, des hashs, et des QR codes très pratiques. Tout juste marche.

Contrairement à la plupart des outils de synchronisation qui ne permettent de partager qu'un seul répertoire dans lequel il faudra déposer les fichiers à synchroniser/partager, Syncthing peut gérer un nombre arbitraire de répertoires où qu'ils soient. C'est idéal pour partager le répertoire CAMERA d'un smartphone avec un ordinateur, afin de s'éviter l'étape pénible de récupération de photos, tout en synchronisant également un autre répertoire pour envoyer des mp3 sur le téléphone à partir du moment où ils sont déposés au bon endroit sur l'ordinateur.

Attention à la toile d'araignée !

Cette flexibilité de Syncthing le rend aussi potentiellement plus complexe. La configuration d'un partage entre deux machines est simple et intuitive et, emporté par l'élan, on peut rapidement se retrouver à chercher à synchroniser une foultitude de répertoires entre 4, 5, voire encore davantage de machines. Au final Syncthing s'en sortira sans doute très bien, mais vous nettement moins.

Pseudo synchronisation asynchrone

Comme la synchronisation se fait directement en pair-à-pair, seuls les pairs connectés à un instant donné se synchronisent entre eux. Autrement dit, une modification faite sur une machine A qui est ensuite éteinte ne sera pas propagée à une machine B qui viendrait de s'allumer. Une solution simple consiste à partager le répertoire également avec une machine C qui reste allumée entre temps, pour recevoir ce qui doit être synchronisé avant l'extinction de A, puis pour le propager jusqu'à B. Si vous avez des Pi qui traînent…

Utilisation

À l'utilisation, Syncthing juste marche, même s'il y a parfois une latence dans l'établissement de la connexion avec les autres machines. Une fois établie, la synchronisation est bien plus efficace que celle de ownCloud car contrairement à ce dernier qui transfert en intégralité tout fichier modifié, Syncthing ne transfert (presque) que les changements, (presque) comme rsync. C'est particulièrement efficace pour le partage d'images-disques de machines virtuelles par exemple. Il est également possible de conserver des copies des fichiers modifiés ou supprimés (de moult façons), ou de s'assurer qu'un répertoire ne sera partagé qu'en lecture seule par exemple.

Note: sans "serveur", sans "service", Syncthing n'a pas de centre. Son utilisateur confie donc des données à "quelque chose" qui n'a pas de centre. C'est à la fois magique et déstabilisant: sans "centre", aucune autorité à laquelle réclamer ses données en cas de problème. Je ne peux qu'imaginer ce que pourraient donner les évolutions de la famille de la blockchain, par exemple.

Comparaison avec ownCloud

Depuis le début du journal, j'oscille entre synchronisation et partage, entre fichiers/répertoires et contenus. En réalité, Syncthing et ownCloud ne sont pas des équivalents. D'ailleurs, certains d'entre vous ont peut-être tiqué lorsque j'ai parlé de remplacer l'un par l'autre.

Syncthing fait de la synchronisation de répertoires entre des machines. OwnCloud fait la même chose, quoiqu'à mon sens moins bien, mais y ajoute également le partage de contenus au sens large (y compris contacts et agendas par exemple) entre utilisateurs, créant ainsi un contexte collaboratif extensible par fédération.

En effet, contrairement à Syncthing, ownCloud permet de gérer finement des permissions contenu par contenu, et met à disposition une interface web pour accéder aux contenus partagés, que le destinataire ait ou pas un compte sur une instance d'ownCloud. Pour partager un répertoire via Syncthing, il faut que le destinataire l'ait également installé. Compliqué.

OwnCloud dispose d'une foultitude d'extensions de plus ou moins bonne qualité, par exemple pour s'intégrer à un LDAP existant. À travers ces dernières, il propose beaucoup de fonctionnalités qui sont essentielles dans un environnement collaboratif, c'est à dire orientées "usage", alors que Syncthing est orienté fichiers et répertoires. Ces fonctionnalités supplémentaires de ownCloud impliquent une complexité (voire une complication) qui ne fait pas nécessairement de sens pour un utilisateur individuel. Ce dernier pourrait se retrouver bien davantage dans un projet comme Syncthing.

Avec Syncthing, il n'y a aucune instance centrale à administrer et à sauvegarder. La sécurité - en tout cas en terme de confidentialité - inspire nettement plus confiance que celle de ownCloud, qui hérite de fondamentaux compliqués (PHP, toussa). Syncthing me semble plus sûr, plus résilient. Il ne fait qu'une seule chose et pour autant que je puisse en juger, il la fait bien.

Au final

Au final, les cas d'utilisation de Syncthing et d'ownCloud sont donc bien différents. Pour mon usage, les avantages de Syncthing dépassent ses limitations. Pour partager des fichiers, je passerai sans doute par Framadrop par exemple, à moins que je mette en place un serveur web statique pour servir un répertoire synchronisé par Syncthing.

Les possibilités sont multiples.

La seule chose qui me chagrine, c'est de devoir encore me reposer sur ownCloud pour gérer contacts et calendriers. Pour l'instant j'hésite entre Baïkal, Radicale, Davical et SabreDav. Peut-être avez-vous des conseils à donner ?

Et vous ?

Et vous alors ?

Plutôt ownCloud ou Syncthing ou équivalent ?

Plutôt centralisé, décentralisé, ou distribué ?

Pour quelles raisons ?

La suite ? Oui ? Non ?

Aurel.