A few days ago Dave Winer asked for visions of a decentralized, open version of Twitter – a Twitter owned by the internet, rather than by a single corporation. I responded in a short Github gist, but I’ve thought about it a bit more and wanted to record my thoughts here.
In my original post I said:
I think the short answer is “something like XMPP.” XMPP has a lot of things going for it: 1. It’s an open standard (we can all build our own implementations and fork our own features and at a base level it will remain compatible as long as we’re not dorks and break the interface). 2. It’s federated (I can choose who I trust, and I don’t have to pay for everyone to use my server).
Dave responded saying that he had “always wanted a simplified API for XMPP. Send a message, get a message.” I think he’s right that the XMPP interface is too complicated.
Manton Reece also responded, saying:
But as great as XMPP is for messaging, it seems too different from the web; it would be like starting over. The nice thing about building on independent microblogs is that we can leverage the existing open web infrastructure: all the WordPress installs, RSS feeds, and new work from the IndieWebCamp.
Totally fair point–HTTP has a huge install base, and the more that’s built on top of it the more resilient the entire system becomes. So, what’s the middle ground?
The big advantages that XMPP give you are that it’s built from the ground up to be real-time and distributed. There’s a very clear model for how messages pass between servers, and from servers to clients, in both directions. This is helpful. Open web infrastructure obviously comes with its own advantages, mostly around install base, software diversity (everything works across HTTP), and scalability (I can host a static blog on S3/Cloudfront–and I do!–and it could receive millions of views tomorrow without any concern about servers failiing).
I think the missing piece is notifications. If someone posts something, I want to know that they’ve posted it. If their post results in an updated item in their RSS feed, I need an easy way to know that their RSS feed has been updated. RSS readers did that in the past (and I think contributed mightily to RSS’s success), but the Google Reader apocalypse has taught us not too put too many eggs in one corporation’s basket (plus the whole point of this exercise is to think about a non-centralized Twitter). Of course I could poll the RSS feed, but that doesn’t really scale, and requires me the end user to set up server software which is a total non-starter if this is to compete with Twitter.
In the old days there were ping services (and there may still well be) that you could ping when you updated a post, but they were flooded with spam. Maybe there’s something there, but it would need to be better architected. It is still effectively a poll by the client on the ping server’s list of updated feeds, but at least the polls are to central nodes, rather than many-to-many across clients. This makes it a bit more centralized, but there needn’t be a single ping server. You could register with many and update several at once, and the ping servers themselves could be federated.
Hmm… maybe there’s something here. Open web standards for publishing and consuming, and a layer of real-time messaging and updating for publishers to notify clients when new content is available. I’ll have to think a bit more about how this might work.