ActivityPub and MediaGoblin at TPAC 2016 (or: ActivityPub needs your review!)

Screenshot of ActivityPub Working Draft

Hello everyone! We have a lot of news to cover, but I'm going to jump right into the thick of it: we've been working hard on a new federation (as well as client to server) standard called ActivityPub (formerly ActivityPump). We've made tremendous progress, and I was just recently at a face to face meeting at TPAC, the W3C's big technical conference.

The good news: ActivityPub is aiming to hit Candidate Recommendation status by October 11th. (That's less than a week away!) However, in order to enter that stage, we need your review! If you have any interest in the decentralized web, you can help. All you have to do is read the latest editor's draft and provide feedback. (The earlier the better... maybe a fun weekend project?) You can do this by any of the following:

  • Post issues on the issue tracker (yes, I think it's ironic and problematic that we're using GitHub, I picked my battles here, whether right or wrong).
  • Email the social working group comments mailing list.
  • You can email me directly. Email cwebber AT dustycloud DOT org, and include "ActivityPub" in the subject. Note that I will be publishing your comments publicly, probably on the Social Working Group wiki!

If you have feedback, we want to hear it! (From anyone, but especially from those who are interested in implementing ActivityPub!) Thank you!

ActivityPub live

Note, the rest of this post is a bit of a dive into behind the scenes decisions and activity in MediaGoblin and ActivityPub... there's no need to read this part to submit a review!

I'm kind of traveling through time in all the wrong order in this post... but it's worth jumping forward a bit to see the results of what we've done. Over the last many months there's been a huge push on ActivityPub as a standard, as we'll talk about. But in order to succeed, I also needed implementations, both of client to server and server to server. Well, I'm happy to say that those did come together...

Pubstrate in action!

This is Pubstrate, an implementation of ActivityStreams and ActivityPub for GNU Guile. Sorry for the sappy embedded love-note, though what's nice about this is that it's the first demo I gave to someone else of the client to server functionality working in Pubstrate. But wait, what was the client?

Soci-El in action!

This is soci-el, an ActivityPub client written in... you guessed it... emacs lisp. You can see the rendering of the user's outbox here as well as the buffers from which the message was composed.

Pretty nerdy! I don't expect everyone to be using emacs as an ActivityPub client of course... I hope to see various desktop, web, and mobile clients made available. But, Emacs is the most fun for me, and I was time pressed, so there we are.

Everyone loves seeing screenshots, but maybe not all of this stuff makes sense without context. What does this mean for MediaGoblin?

So what's been going on?

It seems a recurring meme in MediaGoblin land to say "we've been quiet, because we've been busy" (or maybe historically on every tech blog ever), but I guess I can't resist repeating the mantra. It's true! Though the weight of my focus has been shifted from where I expected it to be. From the last few updates over the last year, you would be right to anticipate that the main thing I would be working on would be merging the federation code Jessica has written and getting 1.0 out the door. That was the plan, and we're still working towards that, but priorities shifted as we realized the opportunities and time pressures we were under with ActivityPub. After the Social Working Group face to face meeting in June, Jessica and I sat down and talked about what we should do. Jessica had recently started working at Igalia (great people!) and was busy with that and other transitions in her life, so we discussed whether we thought it was most sensible to focus my energy on MediaGoblin or on ActivityPub. It was clear that ActivityPub was shaping into a solid specification, but it was also made clear that the Social Working Group's charter was running out by the end of 2016. We both think ActivityPub is key to MediaGoblin's success and didn't want to see our invested time go to waste, so decided my immediate focus should switch to ActivityPub so it could successfully make it as a standard.

Which isn't doom and gloom for MediaGoblin! MediaGoblin development has continued... the community is good enough that people have been able to work while I've been busy. I'm happy to say we also appointed longtime contributor Boris Bobrov as co-maintainer to help reduce me being a bottleneck. (Thank you Boris, and congrats!) Other contributors have also stepped up to the plate. I'm especially thankful of Ben Sturmfels for hosting MediaGoblin hackathons and being so responsive to community members. (And of course, there are many others to thank, too!)

Anyway, I'm not going anywhere, I've just been shifting focus to standards work for a bit... but it's all for the greater good of MediaGoblin. (Well, and the greater federated social web!) Soon, we'll be putting the work we're doing on ActivityPub directly into MediaGoblin. When we merge Jessica's work on federation, we will also retool it so that the first federated release of MediaGoblin will be blazing the trails with ActivityPub.

Both ActivityPub and I personally got a significant boost by a happy visit from friend and Social Working Group co-conspirator Amy Guy. Amy dropped by for an intense four days of standards hacking and scheming, and came up with several significant ways to restructure and improve the document. With her help, we now have much clearer distinction between the use of ActivityPub as a client to server protocol (think mobile applications and desktop applications connecting to your server) vs the server to server protocol (federation). Both of these are now clearly intertwined in the document, but are distinct enough where they can be used and understood separately if desired. We also more clearly established the connections between ActivityPub and the linked data community by explaining ActivityPub's relationship with Linked Data Notifications.

Amy has a gift for composing standards language, something I'm still struggling to learn (but hopefully getting better with over time). ActivityPub is much better with her hard work. Thank you Amy!

In addition to the standards side of things, in order to get ActivityPub to the next level, we needed to be able to present real live demonstrations of the standard in action. Hence the work on Pubstrate and soci-el mentioned previously. For most of the months before TPAC, I was working furiously day and night to get things ready to show... And then, it was time to head off, and hope it was good enough...


Live demo image, by aaronpk
TPAC demo room photo by Aaron Parecki

Fortunately, all that hard work paid off. The Social Working Group kicked off TPAC with live open-viewing demonstrations of the various standards we've been working on. We got in a really solid set of demos from everyone in the group.

From my end, I managed to demo all the core parts of the ActivityPub spec: I wrote a note in my client (soci-el), fired it off to the server (Pubstrate), where it rendered successfully. Then I explained, well, what if you want someone on another machine to see it? So I had another user on a separate Pubstrate instance, added the user over there to the recipients list on my message, shot the message over to the server, crossed my fingers and hey! The live demo of federation succeeded. (Whew!)

In the actual main Social Working Group meeting, we hammered things forward pretty nicely. As said, ActivityPub was positioned to move ahead towards Candidate Recommendation by the 11th. Again, your feedback is most valuable at this time!

Spying image from the campaign video

Oh, one more thing. On the second day of the main Social Working Group meetings, at Amy's suggestion (apparently she was impressed when I showed her at her visit), I showed off the MediaGoblin campaign video to the group. Apparently I had never done so previously, so it was really nice to hear the reaction: "Holy cow, this is describing exactly the type of stuff we're working on in the working group!" Yep, exactly... all that stuff you see illustrated in that video, we're working on putting into code and standards. The dream lives!

So, all this Social Working Group stuff... things are happening! We're not just goofing off!

Super serious TPAC group "photo" by Aaron Parecki

... er, right. Not just goofing off! :)