Qu'est ce qu'une identité nomade ?

Revision as of 07:00, 12 February 2024 by Snoopy (talk | contribs)
Other languages:

L'identité nomade est une fonctionalité pour le moment uniquement présente sur Template:Internal Link et son dernier successeur connu sous le nom de Template:Internal Link. Il offre un moyen unique de se déplacer dans d'autres instances facilement et de dupliquer votre identité du Template:Internal Link. Cependant, ce n'est pas disponible, ni compatible avec Template:Internal Link

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 Template:Internal Link. 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.

Template:Internal Link a été mis en oeuvre aussi poussé qae possible pour que tout le monde puisse se relocaliser ailleur quand la fin 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 Template:Internal Link. Donc Macgirvin a conçut un nouveau protocole appelé Template:Internal Link. 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 Template:Internal Link et en 2015, évoluera en Hubzilla.

Comment ça fonctionne ?

L'identité nomade, telle que mise en oeuvre par Hubzilla et (streams), s'appuie sur la disponibilité des Template:Internal Link 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 Template:Internal Link 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.

Afterwards, at least on Hubzilla, all non-nomadic contacts, for example on Template:Internal Link, have to be manually notified of the move. They are one-sided at this point, i.e. they are followed, but not followers. So all followers have to manually follow alice@bar.social after the move.

Clone

How cloning works

The big killer feature of nomadic identity are clones. Nomadic identity makes it possible for one and the same channel to reside on multiple servers simultaneously. This is actually less complicated than it sounds.

The process of getting there starts much like a move, but with two differences: The original channel is not deleted. And thus, the original ID is kept by default. It can optionally be changed to refer to the new server, thus turning the original into a clone, but it doesn't have to.

So when Alice's alice@foo.social channel is uploaded to bar.social, this uploaded instance of the channel is not a dumb separate copy. It is automatically linked to its source on foo.social. Not only does it become a full identical clone of it, it remains an identical clone.

Both instances of the channel are fully kept in-sync with each other. And in fact, so do all other clones created later because you can have more than just one clone. You always have one "main instance" which normally is the one you copy everything from, but you can have as many clones as you can find servers for.

Whatever happens on the main instance is automatically and almost immediately mirrored to all clones. If you post something from your main instance, the post is only sent from the main instance, but mirrored to the clones and stored on them. If you upload an image, it's mirrored to the clones. If you connect to someone, that's mirrored to the clones.

Whatever happens on one of the clones is mirrored to the main instance and all other clones. For example, you can log onto one of your clones and post from it if the server with your main instance on it is down. In this case, it's only that clone that sends the post to the contacts, but the post is still mirrored.

Connections to channels on Hubzilla and (streams) which know nomadic identity also know about all clones. Messages sent from one of these channels to a cloned channel always go out to both the main instance and the clones, provided they're online. This ensures that there's always at least one instance of the channel that receives the message. At least on Hubzilla, a side-effect is that new messages have to be marked as read on all instances separately. If an instance couldn't receive a message in time, e.g. because it was offline, the message is cloned from one of the other instances later on.

The advantage of having such clones is having the greatest resilience possible in the Fediverse. Even if the server with the main instance of your channel on it spontaneously disappears, you lose nothing. You've got everything on your clones which will continue syncing changes between each other.

Selecting a new main instance

As already mentioned, cloning makes it possible to change the main instance, i.e. make one of the clones the main instance. In fact, moving does nothing else: It creates a nomadic clone, it automatically makes the clone the new main instance and the old original the clone, then it deletes the clone.

So if the server with the main instance on it has disappeared, you can make a clone the new main instance. Should the server with the main instance come back to life, it immediately syncs with the remaining instances, and what used to be the main instance will be demoted to 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 Template:Internal Link. 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 Template:Internal Link didn't have it. The other two Osada incarnations, Template:Internal Link, 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.