OStatus/Intro

Work in progress: still needs some editing

Fixme: add some nicer illustrations of the subscription workflow at each layer

So your first question is probably something like "what does OStatus do that OMB didn't?" Well, there's some good answers to that!

You're about to learn what OStatus is and how it's going to make communications between StatusNet sites work better.

The basics
Some of you may remember the bad old days when you couldn't send e-mail between services like AOL and CompuServe. OMB allowed us to set up subscriptions between StatusNet sites, but required special support to be used with non-StatusNet services and was hard to extend.

By building on top of shared technologies already in use and being rolled out, we can go beyond that...

If we step back a bit, we find that Atom and RSS feeds are already a lingua franca. Virtually every service provides such feeds, giving a way for other tools and services to read someone's outgoing posts.



But the fun of social networks is in real-time interaction -- if your updates don't get sent to your friends right away, it's just not the same.

Luckily, that exact problem has been solved with PubSubHubbub (PuSH). When your friend on Example.Net subscribes to you on Identi.ca, Example.Net tells Identi.ca's PuSH hub that it wants to be told whenever your feed is updated. Now whenever you post on Identi.ca, an update to your feed gets sent out to Example.Net and any other subscribing services. Example.Net sees the update, records it, and puts it straight in your friend's inbox:



The real beauty of it is that at this point we already have something useful, without anything StatusNet-specific. In fact you can already subscribe to someone's public Google Buzz feed as an OStatus remote user, and they haven't done anything special for us!

The good stuff
PuSH is a low-level piece of the puzzle; it's just a way for services to send updates to each other. For a fully interactive social network, you need that human touch... you want to know who's subscribing to you, which of your posts they like, and you want to get their replies to you.

For this we're making use of two more extensions that build on top of Atom feeds: Activity Streams and Salmon.

Activity Streams is a set of extensions to Atom feeds for social networks to describe "activities" more specifically than just "ok here's a post". Atom feed entries are extended with a verb (post, follow, favorite, etc) and more detail on who or what's being acted on.

Salmon was created as a way for blog aggregators to send comments back to the original blog server, "like salmon swimming upstream". We're using this channel to send replies as well as other user-to-user events:



When your friend on Example.Net subscribes to your Identi.ca account, Example.Net sends an Atom entry with an Activity Streams "follow" verb to your Salmon reply channel on Identi.ca. This lets Identi.ca know who subscribed to you, so their profile gets added to your subscribers list and you get a notification that they're following you.

If your Example.Net buddy gets social network overload and decides to unsubscribe from you, another notification comes through about the unsubscribe, and we can drop them from the list.

Other events can be sent over this channel as well, such as when your friends on other services mark your posts as a favorite.

Groups
One of the most annoying limitations with OMB 0.1 was that there's no support for joining a group on another service. You might have noticed that groups have Atom feeds of posts just like users do... if you were wondering if that means groups could be run over OStatus too, you're correct!

As a user on Identi.ca you can join a group on Example.Net without setting up an Example.Net account. Group posts from Example.Net will appear right in your inbox on Identi.ca just like any local group, and you can even post back to it.