# -*- mode: org; org-html-inline-images: nil; -*- #+TITLE: Federation and GNU #+AUTHOR: Christopher Allan Webber #+EMAIL: cwebber@dustycloud.org #+DATE: 2015-03-19 Sat #+OPTIONS: reveal_center:t reveal_progress:t reveal_history:nil reveal_control:t #+OPTIONS: reveal_mathjax:t reveal_rolling_links:t reveal_keyboard:t reveal_overview:t num:nil #+OPTIONS: reveal_width:1200 reveal_height:800 #+OPTIONS: toc:nil #+REVEAL_MARGIN: 0.06 #+REVEAL_MIN_SCALE: 1 #+REVEAL_MAX_SCALE: 2.5 #+REVEAL_TRANS: cube #+REVEAL_THEME: night #+REVEAL_HLEVEL: 2 #+REVEAL_HEAD_PREAMBLE: * Introduction ** Who am I? #+REVEAL_HTML: # #+ATTR_REVEAL: :frag roll-in - Lead MediaGoblin developer! - Free software and free culture activist - MediaGoblin co-founder / lead dev - Now: full time MediaGoblin - Formerly: CC, PCF, other things - Working on W3C Social WG for federation standard ** What's MediaGoblin? #+REVEAL_HTML: MediaGoblin is a free software media publishing system anyone can use and run! (And a GNU project!) But... ** Decentralization comes with a challenge #+REVEAL_HTML: Say you uploaded an awesome photo of a mountain on your MediaGoblin instance... *** How to share with friends on other servers? #+REVEAL_HTML: *** Federate it! #+REVEAL_HTML: ** What is federation? #+REVEAL_HTML: #+BEGIN_NOTES - loose term, means interconnecting separate servers. - you want to tear down that centralization wall? - need a way to bring the same experiences they can have on a centralized server. #+END_NOTES ** Why do you care? #+REVEAL_HTML: The present reality of network freedom isn't pretty... - Corporate control of the web - NSA spying - Freedom for developers, but not for users So, let's build something better :) ** What does federation mean for MediaGoblin? # Various activities need to be sync'ed across servers Mostly federating social activities: - Subscribing to someone else's media uploads - Commenting - Favoriting - Note: doesn't necessarily mean "mirroring" media! (though maybe a "diskgobbling" plugin could be added) ** How might you use it? Propagating most "activities" across servers: - Sending messages between users privately - Posting messages publicly - Scheduling calendar events - Posting media * A history of federation ** Pre-web federation Federation isn't a new concept. Some older federation standards: #+ATTR_REVEAL: :frag roll-in - Email - XMPP/Jabber - OpenID (So, not just sharing data) ** The web in the present #+REVEAL_HTML: Great image from Michał 'Rysiek' Woźniak on active, community-engaged federation projects. Except, add Pump.io! ** The Original Series #+REVEAL_HTML: As long as we're making Star Trek metaphors... *** Original cast # #+ATTR_REVEAL: :frag roll-in - Main cast: - GNU Social, formerly StatusNet: OStatus - Diaspora: (OStatus, mostly) - Friendica: Just about everything (incl OStatus) - Recurring characters: - BuddyCloud (using XMPP on backend) - RStatus (Ruby OStatus microblog implementation) - Elgg - Others I'm sure I've forgotten to mention and will be chastized for *** OStatus # TODO: OStatus logo here #+ATTR_REVEAL: :frag roll-in - Several authors, though most prominently Evan Prodromou - The most "successful" of the Original Protocols - Kind of a meta-protocol, weaving together: - Webfinger for identity - Atom + Activitystreams 1.0 XML representation - PubSubHubbub to push out public updates - Salmon for private notifications / messaging - A good start, but... *** OStatus (cotd) #+ATTR_REVEAL: :frag roll-in - A big meta-spec means much more to learn - Salmon is hard to understand / implement right, private messaging never really worked - Non-protocol "issues": flagship StatusNet site "identi.ca" grew hard to scale, hard to fund with sponsor company gone - Evan Prodromou started working on Pump.IO and the Pump API during shift - OStatus status: - Still used by some key players - But protocol design itself stagnant #+BEGIN_NOTES OStatus protocol work is pretty much stagnant at this point, though several communities actively using the protocol. MediaGoblin was going to originally use OStatus, but... now we come to: #+END_NOTES ** The Next Generation #+REVEAL_HTML: *** The cast - Interesting stuff at: - Pump.IO: the Pump API (by StatusNet's founder) - Red Matrix: Zot (by Friendica's founder) - Mayyyyyybe Tent.io - Coming up in next season: - The W3C Social WG *** Some similarities - Exchanging json activities to various endpoints seems common - Private delivery worked in from the start *** Focus: Pump.io and the Pump API MediaGoblin decided to follow Pump for its federation work. But why? - Easy to understand: Mostly just pushing json snippets from a few simple endpoints - Led by Evan Prodromou, who has done much leadership here - Local expertise: PyPump contributor part of the MediaGoblin project *** More pump.io tech - Posting JSON encoded Activitystreams 1.0 objects - Each "user" has inbox/outbox endpoints - Webfinger for email-like identity lookup - OAuth for authentication between servers That's "mostly it", see more at the [[https://github.com/e14n/pump.io/blob/master/API.md][Pump API spec document]] *** What does a Pump post look like? #+BEGIN_SRC python { "id": "http://coding.example/api/activity/bwkposthw", "actor": { "id": "acct:bwk@coding.example", "displayName": "Brian Kernighan", "objectType": "person", "url": "http://coding.example/bwk" }, "verb": "post", "object": { "id": "http://coding.example/api/note/helloworld", "content": "Hello, World!" "objectType": "note" }, "published": "1973-01-01T00:00:00" } #+END_SRC Subject, Predicate, Object! It's pretty simple, easy to unerstand, and solid tech. *** But is it ready? (p. 1) #+REVEAL_HTML: #+BEGIN_NOTES Web api sucks, "but the web api is just one possible client" Good point, but not an easy introduction to family and friends #+END_NOTES *** But is it ready? (p. 2) #+REVEAL_HTML: We're in "season one": good foundations, but a hard sell to newcomers. #+BEGIN_NOTES Basically, I think we're on season 1 of Next Generation. We've got Picard, but if this is all we have, it's going to be hard to get people into the series. Luckily, we've got good foundations. #+END_NOTES ** A fractured federation The protocol /is/ the glue of federation here, and yet we don't seem to agree on what protocol to use... We now have a smattering of incompatible protocols: - OStatus - Zot - XMPP - Pump - Tent Even GNU does not "agree" ** Is a better future possible? # Public domain "future" inventions images # http://publicdomainreview.org/collections/a-journey-in-other-worlds-a-romance-of-the-future-1894/ # http://publicdomainreview.org/collections/leaving-the-opera-in-the-year-2000/ # http://publicdomainreview.org/collections/space-colony-art-from-the-1970s/ <- us gov public domain #+REVEAL_HTML: *** W3C Social Working Group! #+REVEAL_HTML: Let's make this official, yo *** Status # TODO clarify this - Standardizing on Activitystreams 2.0 (currently in working draft, but solidifying) - Thorough analysis of requirements from other social networks - About to start standardizing "Social API" (client to server communication) - Then on to formalize federation (server to server communication) - Some philosophical differences to resolve though ("make it easy" vs "solid engineering") ** Lessons learned from MediaGoblin federating #+REVEAL_HTML: #+BEGIN_NOTES - Estimated time to port Pump API to MediaGoblin: 1 full year of expert, dedicated engineering - Why so long? - Database migrations are *really* tough to adjust to add decentralization to a previously centralized codebase... - Most UI and etc systems not set up for it - Just generally a lot of work to plan in - Planning federation from day one would have been simpler (hindsight is 20/20 though) #+END_NOTES * What can GNU do? #+BEGIN_NOTES GNU has always been a leader in pioneer in freeing users where constrained #+END_NOTES ** Pioneer in federated web applications #+REVEAL_HTML: #+BEGIN_NOTES - There really aren't enough people working on federated webapps - Here's an opportunity for leadership! - We'd be happy to provide advice especially to new projects interested in adding federation support #+END_NOTES ** Beyond federation? #+REVEAL_HTML:
#+BEGIN_NOTES Federation as server to server tech is great, obviously I am for it (tear down those silos!) Maybe we don't have to stop there. What are some things we can work with or even learn from? #+END_NOTES *** The demonization and confinement of peer to peer #+REVEAL_HTML: File sharing isn't evil, but peer to peer isn't just for file sharing either... #+BEGIN_NOTES - Let's talk about peer to peer! - Peer to peer is /not just file sharing!/ - But it's mostly associated with it... - Hysteria around copyright violations lead to demonization of peer to peer in in mid-2000s - If P2P hadn't been demonized and more (not-just-file-sharing) work had been done, maybe we wouldn't be in the terrible place we are today. #+END_NOTES *** New ideas in peer to peer #+REVEAL_HTML: #+BEGIN_NOTES - We have new experiments in peer to peer, decentralized tech like bitcoin and other cryptocurrency - Could interest in expanding the role of peer to peer happen? #+END_NOTES *** Federation over peer to peer? #+REVEAL_HTML: #+BEGIN_NOTES - Some interesting projects, for example telehash is for sending json snippets over peer to peer - Well, how about sending activitystreams activities? - Federation standard made by the social working group, with some small tweaks, probably could be adapted for peer to peer tech - Doesn't mean dropping federated social web, but an area to explore for sure - GNU has GNUNet, could it play a role? I don't know enough about it. But seems an interesting place for intersection. #+END_NOTES ** Everything that's old is GNU again #+REVEAL_HTML: Older systems may provide good ideas for newer tech! (The dreams of the 90s are alive in federation???) #+BEGIN_NOTES There are a lot of old ideas worth exploring that are relevant to federation... - The "actor model" message passing ~= federated activitystreams... could make concurrent, federated programming much easier! - Capability security research (See the "Rees thesis") - MUDs and MOOs? #+END_NOTES *** Actually a huge topic of research in the 1990s #+REVEAL_HTML: #+BEGIN_NOTES - Text adventure games break down commands into something that looks close to message passing commands - LambdaMOO game player's guide == "database manual" - MUD/MOOs as REPLs to collaborative programming environments - Actual papers from research labs planning out federated MUD/MOO systems! (Solving super similar problems) Sounds crazy? But the point is, computer science history has a lot of ideas to mine... #+END_NOTES ** But back to MediaGoblin #+REVEAL_HTML: - 0.8.0 is right around the corner, supports client->server Pump API - server to server (federation) stuff is in progress, expected by next major release after *** It's happening! #+REVEAL_HTML: *** Thanks to Jessica #+REVEAL_HTML: #+BEGIN_NOTES - Last year Evan Prodromou had introduced me to Jessica Tallon who had been working on a federation library named PyPump - I encouraged her to apply for a summer internship and she started working on federation through Outreach Program for Women - Doing such a good job that we brought her on (nearly) full time - Without Jessica's hard work and expertise, I'm not sure where we'd be - Give Jessica a hand! #+END_NOTES *** Thanks to you # TODO: Put the screenshot of money raised? #+REVEAL_HTML: #+BEGIN_NOTES But this would not have been possible without your help! Secretly that "second milestone" meant, hopefully bringing on a second person. And we were able to do that because of you. Thank you to everyone who donated, you have made our work possible! #+END_NOTES * Thanks again (for listening!) ** Credits - Space colony art by NASA Ames Research Center, US Gov public domain http://settlement.arc.nasa.gov/70sArt/art.html - Pirate Bay logo is "Kopimi", taken from Wikipedia - MediaGoblin artwork where present mostly by me, CC BY-SA 4.0! - Bitcoin logo CC0 1.0 from bitcoin reference client - Telehash logo in the public domain, see telehash.org git repo ** Credits (fair use!) Lots of pictures from Star Trek, which is proprietary and by Universal Pictures, but fair use and stuff. Sources: : - http://asena42.blogspot.com/2011/08/live-long-and-prosper.html : - http://tng.trekcore.com/gallery/albums/s1/1x17/homesoil004.jpg : - https://i.imgur.com/5VCDtNw.jpg : - https://startrektherewatch.files.wordpress.com/2014/11/skinofevil_hd_386.jpg?w=1180&h=885 Plus this thing by Rysiek: : - http://events.ccc.de/congress/2014/wiki/Assembly:The_Federation ** Contact info / Questions? # maybe something that isn't a shirtless kirk here This talk CC BY-SA 4.0 International - *MediaGoblin:* http://mediagoblin.org/ - *Me:* http://dustycloud.org/