SpringAll
SpringAll copied to clipboard
Profile synchronization in between pods
I decided to post one of my suggestions, which I believe could be worth considering or useful as a model at least. It could offer a nice solution for the long awaited feature of account migration (in between different pods) as well as a seamless and convenient way of securing one's account across multiple Diaspora servers.
What is your opinion of profiles containing a server list, across which a given profile may be automatically synchronized? After creating a profile on any pod, the user can opt to add the URL's of any other pods (granted they enable this feature) to a special list: This causes the pod to create a copy of the entire profile on the linked pod, then permanently synchronize it whenever any change is made (new posts, profile information being edited, etc). Likewise, whenever you make any changes on the linked pod, it in turn syncs them back to the original pod and any other pods that are linked. There would be no concept of a central or original pod, just a list of multiple pods where each must update the other whenever a change is made.
Example: A user creates an account on foo.com. After that they go into their settings where they see a list of pods, obviously containing only foo.com initially. Next they decide they want to maintain a copy on bar.com as well; They add bar.com to the list and wait for the account to be copied and finish syncing. Now they have two exact copies of their profile on both foo.com and bar.com! They can access their profile as either foo.com/u/myself or bar.com/u/myself, and any action or modification they do on either will be synced to the other seamlessly.
The advantage of this approach is that it would solve two issues: The problem of migrating your account to another pod on demand, as well as keeping a backup of your account on multiple servers. If a pod ever goes down without notice, your account will always be available on one or more pods, and you can access your profile from another URL as if nothing happened. This would be a great safeguard for scenarios where either a server is taken down without notice, or becomes subject to censorship and can no longer accept a given profile. The question of "which pod do I choose" would also become less difficult for newcomers, which could be of aid in helping more people move over from Facebook and others.
Of course there are a few concerns with such an approach. One is what happens if different changes are somehow made on different pods before they get to update one another... in which case the user could be prompted with a conflict warning asking which version of their profile should override the rest, or each pod could check all linked pods for changes before allowing any update and put your profile in read-only mode until they finish syncing. There's also the scenario where someone else has your username or ID on another pod, and in this case the user could simply be informed via a warning message that they can't sync to that pod for this reason.
To expand on an additional sub-suggestion, which further exemplifies how such a system could greatly facilitate choosing a pod while maintaining decentralized backups of an account: Diaspora Project could officially endorse a list of trusted pods, and in the process offer a registration page across these pods from diasporafoundation.org altogether. The team would of course need to establish criteria based on which pod owners across the world may opt to be on the official list, such as being up to speed and security standards. Other websites can of course create their own pod lists if they wish, and offer their own registration page which creates your account on all pods at once. How this would work:
If an user wants to register to the Diaspora network without caring which pod in particular, they can be offered a special page such as diasporafoundation.org/register for instance. On this page they select a username and password as usual, and are also shown a list of URL's representing pods their account will be created and synced across. They can tick any entry on or off before registering, then click the button to create their account across all selected pods. The page basically acts as a shortcut that issues a registration + synchronization command to multiple third-party pods, then gives the person registering a list of URL's on which they will find their new profile! Later on the user can go into their preferences from any pod to make changes... adding a new pod to the sync list if they change their mind, as well as removing one if they wish to delete their account from that particular pod.
I'm aware that what I'm proposing is a major overhaul. As someone who's been using Facebook and Google+ however, I quickly observed how one of the things that would discourage the average user from joining is having to choose your pod from third party lists where you don't know who to trust, creating the impression that Diaspora is complicated or only intended for geeks who already know which pod to go to. Such functionality would offer a means of entering the official website and clicking a quick register button, just as you do on Facebook and other alternatives... providing the same ease and certainty without affecting the decentralized nature of Diaspora in any form. Without such an ability, it's hard to see Diaspora having a fighting chance over Facebook & friends.
To further iterate why I consider a pod synchronization (or cloud) feature essential for Diaspora and its goals, I would like to bring to everyone's attention a newly proposed law in Germany know as the Social Media Law:
The law proposes that companies such as Facebook and Twitter are fined up to €50, with individual employees facing fines up to €5, for failing or refusing to censor speech deemed illegal by the German state. Any commercial website with more than 2 million users will be forced to police its content, under the pretext of fighting hate speech and fake news, resulting in a perfect system of censorship that can be used to gag any individual expressing inconvenient thoughts. Social media sites are given between 24 hours and 7 days to remove content deemed illegal, based on how obvious the legality of the content is considered.
Because Diaspora uses single pods located in fixed physical locations, pod owners refusing to censor content and not interfering with the free speech of their users may face colossal fines! For this and other reasons, many of which have been explained by the founders of the IPFS protocol, I ask Diaspora to please consider a system for distributed hosting of content in order to prevent reliance on single servers that represent points of failure.
Of course there are a few concerns with such an approach. One is what happens if different changes are somehow made on different pods before they get to update one another... in which case the user could be prompted with a conflict warning asking which version of their profile should override the rest, or each pod could check all linked pods for changes before allowing any update and put your profile in read-only mode until they finish syncing.
I think an acceptable solution for tha sake of simplicity would be to timestamp changes and choose the newest. I can see very few situations when this would not be the preffered behaviour.
The law proposes that companies such as Facebook and Twitter are fined up to €50, with individual employees facing fines up to €5, for failing or refusing to censor speech deemed illegal by the German state. Any commercial website with more than 2 million users will be forced to police its content, under the pretext of fighting hate speech and fake news, resulting in a perfect system of censorship that can be used to gag any individual expressing inconvenient thoughts. Social media sites are given between 24 hours and 7 days to remove content deemed illegal, based on how obvious the legality of the content is considered.
That is why host country was one of my most important criteria for choosing a pod, but I agree.
If an user wants to register to the Diaspora network without caring which pod in particular, they can be offered a special page such as diasporafoundation.org/register for instance. On this page they select a username and password as usual, and are also shown a list of URL's representing pods their account will be created and synced across.
Same password accross pods? Me not like.
They can access their profile as either foo.com/u/myself or bar.com/u/myself, and any action or modification they do on either will be synced to the other seamlessly.
I think it is paramonut we consider making one pod primary, making the other just mirror the profile until the user decides to change the primary, which should happen immediately. Then a user would use one pod as normal, which they probably would anyway and have backups ready to go on other pods. If other users use a handle that is not a primary, the pod should redirect them silently.
I believe this would simplify the implementation significantly. Full multi-pod functionality can always be added later.
Now that IPFS is coming along nicely, I'm thinking whether some sort of implementation within its network is something that would make sense. Like everyone said though, no one wants unneeded complexity, so it's just one thought out of many.
Would there be a way for pods to offer infrastructure-level syncing of profile data using SyncThing
?
(and if so, it'd be nice to display to users how current their sync/backup state is fairly prominently. for example: my smartwatch and microSD card is up-to-date, my phone is up-to-date, my laptop last backed up two days ago)