# ? Introduction à secure-scuttlebutt (SSB) (archive) Pour la pérennité des contenus liés. Non-indexé, retrait sur simple email.

### Source originale du contenu

# Introduction à secure-scuttlebutt (SSB)

Vous trouverez mes autres repos git-ssb dans ssb:millette.

Le document actuel se trouve à ssb, une intro.

## Préambule

Sautez à la section C'est quoi SSB? pour passer le préambule.

### Décentralisé

J'ai toujours été attiré par les aspects décentralisés du web et de l'internet en général. J'hébergeais déjà un serveur web chez moi à partir des années 1990, sur ma petite ligne ADSL à 1Mbps et mon Pentium 90MHz et ses 24MiB de RAM. J'ai même été slashdotté comme on le disait à l'époque.

### Silos

Avec le temps, le web s'est refermé sur lui-même, on a vu des silo de plus en plus gros marquer leurs territoires sur le web. On n'a qu'à penser à Google ou Facebook. J'ai toujours un compte Google, mais ça fait des années que j'ai détruit mon compte Facebook.

### Expériences

Il y a quelques mois, j'ai un peu expérimenté avec ZeroNet et plus récemment avec le datproject. Il y a quelques jours, je redécouvrais secure-scuttlebutt suite au tapage entourant la sortie de mastodon.

### Mastodon et fédération

Mastodon et ses cousins GNU Social et StatusNet reposent tous sur le protocole OStatus, qui lui-même est composé de protocoles et standards plus anciens comme PubSubHubbub, Salmon, Webfinger et ActivityStreams. Je suis assez bien placé pour en parlé puisque j'étais un des développeur de StatusNet il y a une dizaine d'années.

OStatus permet la fédération, au même titre que le email qu'on utilise couramment (on peut envoyer un mail du service de Google et il sera reçu par un utilisateur de Yahoo) ou encore les pods de Diaspora ou Jabber/XMPP pour chatter. Dans le cas de fédération, la relation P2P repose entre les serveurs et non les utilisateurs eux-mêmes, bien que ces derniers soient tout à fait libres d'héberger leurs propres serveurs.

### P2P

ZeroNet, datproject et secure-scuttlebutt quand à eux proposent de véritables réseaux P2P, au même titre que BitTorrent et Bitcoin par exemple. Dans les réseaux P2P, il n'y a plus de distinction entre les clients et les serveurs. Les utilisateurs prennent donc part entière aux échanges.

## C'est quoi SSB?

SSB, scuttlebutt, secure-scuttlebutt, scuttlebot... c'est un peu mêlant. Sans trop aller dans les détails, disons pour commencer que les termes SSB, scuttlebutt et secure-scuttlebutt sont à peu près interchangeables.

### Scuttlebutt

En gros, il s'agit d'une base de données append-only qui facilite la réplication et la consistence éventuelle. Append-only signifie que l'information n'est jamais modifiée ou effacée, mais seulement ajoutée.

Cette base de donnée va contenir les données que vous y mettez ainsi que les données que vous allez répliquer à partir d'autres instances scuttlebutt.

Quels genres de données? Des messages, des identifiants, des blobs, bref, un peu de tout.

### Scuttlebot

Pour simplifier la réplication, le service scuttlebot est disponible. C'est le logiciel P2P responsable de partager vos données et de récupérer les données qui vous intéressent.

En suivant des utilisateurs, scuttlebot s'occupera de recevoir les données de ces utilisateurs, et vice-versa.

Le réseau P2P utilise gossip. Concrètement, les ordinateurs doivent être connectés entre-eux à un certain moment (mais pas tout le temps) pour échanger des données. Disons qu'on a les utilisateurs Pierre, Jean et Jacques.

- Pierre suit Jean et Jacques
- Jean suit Jacques
- Jean se connecte à Jacques et obtient ses données
- Pierre se connecte à Jean et obtient les données de Jean et Jacques, transitivement

Dans ce scénario, Pierre ne s'est pas connecté directement à Jacques, mais il a quand même pu obtenir les données de Jacques, via Jean. C'est ce qu'on veut dire par gossip, ou commérages, potins, rumeurs.

Mieux que des rumeurs, SSB est sécure et garanti que les données de Jacques obtenues via Jean seront intègres.

### Patchwork

Si la réplication est basée sur un réseau social (ceux que vous suivez et qui vous suivent), une application évidente de SSB est un réseau social en bonne et due forme. Le logiciel patchwork est la réalisation de cette application.

Jusqu'ici, scuttlebutt et scuttlebot sont des logiciels «système». Ils offrent une interface à la ligne de commande générique de bas niveau.

Patchwork est une application desktop, un GUI qui donne forme au réseau social et permet de suivre et lire les messages, photos, likes des autres utilisateurs qui vous intéressent.

C'est la façon recommandée de faire ses premiers pas dans le scuttleverse, bien qu'il existe d'autres clients plus légers comme on le verra plus loin dans ce document.

Notez cependant qu'il s'agit d'un éxécutable de 50-70 MiB basé sur electron, qui lui-même est basé sur chromium et sur node, ces deux derniers reposant sur V8 pour l'engin JavaScript. Cette application inclut aussi scuttlebutt et scuttlebot. Autrement dit, ça prend pas mal de ressources en RAM et en CPU. Chez moi, ça fait monter la température de façon critique.

## Installation

Nous allons installer quelques logiciels. Vous aurez besoin d'une version récente (6.x) de NodeJS.

Si vous n'avez pas déjà node 6.x ou mieux, installez n pour gérer les versions de node: `curl -L https://git.io/n-install | bash`

Vous devez relancer le terminal pour utiliser n. Voir les détails: https://github.com/mklement0/n-install

### patchwork

Téléchargez patchwork à partir de https://github.com/ssbc/patchwork/releases

Au démarrage, une fenêtre devrait s'ouvrir sur votre desktop offrant le GUI.

S'il y a d'autres utilisateurs de scuttlebot sur votre réseau local (LAN), peut-être en classe, au travail ou dans un café, votre instance commencera automatiquement à recevoir les données du réseau et vous pourrez chercher du contenu et des utilisateurs et les suivre, même s'il ne sont pas sur votre LAN. C'est l'effet gossip.

Autrement, si vous êtes seul sur votre LAN, vous devrez vous connecter à un Pub public.

Vous obtiendrez une invitation sur un des pubs publics sur le wiki.

Dans patchwork, cliquez sur «+ Join Pub» et copiez-y le code d'invitation que vous avez obtenu.

Ainsi, vous suivrez ce Pub et vice-vera. Si vous n'avez pas encore synchronisé avec le réseau social, ça prendra quelques minutes pour vous mettre à jour.

À partir d'ici, vous prenez par au scuttleverse. Vous pouvez me suivre:

- @dcWOOqyFtY1sEXv+rM0MzdINiYyIFFwom1NfmP4aMFo=.ed25519
- http://viewer.scuttlebot.io/%25xLwTdQULCtpiRtRGKH3vETWDtaMPNrAc0ns4QjHrv3o%3D.sha256

Personnellement, je n'utilise pas beaucoup le client Patchwork puisqu'il prend trop de ressources pour mon ordinateur. Les prochaines sections proposeront deux autres clients plus légers. Je mentionne quand même Patchwork puisque c'est une porte d'entrée facile.

Le réseau supporte les messages publics et privés.

#### Messages publics

Tout ce que vous publierez sera disponible pour l'éternité sur le réseau, ainsi que les utilisateurs que vous mentionnerez, alors pensez-y bien avant d'écrire tout ce qui vous passe par la tête :-)

#### Messages privés

Vous pouvez aussi échanger des messages privés. Ces derniers ne pourront être lus que par leurs destinataires et la liste des destinataires demeure aussi privée (encryptée).

Le réseau verra cependant que vous avez envoyé un message privé, sans connaitre son contenu ou destinataires, et pourra faire suivre ce message comme les autres en P2P avec gossip.

### scuttlebot

Les prochains clients proposés reposent sur le logiciel scuttlebot, ou sbot à la ligne de commande. Node est installé? Parfait, on peut procéder à l'installer et démarrer le serveur: `npm install --global scuttlebot sbot server`

Si vous avez installé Patchwork à l'étape précédente, votre nouvelle instance de scuttlebot devrait se connecter et synchroniser en priorisant les utilisateurs suivis.

Un log devrait rapidement remplir le terminal où vous avez lancé sbot server. Mais pas de GUI, c'est normal.

Vous avez tout de même une interface complète pour accéder et participer au scuttleverse, à la ligne de commande. Pour obtenir la liste de toutes les commandes: `sbot --help`

Par exemple, pour confirmer que vous utilisez la bonne identité: `sbot whoami # afficher votre clé publique (identifiant)`

Vous pouvez lire des messages, en envoyer, suivre des utilisateurs et ainsi de suite, mais ça prend des commandes plutôt fastidieuses à taper.

sbot offre aussi une interface RPC sur le port 8008 par défaut, qui sera utilisée par les prochains clients.

#### Plugins scuttlebot

- ssb-notifier
- ssb-links
- ssb-query
- ssb-ws
- ssb-fulltext
- patchfoo
- dnssb

### patchbay

### patchfoo

Client simple qui s'utilise via votre fureteur préféré (incluant dillo).

## Plus qu'un réseau social

Si patchwork, patchbay et patchfoo offrent des représentations du scuttleverse de type réseau social, d'autres types d'applications sont possible, qui reposent sur la même architecture P2P.

### ssb-git

git est un gestionnaire de code, décentralisé par nature. Pour accéder à un dépot, il faut en connaitre l'adresse, souvent par les protocoles http/https ou ssh. On peut cloner ce dépot plus ou moins manuellement à une autre adresse. Ainsi, on peut continuer de coder sur un vol de 5h sans wifi. Avant git, cvs et svn étaient la norme, mais avec ces derniers on ne pouvait faire de commit sans connection. C'était complètement centralisé.

Par leur nature, les dépots ont chacun une forme de centralisation, c'est à dire un auteur, maintainer ou un groupe qui est responsable de ce qui sera commis dans la version dite officielle de dépot.

Si un dépot est sur notre laptop et qu'un autre utilisateur veut en faire un clone, il doit y avoir accès d'une certaine façon. Peut-être par ssh ou un autre protocole. Mais le plus souvent, on fera nous même un clone de notre dépot qu'on tiendra à jour sur un service public (ou non) et accessibles en ligne. GitHub, GitLab et BitBucket sont des options fréquentes.

Avec ssb-git, on fera un clone de notre dépot et on le publiera dans le scuttleverse.

Pour installer ssb-git:

`npm install --global git-ssb`

#### Usage

> Tiré de https://github.com/clehner/git-ssb/blob/master/README.md#usage

Vous pouvez utiliser un remote `ssb://` comme n'importe quel autre remote git. Un dépot sur ssb est identifé par un message ID. Pour créer un nouveau dépot git sur ssb, utilisez la commande `git ssb create`. Vous ne pouvez pusher que sur les dépots ssb git que vous avez créé et non sur les dépots des autres.

#### Exemples

Publier un dépot existant sur ssb: `cd repo git ssb create ssb my-cool-repo git push --tags --set-upstream ssb master`

Pour cloner un dépot à partir de ssb: `git clone ssb://<msgId> repo`

*Fork un dépot ssb git que vous avez cloné: ``` cd repo git ssb fork mine

# edit and commit, then push changes:

git push mine ```

Démarrer un serveur web pour browser (à la github): `git ssb web`

# Alternatives

- Matrix (riot)
- dat project (hypercore/hyperdrive)
- ZeroNet
- CouchDB (mécanisme de réplication éventuellement consistent)
- Et bien plus!

## Todo

- Liens ssb vs liens http