I think the diaspora project is a fail, and judging from the messages posted around the web I am not the only one thinking this. However the idea of distributed social media is still very appealing to me. So here are just some things I am thinking about and who know maybe I (or somebody else) will eventually do something with it .
Public & Private streams
Most people using social media do not mind sharing certain information. Take for example sharing of news items, most people probably wouldn’t mind if others could “follow” them and also get the news. Or you could be a private person and only want to share data with your friends, or you could be a journalist wanting to share everything you post.
In my view these are two distinct things and should be treated as such. Private streams allow for pushing content, or some sort of publish-subscribe mechanism. While public streams are more suited to be served on a location and then pulled by anyone who wants it. One could even consider sharing a public stream as a static file (in for example json format) and just updating this as one posts something to the stream. Etag checking would then avoid unnecessary transfer and otherwise the webserver is just serving a static file which is cheap.
Private streams on the other hand would benefit from a publish-subscribe approach since that would require minimal data transfer and people would get the data as soon as it is available. However a side effect of the publish-subscribe mechanism is that the publishing peer has to keep track of send data (and is that really what you want?). However this could be simply solved by each peer keeping a list of last update (unix timestamp anyone) of all his peers and then do some communication once a peer comes online or when an update is posted and decide what to communicate.
Specify the communication not the implementation
Keeping the open spirit the communication should be specified and not the implementation. Many people do not want to (or can’t) run RoR however anything that can be implemented in RoR can also be implemented in an other language. When specifying the communication anyone can implement it, be it in RoR, php, C, asembly whatever…
The whole idea of distributed social media is that you are in control of your data. So you probably do not want to send your (private) stuff in plain text over the internet. So it makes sense to use some sort of encryption to transfer the data. However that does not quaranty privacy. A lot of people do not have their own server running, and probably a lot of peers will be hosted on the same server. Now would you want the hosting company to be able to read all your private data? Of course not!
So the data should also be encrypted on your peer. GPG encryption could do this. That only on a host where you have your private key that you can decrypt the messages. Now I do understand that this brings certain complications. Then I would only be able to read messages on my laptop, in order to read (or send) messages on my phone I would need to copy my private key to my phone, which might not be what you want.
Another down side of this approach is that you can’t view or send messages when you are at someone else’s computer…
You could of course store your private key on the machine that hosts your peer instance but then anyone that could read your key (sysadmin or even more people due to a potential security bug) could get their hands on your private key, which is certainly not what you want.
Anyone else any idea’s on distributed social media?