L’univers dat (et Beaker)

dat actuel:

Pour un monde pair-à-pair.

Texte ayant servi à l’enregistrement de l’épisode #144 de Blogue-Linux en janvier 2018.

Vous trouverez aussi dans ce dat un extrait de 25 minutes de l’épisode portant sur dat:

Comparaison avec BitTorrent

Je présume que vous connaissez BitTorrent et son fonctionnement en Pair-à-pair. Vous savez qu’il s’agit à la base d’un protocol et que des logiciels libres en plusieurs langages l’implémentent, depuis l’original en Python.

On peut télécharger un torrent si on a l’une de 2 choses:

  1. un petit fichier .torrent contenant du métadata (trackers, etc.)
  2. un lien magnet, c’est à dire le hash du torrent

Immuable

Une fois qu’on a accès au torrent (par l’une des 2 méthodes précédentes), on a la garanti que son contenu ne changera pas. Si on doit faire une mise à jour à un torrent, on doit créér un nouveau .torrent et obtenir son nouveau lien magnet.

Différences avec dat

Dat aussi c’est un protocol pair-à-pair et son logiciel libre canonique du même nom. Trois différences notoires sont:

  1. aucun équivalent du fichier .torrent, on utilise que le hash (public key)
  2. un dat peut être mis à jour et supporte les versions (1, 2, 3…)
  3. on peut utiliser dat pour partager un répertoire de fichiers, un peu comme rsync ou scp mais sans adressage dns ou IP

Je crois aussi que la création (et mises à jour) d’un dat est plus simple que la création d’un torrent mais je n’ai franchement pas beaucoup d’expérience dans la création de torrents.

Pas de soucis de ports ouverts, de noms de domaines, etc. Le hash suffit.

L’univers dat

Si on parle d’un protocol dat, c’est qu’on envisage une panoplie de logiciels qui peuvent se parler et travailler ensemble. On peut énumérer quelques exemples:

Beaker Browser

Commençons notre exploration par le mont Éverest, c’est à dire un fureteur complet avec html, css, JavaScript et tous les API modernes, puisque c’est basé sur Electron qui est lui-même basé sur la juxtaposition de Chromium et NodeJS.

Pourquoi un autre fureteur? Parce qu’aucun ne supportait encore le protocol dat:// sachant que c’est http et https qui sont en général supportés. Autrement dit, Beaker ne va pas seulement se connecter à des serveurs http auxquels nous sommes habitués, mais aussi aux ressources disponibles par le protocol dat, c’est à dire de manière décentralisée.

Au lieu d’un serveur http, on a besoin d’un logiciel dat pour héberger du contenu et même des applications JavaScript client. On peut héberger un site à partir de la maison, de son laptop, quand on est au café du coin, et ainsi de suite. Pour accéder à ce site, on doit en connaitre la clé publique (le hash).

Bien sûr, on risque de saturer notre connection si notre contenu devient très populaire. Mais voilà, puisque nous reposons sur dat, les visiteurs du sites ont l’option d’en partager le contenu à leur tour, comme avec BitTorrent.

On peut soit même créer des copies de notre dat sur des serveurs dans des centres d’hébergement, et la charge sera répartie automatiquement.

Mais ce n’est pas tout! Beaker permet aussi la création d’un site dat. On peut d’ailleurs visiter un site dat et en faire un fork qu’on pourra éditer à sa guise. De plus, une fois que nous sommes le créateur d’un site, on en possède la clé privée et le fureteur offre un API JavaScript pour modifier le contenu d’un dat dont on a la clé privée. Ainsi, un site web qui permet à son auteur de prendre des notes et de les éditer est très facile à réaliser avec Beaker, tant que l’on veuille découvrir son API JavaScript.

Beaker est donc une plateforme intéressante pour expérimenter avec les usages du pair-à-pair. On compte déjà plusieurs web apps qui reposent sur dat et dépendent de Beaker pour fonctionner pleinement. Notons aussi que le fureteur Brave (du créateur de JavaScript) va aussi supporter dat au cours des prochains mois et qui sait si un jour les extensions des fureteurs Firefox, Chromium ou Edge le supporteront.

dat, le logiciel

Devrais-je dire, les logiciels. Il existe dat-cli (ou dat tout-court) et dat-desktop, le premier pour la ligne de commande et le second pour un GUI sur Windows, MacOS et X window.

Personnellement, je n’utilise même pas de file manager GUI, alors je n’ai pas trop testé non plus dat-desktop - mais je présume que les deux vont supporter à peu près les même fonctionnalités. Je m’attarderai plus à dat-cli pour cette raison.

Dans le cas le plus simple, deux personnes vont utiliser dat-cli, mais l’un ou l’autre pourrait utiliser dat-desktop et obtenir les même résultats. Dat permet de partager un répertoire avec une simple commande, sans autre préparation (une fois qu’on aura bien sûr installer dat et ses dépendances). Quand on lance la commande, le contenu du répertoire donné et ses sous-répertoires sont scannés et tous les fichiers sont ajoutés à un nouveau dat créé automatiquement. Une clé privée est conservée dans le répertoire donné et la clé publique (32 caractères hexadécimaux) est affichée. Quiconque connait la clé publique pourra consulter le contenu du dat, le copier et le partager à son tour. Comme la clé fait 128 bits, personne ne peut la découvrir par hasard non plus.

Si on veut répliquer le contenu d’un dat sur plusieurs machines qui nous appartiennent, on partage la clé publique entre ces machines sans jamais publier cette clé autrement ou ailleurs. Ainsi, le contenu demeure privé… à ceux qui en connaisse la clé.

Pour résumer

Poste #1

Là où le dat est créé, unique détenteur de la clé privé.

cd LE-REPERTOIRE
dat . # notez le . à la fin
# les fichiers de LE-REPERTOIRE et sous-répertoires sont ajoutés au dat
# à la clé publique:
# dat://2a861455f23646280552d1142c9f85bc4cf4bb8dcd3d5caa98c6e3b9a4f4a3c5
# dat roule jusqu'à CTRL-C
# Alors, dans un autre terminal:
cd LE-REPERTOIRE
edit UN-FICHIER # mettre à jour un fichier ou en créer un et
# il sera mis à jour automatiquement dans le dat
Poste #2

Là où le dat est reçu, connait la clé publique.

dat dat://2a861455f23646280552d1142c9f85bc4cf4bb8dcd3d5caa98c6e3b9a4f4a3c5
# le dat:// est optionnel
# CTRL-C une fois qu'on a tout le contenu
cd 2a861455f23646280552d1142c9f85bc4cf4bb8dcd3d5caa98c6e3b9a4f4a3c5/
ls # consulter le contenu
dat . # reconnecter au dat pour obtenir les mises à jour
# On obtientra la mise à jour de UN-FICHIER
Poste #3

Là où le dat est reçu, connait la clé publique. Identique au poste #2. On peut faire autant de copies que nécessaires.

Tous les postes participent à l’échange des fichiers, un peu comme un torrent.

Le poste #1 pourrait disparaitre (temporairement ou pour de bon) mais son contenu serait toujours accessible si les poste #2 ou #3 sont toujours là. Cependant, seul le poste #1 pourrait mettre le contenu à jour. Une prochaine version permettra le partage des mises à jour d’un dat, qui est pour le moment limité à un seul poste.

dat-shell

Par défaut, dat va copier le contenu d’un dat intégralement. dat-shell prend une toute autre approche et permettant de consulter le contenu d’un dat et de ses sous-répertoires sans devoir télécharger le contenu lui-même.

dat-shell, c’est un peu comme Bash mais remplacer le filesystem par un dat et ça donne une idée de ce que c’est. On lance dat-shell avec la clé publique d’un dat et ça ouvre un prompt où l’on peut taper:

Ces commandes ne vont pas créer de fichiers ni de répertoires sur notre disque mais permette de navigue comme on le faisait sur un server ftp par exemple.

On peut aussi faire des copies sur notre disque:

Notez qu’il ne s’agit pas de bash ni de sh, mais ça ressemble.

Le ln ne fait pas un lien symbolic comme tel, mais crée plutôt un FIFO (named pipe) qui va s’auto-détruire dès qu’il sera lu.

Pour un petit fichier .txt ça ne sert pas tellement, mais si vous avez un fichier vidéo de 500 MiB dans un dat, vous pouvez le streamer directement dans vlc ou mplayer à partir du dat distant sans en faire une copie sur votre disque.

Liens