Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Twister, un concurrent libre et pair-à-pair pour Twitter

Première rédaction de cet article le 16 janvier 2014
Dernière mise à jour le 19 janvier 2014


Les « réseaux sociaux » d'aujourd'hui sont dans leur écrasante majorité des gros monstres centralisés, contrôlés chacun par une seule grosse entreprise capitaliste, états-unienne et envoyant ses données à la NSA via PRISM. Il est donc logique que l'Internet, fondé sur des idées de pair-à-pair dès le début, cherche à secouer cette domination des GAFA (les énormes silos centralisés). Par exemple, peut-on remplacer Twitter par un système libre ? C'est ce que tente le projet Twister.

Le problème n'est pas trivial. Il y a des tas de raisons qui font que la plupart des projets « rézosocio libre, acentré, pair-à-pair, de gauche, etc » ont capoté (cf. mon exposé à Pas Sage En Seine). Une des difficultés est le refus, par pas mal de développeurs, d'admettre que le problème est techniquement difficile. Il s'agit entre autres de vaincre le triangle de Zooko. Pour prendre l'exemple de Twitter, si on en fait un service réparti et décentralisé, il y a deux gros problèmes techniques à gérer, la création des comptes (qui va avoir le compte « françoishollande » ?) et la découverte des autres utilisateurs. Beaucoup de « rézosocios alternatifs » avaient choisi d'aborder le problème en le niant. Pas Twister, dont les auteurs ont fait l'effort de documenter le fonctionnement dans un excellent article.

Je ne vais pas reprendre cet article ici, juste résumer en quelques points comment fonctionne Twister :

  • La création des comptes, assurant l'unicité des noms (sans dépendre d'un système arborescent comme les noms de domaines) est faite par un système à chaîne de blocs publique, comme Bitcoin (c'est d'ailleurs le même code qui est utilisé). Cela résoud largement le triangle de Zooko. Ce n'est pas une idée nouvelle que d'utiliser une telle « blockchain » pour enregistrer des noms uniques, Namecoin le faisait aussi. Mais, contrairement à Namecoin, l'enregistrement dans la chaîne Twister est pour l'instant gratuit.
  • Les messages eux-mêmes sont stockés dans une DHT, fondée sur Kademlia.
  • Mais les DHT ne sont pas forcément fiables sur le long terme donc un second système permet de stocker les messages (les « twists » ?), système fondé sur BitTorrent. Chaque utilisateur va avoir un essaim de pairs BitTorrent, qui stockeront ses messages. Les gens qui suivent un utilisateur donné rejoignent l'essaim, pour avoir un accès facile aux messages.

OK, ça, c'était la théorie (mais lisez le papier, il est vraiment très bien fait). Et la pratique ? Le logiciel est libre et on peut le faire fonctionner sur sa machine. Un avertissement : pour l'instant, c'est plutôt du brut de fonderie, pas forcément très accessible à tous. On doit d'abord récupérer le logiciel. Je recommande ensuite de bien lire le fichier INSTALL qui décrit les instructions (et, pour Unix, le fichier doc/build-unix.md). Je suis arrivé à compiler Twister sur une Debian version stable, en installant les paquetages autoconf, automake, libtool, libminiupnpc-dev, libboost-all-dev, libssl-dev et libdb5.1-dev et la méthode de compilation « 2b) Using standard makefile ». Attention, j'ai aussi supprimé l'option HARDENING+=-fstack-protector-all -Wstack-protector du Makefile. Avec cette option, ça compile mais ça plante au premier usage. (Un autre témoignage sur la compilation de Twister sur Debian est en ligne.)

Ah, et n'oubliez pas non plus les pages HTML (module twister-html), à installer séparément (voir le fichier README.md), sinon l'interface Web ne va guère marcher.

Une fois que c'est fait, on place dans ~/.twister un fichier twister.conf avec :

rpcuser=user
rpcpassword=pwd

(Attention, il ne faut pas changer ces valeurs.) Et on démarre le démon :

% ./src/twisterd

On peut vérifier son bon fonctionnement en style Bitcoin classique. Si vous êtes habitué à gérer un nœud Bitcoin, vous ne serez pas dépaysé :

% src/twisterd getinfo  
{
    "version" : 90000,
    "protocolversion" : 70001,
    "walletversion" : 60000,
    "blocks" : 20217,
    "timeoffset" : -3,
    "connections" : 10,
    "addrman_total" : 1352,
    "addrman_get" : 1352,
    "dht_nodes" : 84,
    "dht_global_nodes" : 336,
    "proxy" : "",
    "difficulty" : 0.01538494,
    "testnet" : false,
    "errors" : "This is a pre-release test build - use at your own risk"
}

Ou avec des commandes spécifiques à Twister (voir des exemples dans le README.md, ou bien avec twisterd help), par exemple pour récupérer un profil d'un utilisateur :

% ./src/twisterd dhtget fredix profile s 
[
    {
        "p" : {
            "height" : 16835,
            "seq" : 6,
            "target" : {
                "n" : "fredix",
                "r" : "profile",
                "t" : "s"
            },
            "time" : 1389010692,
            "v" : {
                "bio" : "hello",
                "fullname" : "Frédéric Logier",
                "location" : "France",
                "url" : "http://frederic.logier.org"
            }
        },
        "sig_p" : "20ae4859b3dc17c6a03e241c93174fa42903db4b77d822c83ab6b2cf89cb5b5b287f1ba4125844519cf1b2ca214c74382ca211d20434b1c0260478c5b618111f76",
        "sig_user" : "fredix"
    }
]

Mais, bon, la plupart des interactions se feront sans doute au début via l'interface Web, qui copie largement celle de Twitter. On se connecte à http://localhost:28332/network.html et on vérifie que la connectivité marche (ici, 9 connexions et 84 machines dans la DHT) : On en était au bloc 20 213 dans la chaîne publique (twisterd getblockcount vous aurait donné la même information) mais je ne crois pas qu'il existe un explorateur de la chaîne publique, analogue à Blockchain.info pour Bitcoin.

L'interface Web permet de créer un compte mais, dans mon expérience, c'est parfois frustrant. Au minimum, il faut attendre quelques minutes (rappelez-vous que c'est comme Bitcoin : les pairs doivent valider la transaction), et cela plante parfois, il faut essayer des commandes magiques (twisterd sendnewusertransaction) ou re-tenter sa chance. Mais, bon au bout du compte, j'y suis arrivé, j'ai un compte, bortzmeyer (attention, Twister est à la mode, tout le monde se précipite pour enregistrer « son » nom en ce moment et c'est d'ailleurs présenté dans l'article comme un moyen d'inciter les utilisateurs à l'adopter, en fournissant une prime au premier arrivé). Ensuite, le fonctionnement est le même qu'avec l'interface Web de Twitter. Je ne fournis pas de lien ici, Twister n'a pas encore de passerelle depuis le Web public, il faut faire tourner un noeud Twister pour voir.

Twister est très récent et, comme on l'a vu, pas évident à utiliser. Sa sécurité est loin d'être parfaite. Par exemple, le relativement faible nombre des noeuds fait qu'un connard disposant d'une grande puissance de calcul peut, sans compétences particulières, faire une « vraie-fausse chaîne » de blocs plus longue que la chaîne légitime, ce qui lui donne la possibilité d'annuler ou de piquer une partie des enregistrements, comme cela s'est produit le 18 janvier.

En conclusion ? Si le logiciel est encore franchement alpha, le concept est brillant : les auteurs de Twister, contrairement à tant d'autres, ont abordé de front les problèmes des réseaux sociaux décentralisés et ont des bonnes solutions. Bien sûr, il n'y a pas de miracle : notamment, il faut accepter les inconvénients de Bitcoin (le CPU qui tourne au maximum en permanence...).

Merci à Hoʍlett pour avoir attiré mon attention sur Twister et pour deux discussions sur SeenThis : http://seenthis.net/messages/212810 et http://seenthis.net/messages/216913. En français, il y a aussi deux discussions sur LinuxFr : http://linuxfr.org/users/fredix/journaux/twister-un-microblog-opensource-p2p puis http://linuxfr.org/news/twister-un-microblog-opensource-p2p. En anglais, on peut lire une bonne documentation pratique sur l'installation de Twister sur un Raspberry Pi dédié.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)