A Social Web based on URLs: Decentralized Microblogging

I've mentioned this before, but I haven’t been updating my personal website that much lately. There are lots of things I love about owning my own site: I own the database that stores all of my posts (and can move it or delete it whenever I want) and I can easily modify the way it works and looks, and even change my domain name. Despite these features, I find myself posting more frequently on social networking sites. I can post faster and quicker, and receive more feedback in a shorter amount of time. There is no doubt that being able to post a piece of content and knowing that a good percentage of my friends will immediately see it, comment, and share it is a great feeling - a direct appeal to ego. Likewise being on the other end of things and commenting and sharing makes you feel like a part of a conversation.

So this got me thinking, how can I get that level of speed and interaction on my own website that is hosted on my own server? I would like to be able to quickly share content and network my site with a few friends. So I started thinking about if it’d be possible to build an organic social web simply based on unique URLs. If we can assume a unique URL is associated with a person, then we just need a common language that can automatically link people together.

We can look to Twitter as a model for such a language. Twitter’s character limit has caused its users to develop new syntax to express greater amounts of information in 140 characters or less. Ultimately the syntax is just a way of adding another level of meaning and power to a hyperlink - @somebody is not just a link, but specifically a link to a person, and furthermore using it means that the person will get notified when you use it. Similarly #hashtag gives the power to make loose, indirect connections with others to form ad hoc groups and allow a person to join a more global conversation. With those concepts in mind, we have a new shared language that can be adopted by others to allow communication across an open web, independent of the platform.

The first step is to extend the @reply syntax beyond a twitter username. This should be easy, especially if a URL is uniquely associated with a person. Let’s say Eric posts a message to his website, eric.com and references his friend Jerry whose website is jerry.com.

Eric from eric.com posts the following status:

"Reading Blink by Malcom Gladwell. @jerry.com you should check it out! #bookclub"

This status is assigned a unique URL of eric.com/status/640.

Assuming both Eric and Jerry have blogging software that understand this syntax, the blogging software will automatically try to contact or “ping” jerry.com. The whole process might look something like this:

  1. First eric.com pings jerry.com with a link to the post referencing @jerry.com
  2. If jerry.com receives the ping but doesn’t know eric.com or can’t verify the ping originates from him, nothing happens.
  3. If jerry.com receives the ping and is friends with eric.com then jerry.com visits eric.com/status/640 and copies the original post from eric.com to jerry.com and displays it within his status updates (i.e. on his "wall").

Jerry’s website has now copied over Eric’s post and it gets displayed within his status updates (similar to your Facebook Wall). As long as a person can be identified with a single URL and there is a common language shared between the server software for each person, there is no reason we can't just make these kind of links between URLs to create an open, social web.

I hope to have a working demo* of this kind of decentralized microblogging software soon. I think having a proof-of-concept of this will explain things better than I could in a blog entry and I don't want to overanalyze things too much. There is lots more to talk about, especially with the technical side of things but I’ll save that for a later post.

That’s enough for now, but the basic idea is this: the internet is powered by hyperlinks. So far we only think about hyperlinks as representing a piece of information or a computer. But if a link can represent a person, and we have a common language to connect and share these links between people, then it should be possible to create a decentralized social web based on URLs.

*EDIT status.net already proves this kind of thing can sort of work with OStatus protocol. Integrating and generalizing this into a wider publishing platform (not just status updates) with your own hub included seems like the next step.

mike (not verified) says:

This would be a clean and simple way to do it, and it reminds me of your idea for artists maintaining permanent song links (artist.com/album/trackname)

But i think the song link solution has more compelling reasons for adoption: the itunes store sucks for artists and fans and mostly benefits Apple.

What is the scenario where a critical mass of people would not just use twitter and facebook? Privacy breaches, control of content...

zirafa says:

Hey Mike,

I think that was actually Lucas Gonze who talked about artists having permanent song links (I do agree with that idea and Bandcamp has adopted the practice as well).

"What is the scenario where a critical mass of people would not just use twitter and facebook? Privacy breaches, control of content..."

I should point out that I'm not proposing a Twitter or Facebook killer, but hopefully something that would complement those existing sites instead of compete. Thimbl, Status.net, and Diaspora seem to want to do direct battle which is cool but not exactly the same thing I'm proposing. I understand for now, communicating across Twitter and Facebook means working with them and their APIs. I just want a faster blogging interface for myself, and some way to quickly network my site with some friends.

mike (not verified) says:

ok on second reading i see it's about common language, not software or networks in particular. then I have another question, could you make use of the work done by OpenID?

zirafa says:

I hope so. I've spent the last few days reading up on proposals and existing standards for representing people as links and it is just insane how many variations there are of the same idea. As I read more and keep finding more semantic technologies, it seems pretty clear that no one can agree on anything or insist on having multiple ways of doing one thing.

Gotta regroup and think some more about this.

zirafa says:

Spent some more time researching this and I've pretty much settled upon OStatus which uses Webfinger to uniquely identify a person with the syntax username@domain.com. It also uses PuSH to ping another person with real-time RSS/ATOM updates. I sorta don't like how Webfinger uses the syntax @user@domain.com because it looks like an email address and seems mega confusing. Despite this, I think it should be easy enough to assign a personal @nickname shorthand for @user@domain.com so at least you don't have to type it in like that every time. A little autocomplete dropdown would be very helpful in this scenario too, much like gmail's autocomplete for entering email addresses.

One issue is that it doesn't seem easy to delete or update* posts once they've been broadcast. The other thing is that you can't really control who is subscribing to your live feed across networks, but apparently people are working on that.**

*Edit: Looks like Atom supports update (but not delete).
** It'd be nice if I could manually add people to my subscriber list and it would ask the subscriber for permission to push to them as well as to subscribe to their feed. This would sorta be like "friending". With OAuth it'd add a layer of privacy, too.

Jesse (not verified) says:

Damn this sounds like an awesome idea. How would you go about blocking the spam? For instance say i use a proxy and mask myself could i then infiltrated a message allegedly by eric.com? Some type of synch code would have to be integrated similar to what facebook gives you to validate session security. This would have to be at both ends sent back and forth with each messages.

zirafa says:

@Jesse: Yes there is potential for spam. One of the things PuSH is supposed to do is verify if the post it is receiving is authentic but I haven't investigated exactly how. Another way to combat this is to use OAuth on the feeds, but I think something like SSH or RSA to create a secure connection for a transmission could work.

Initially I had the idea that the website could check the IP address of the website sending the message, or even do a traceroute(!?) but doing that for every message might be too much of an overhead.

Another idea I had was to just assign a unique transmission ID to every transmission and have some sort of linkback verification.

One general issue to deal with is defining what it means to be private. The other general issue is how to reconcile the conflicting issues of anonymity vs authenticity.