Qu'est ce qu'une identité nomade ?

From Join the Fediverse
This page is a translated version of the page What is nomadic identity? and the translation is 53% complete.
Other languages:

L'identité nomade est une fonctionalité pour le moment uniquement présente sur Hubzilla et son dernier successeur connu sous le nom de (streams). Il offre un moyen unique de migrer dans d'autres instances facilement et de dupliquer votre identité du Fediverse. Cependant, ce n'est pas disponible, ni compatible avec ActivityPub

Histoire

L'identité nomade fut créée en 2011 par Mike Macgirvin. L'année d'avant, il a lancé un concurrent à Facebook : Mistpark, depuis renommée Friendika. Mais la décentralisation et les instances de Friendica, appelées noeuds public, qui étaient gérés par la communauté, ont eu des déffaillances. Les utilisatrices et utilisateurs ont perdu leur compte et tout leur données à chaque fois qu'un noeud s'éteignait. Cela arrivait parfois sans aucune annonces.

La migration d'instances a été mis en oeuvre aussi poussé que possible pour que tout le monde puisse se relocaliser ailleur lorsque la fermeture de leur noeud-mère a été annoncé, mais cela ne fut d'aucune aide dans le cas d'une fermeture soudaine. Même les sauvegardes complètes de leur compte n'étaient d'aucune aide si elles n'étaient pas réalisées.

Macgirvin a décidé que le seul moyen de protéger les identités en ligne des personnes était qu'elles puissent exister sur plusieurs serveurs indépendants. Ainsi, l'idée d'une identité nomade émergeat. Cependant, ce fut impossible de la mettre en oeuvre sur Friendica avec son protocole DFRN. Donc Macgirvin a conçut un nouveau protocole appelé Zot. En 2012, il laisse le développement de ce qui était connu sous Friendica à la communauté et crée une nouvelle branche de ce qui deviendra the Red Matrix et en 2015, évoluera en Hubzilla.

Que fait-il ?

L'identité nomade, telle que mise en oeuvre par Hubzilla et (streams), s'appuie sur la disponibilité des chaînes qui servent de conteneur pour l'identité et le contenu des utilisatrices et utilisateurs. Il gère la gestion de ces chaînes entre les serveurs.

La migration

Un des avantages de l'identité nomade, est que c'est probablement la meilleure méthode existante pour migrer votre identité d'un serveur à un autre.. Contrairement aux projets reposant sur ActivityPub, il ne crée pas de copie, ni de copie partielle de votre compte sur un autre serveur et laisse le compte originel derrière comme un compte mort. En fait, il déplace le contenu sans rien laisser derrière, puis il déplace tout le contenu.

Supposons qu'alice@foo.social veut migrer sur bar.social. Le processus se déroule ainsi :

  • Créer un nouveau compte sur bar.social (Sauf si Alice en possède un ici).
  • Téléverser complètement la chaîne d'alice@foo.social sur le nouveau compte bar.social. Ceci peut être réalisé soit en demandant à bar.social de le télécharger depuis foo.social. Ou en téléchargeant manuellement la chaîne foo.social vers un fichier. Puis de le téléverser manuellement ce fichier vers bar.social; cette dernière méthode est considérée comme plus sur et reliable.
  • Changer l'identité de la chaîne qui est encore restée sous alice@foo.social at vers alice@bar.social.
  • Tous les contacts les servers qui comprennent l'identité nomade change leur connection avec alice@foo.social vers alice@bar.social. les utilisatrices et les utilisateurs remarqueront seulement la migration car l'ID a changé, mais tout marchera de la même manière après la migration.
  • Supprimer la vieille instance de la chaîne sur foo.social.
  • Si le compte sur foo.social n'a plus de chaînes, supprimer le compte sur foo.social.

Peu après, du moins sur Hubzilla, tous les contacts non-nomades, par exemple ceux sur Mastodon, doivent être notifié manuellement de la migration. À partir de là, cela ne fonctionnera que dans un sens, c'est à dire qu'ils seront suivis mais pas abonnés. Donc tous vos abonnés devront manuellement s'abonner à alice@bar.social après la migration.

Clone

Comment le clonage fonctionne ?

La pièce maitresse des comptes nomades sont les clones. L'identité nomade permet à une et même chaîne de résider sur plusieurs serveurs en parrallèle. C'est en fait moins compliqué qu'il n'y paraît.

Le processus pour en arriver là commence comme celle de la migration, mais avec deux différences : la chaîne d'origine n'est pas supprimée. Par conséquent, l'ID d'origine est gardée par défaut. Elle peut être optionellement modifié pour faire référence au nouveau serveur, transformant ainsi l'original en clone, mais ce n'est pas obligé.

Donc quand la chaîne d'Alice, alice@foo.social est téléversée sur bar.social, la chaîne téléversé sur cette instance n'est pas une simple copie. Elle est automatiquement reliée sa source sur foo.social. Non seulement cela crée un clone identique parfait, ça reste un clone identique.

Les deux instances de la chaine sont syncronisées avec l'une et l'autre. Et en fait, il en va de même pour tous les autres clones créés ultérieurement, car vous pouvez avoir plusieurs clones. Vous avez toujours une "instance principale" qui est normalement celle à partir de laquelle vous copiez tout, mais vous pouvez avoir autant de clones que vous pouvez trouver de serveurs.

Tout ce qui se passe sur l'instance principale est automatiquement et presque immédiatement répliqué sur tous les clones. Si vous publiez quelque chose depuis votre instance principale, la publication est uniquement envoyée depuis l'instance principale, mais mise en miroir sur les clones et stockée sur ceux-ci. Si vous téléchargez une image, elle est répliquée vers les clones. Si vous vous connectez à quelqu'un, cela se répliqué dans les clones.

Tout ce qui se passe sur l'instance principale est automatiquement et presque immédiatement répliqué sur tous les clones. Si vous publiez quelque chose depuis votre instance principale, la publication est uniquement envoyée depuis l'instance principale, mais mise en miroir sur les clones et stockée sur ceux-ci. Si vous téléchargez une image, elle est répliquée sur les clones. Si vous vous connectez à quelqu'un, cela se réplique dans les clones.

Les connexions aux chaînes sur Hubzilla et (streams) qui connaissent l'identité nomade connaissent également tous les clones. Les messages envoyés depuis l'une de ces chaînes vers une chaîne clonée sont toujours envoyés à la fois à l'instance principale et aux clones, à condition qu'elles soient en ligne. Cela garantit qu'il existe toujours au moins une instance du canal qui reçoit le message. Au moins sur Hubzilla, un effet secondaire est que les nouveaux messages doivent être marqués comme lus séparément sur toutes les instances. Si une instance n'a pas pu recevoir un message à temps, par ex. comme elle était hors ligne, le message est cloné ultérieurement à partir de l'une des autres instances.

L'avantage d'avoir de tel clones est d'avoir la plus grande résilience possible dans le Fédiverse. Même si le serveur de l'instance principale de votre chaîne tombe, vous ne perderez rien. Tout sera conservé sur vos clones qui continueront de syncroniser les changements entre-eux.

Choisir une nouvelle instance principale

Comme déjà précisé, cloner permet de changer d'instance principale, c'est à dire faire d'un des clones l'instance principale. En fait, la migration ne fait rien d'autre : elle crée un clone nomade, fait automatiquement du clone la nouvelle instance principale et de l'ancien original le clone, puis supprime le clone.

Du coup, si le serveur avec l'instance principale dessus disparait, vous pouvez faire d'un des clones la nouvelle instance principale. Si jamais le serveur avec l'instance principale est remis sur pied, il syncronisera immédiatement avec les autres instances, et ce qui était autrefois l'instance principale sera rétrogradé au rang de clone.

The ID of a cloned channel always depends on where the main instance is. If the main instance resides on foo.social, then the ID is always e.g. alice@foo.social. Even the ID of the clones on bar.social and bax.social is alice@foo.social. If the clone on bar.social is chosen as the new main instance, then the ID changes to alice@bar.social on all instances, including the one on foo.social which becomes a clone.

That being said, switching main instances should be done with care. It takes several minutes to change the ID of a channel after switching its main instance. The ID has to be changed all across the channel itself, and all nomadic connections, i.e. currently those on Hubzilla and (streams), have to be changed. This process should not be disturbed until it's done.

How connections perceive clones and switched main instances

Nomadic identity, especially cloning, works best with connections which support nomadic identity themselves.

Channels on servers of projects that support nomadic identity are always fully aware of other channels on such servers being nomadic. If the Hubzilla channel alice@foo.social has clones on bar.social and baz.social, the Hubzilla channel bob@quux.social will be aware of that.

No matter which instance Alice sends something from, bob@quux.social will perceive it as coming from alice@foo.social because that's the identity of Alice's channel. Even if foo.social should be offline, the channel will still be identified as alice@foo.social.

Vice versa, everything bob@quux.social sends to alice@foo.social is always sent to foo.social, bar.social and baz.social. It'll only completely fail if all three are offline at the same time. If one of them is temporarily offline, what it has missed during its downtime will be mirrored to it afterwards.

If Alice switches the main instance to bar.social, all that changes for bob@quux.social is that the channel is named alice@bar.social now.

Connections on servers of projects that don't know nomadic identity behave differently. They don't know clones either and can't identify them as such. So to them, the clones of alice@foo.social appear as the separate "accounts" alice@bar.social and alice@baz.social, identities which they themselves patch together from the short name and the domain name.

This means that only messages sent from foo.social itself will appear as sent by alice@foo.social. Messages sent from bar.social will appear as sent by alice@bar.social even though there isn't even any account or channel with that ID, technically speaking. Users of Mastodon & Co. may be tempted to follow alice@bar.social even though they already follow alice@foo.social because they may think Alice has moved. Since only one instance of a clone ever sends any given message, they still only receive each message only once.

Messages sent from Mastodon & Co. are only sent to one instance of a cloned channel and then mirrored to the other instances. So if carol@mastodon.wherever has a mutual connection with alice@foo.social, but none with the clones, and posts something, that post only goes to the main instance on foo.social, and then it's mirrored from there to the clones on bar.social and baz.social. That way, all instances of the channel eventually receive the post.

However, this only works as long as the instance the post is sent to is actually online. If foo.social is down, Mastodon & Co. don't divert a post for alice@foo.social to alice@bar.social or alice@baz.social. They don't have a concept of clones, and they don't know that what they perceive as alice@bar.social and alice@baz.social are clones of alice@foo.social. So the transmission of the post is eventually dropped altogether due to a timeout.

This is a major reason why switching the main instance should be communicated to users of non-nomadic projects as having moved. They can stay connected to the former main instance, even though it's a clone now.

That is, in theory, such trouble could be avoided by cloned channels having all their followers on non-nomadic projects follow both the main instance and all clones. The followers will only suffer from a somewhat more cluttered list of followed "accounts" and maybe having to send the same direct message to multiple "accounts". But they will still only receive messages from these followed "accounts" only once.

On the other end, Hubzilla and (streams) will list connections from e.g. Mastodon to multiple instances of the same channel as only one connection. If the same Mastodon account connects to yet another instance of the channel, they won't notice and grant that Mastodon account the same rights it already had previously.

Implementations

The only Fediverse protocols which support nomadic identity are Zot and Nomad. Thus, nomadic identity is only implemented on Hubzilla and (streams).

It also used to be implemented on Hubzilla's direct predecessor, Red a.k.a. the Red Matrix, which had it first. Of the projects between Hubzilla and (streams), only the first Osada didn't have it. The other two Osada incarnations, Zap, Redmatrix 2020, Mistpark 2020 and Roadhouse, all had it implemented.

Bluesky, the commercial microblogging platform by Twitter founder Jack Dorsey, is working on a similar feature. However, Bluesky has only just started decentralising itself, and it is not connected to the Fediverse, save for through bridges and on a very few projects, including Friendica.

Compatibility between Hubzilla and (streams)

Compatibility between the currently two implementations of nomadic identity is highly limited even though (streams) is a descendant of Hubzilla, and its Nomad protocol is a descendant of Hubzilla's Zot protocol.

Synchronised clones are only possible within the same server software. It is not possible to create a synchronised clone of a Hubzilla channel on (streams) or vice versa.

Using nomadic identity tools to move a channel from Hubzilla to (streams) is possible: The channel has to be manually exported from Hubzilla and then manually imported into a (streams) account. But since Nomad is so much more advanced than Zot, moving a channel from (streams) to Hubzilla is impossible without manipulating the exported channel, and manipulated exported (streams) channels can damage entire Hubzilla hubs upon import, so it is officially declared impossible.

Navigation bar
About the Fediverse
🏠 🐎 🔠 💬 👤 ✏️ 🚚 📱 😇 📍 🔗
Fediverse projects
Wiki More Editing
ℹ️ 🗺 ⌛️ 🏅 🌍 📰 🛠 🔄 💢 🚧 ☑️ 🎮