This last Friday, MediaGoblin contributors Joar Wandborg, Aeva Ntsc, and myself all went to the Federated Social Web Summit 2012. And we weren't alone! There were many brilliant minds thinking about federation issues at the summit.
There was a lot of exciting conversation going on generally, from conversations about standards like dialback authentication, to various applications implementing federation, to various conversations about how we can make the user experiences of federation and etc better. If you're interested, you might be interested in checking out the etherpad document that some were annotating during the summit.
But what I was really interested in discussing at the summit was how to get federation working nicely in regards to media publishing. And I'm happy to say that we had a wonderful set of conversations about that! In fact, the conversations were made even better from the presence of Jaisen Mathai of OpenPhoto!
Sometimes people ask if MediaGoblin and OpenPhoto (which were both announced within a short time period) know about each other. They sometimes wonder... are you bitter enemies? Do you battle? If the project leaders in a room together and shook them up, would they break into fisticuffs?
Actually, the answer is that we do know about each other... Jaisen and I have been in communication since fairly early on and are both in support of each others' projects. We see ourselves as allies trying to tackle similar problem domains from different angles. And one thing we're both interested in is getting our projects to be interoperable as in terms of federation!
There were several major issues we wanted to discuss in making federation nice between instances:
- Subscribing to users across instances
- Favoriting across instances
- Cross-instance collections/galleries (think Flickr pool)
- How to make presentation look good across instances
- Making things private, and different types of actions/permissions
That's a big set of problems, and not super easy to solve! I typed up a bunch of notes from our conversation... here they are, distilled a bit:
Okay, good news first! For the most part, subscribing to instances already works fine with PubSubHubbub. It works fine for existing "subscription" type federation, and will probably just work fine for subscribing to other peoples' galleries here too. You can see here a thread with me talking from identi.ca to netziens of rainbowdash.net (a brony community hosted on statusnet) who suddenly realized I used them in a federation example in the campaign video.
When you think of the subscription needs of showing a gallery with thumbnails, such as on MediaGoblin, this same type of system should work well enough.
A bigger concern is, "what to do about mismatched thumbnail sizes?" and other display issues. OpenPhoto currently takes the approach where you can request any image size you want and it'll make and cache it for you on the fly. We can't really do that for MediaGoblin: this doesn't really work for audio and video (and while I like the idea I'm still not sure it's a great one for images either, especially not given MediaGoblin's processing infrastructure). If we want galleries to really look nice across instances it would be good to agree on some "common" thumbnail sizes and etc, as well as having adaptive CSS for the cases where a "good fit" thumb is not provided.
For this all to really work, taking actions on remote instances has got to get easier. For example, subscribing to users on another instance is still a huge pain in the ass on StatusNet instances. For example, subscribing to someone on another instance is a huge pain in the butt... if you're on another site, you have to tell it where your user is before you can do anything:
And even after that you have to confirm on your own site. This is an awkward user interface, even though it works for these things. But it doesn't work for everything... if I just subscribed to a user and they had an old post that I'd like to favorite, I can't do so because it isn't on my timeline. And even if it is on my timeline, I have to dig through the history to find it instead of just favoriting it from the site that I found it on. That's a frustrating user experience... but like many user experience frustrations with federation, it's frustrating for a reason: it's a hard problem to solve.
Luckily it looks like there's a good way forward to making this easier. There's work being done in the proposals of WebActivities and WebIntents which are standards which should help in the process of saying "When I do X task (such as favoriting, subscribing, or adding to a collection), I want to use Y service". There are a whole bunch of tasks that will need such functionality to have a clean implementation.
I'm not sure this solves All The Things; I'm not sure how you'd get an indication of whether or not you've already favorited such a thing on a remote site without having some sort of security vulnerability or privacy issues, and I haven't looked at the spec enough to see if that's exposed. But it definitely looks like it's going to help things go in the right direction, and we'll need it for a lot of stuff to feel smooth: subscribing, favoriting, adding to collections, etc.
How to handle private sharing across instances? Probably something like Salmon might be right, but it's a tricky problem. The topic of "what happens if someone makes something available to you but then retracts that" came up. Frankly, on the web, it's impossible to fully retract something and trying to force it often makes the situation worse (AKA the Streissand effect). It's possible that servers might publish a deletion notice and that could be interpreted as a "please" remove issue, but that's probably not enforcable. Furthermore, there are a whole series of issues with implementing privacy right. We agreed this is something that we'd like to do, but that getting media federation to work at all correctly publicly is a bigger first priority.
There was a bit of discussion about how to handle some other actions, such as Jaisen suggesting a button to mirror content onto your instance. (I thought this was interesting; in the past, a good number of people have suggested that we implement mirroring the content of people you subscribed to, and I've said that I think this is a bad default but that we could have a "diskgobbler" plugin in the future or etc. This solution actually sounds more interesting to me.) There might be additional actions too, such as "get a print", or even with 3d models, "send to a botfarm to 3d print" (well, that requires some future 3d printing botfarm infrastructure that doesn't exist yet, but I know Aeva is thinking about it), or maybe even "play on a stereo TV at home". These are interesting ideas, and not necessarily directly federation related, but it was interesting to discuss how they might be done by having some activity represented in an Activity Streams feeds and how webactions/webintents might play in.
Anyway, we left with a lot to think about, which is good given that federation is a big next step on the agenda once the campaign wraps up. And events like this are great opportunities to connect... in this case, it was both great to meet up with other MediaGoblin folks (this is the first time I'd ever met Joar in person)!
Furthermore, if federation is going to succeed, it's going to require the hard work and collaboration between a bunch of projects. So I'm glad that Jaisen of OpenPhoto was around for us to have such conversations!
While we're at it, I might as well remind you! We're in the middle of a crowdfunding campaign, and all the above is an exciting future, but its success depends on whether or not we can get focused development in to MediaGoblin. This is why I'm asking you: if you haven't yet donated to MediaGoblin, please do so! The future of media decentralization is in your hands!