--- marp: true paginate: true _class: invert --- # Into the federated Universe ### Digital sovereignty through decentral communication ![bg h:750 right](image.png) ###### by April John ([@april:blahaj.nyc][matrix]) [matrix]: https://github.com/marp-team --- # Content notes - Technical details of the activitypup protocoll - The politics behind different fediverse servers - Inter-project politics - Unused potential of the Fediverse - Does it need to be federated? - Why dont we do peer to peer? --- April John === @april@donotsta.re @april:blahaj.nyc ##### Things im known for: - Fediverse Software Maintainer - Linux Kernel Contributor - Professional pro-grammar kitten --- # The Fediverse (federated universe) ![h:250 bg right](https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Fediverse_logo_proposal.svg/2048px-Fediverse_logo_proposal.svg.png) - users on different servers communicate via a shared protocol - --- # The idea of a federated universe. - Founding of twitter in 2006 as microblogging service - Open Standard OStatus 2008 - Making of gnu-social 2013 - ActivityPup in 2018 - finally, a federated universe! The fediverse! --- # You heard of Mastodon? --- # You heard of Mastodon? ...there is more. --- ![h:690 bg](https://axbom.com/content/images/size/w2000/2023/01/fediverse-branches-axbom-30-CC-BY-SA.webp) --- # Activitypub - protocol introduced in 2018 - idea of a universal standard for any multimedia service to communicate between servers - i.e. servers chaos.social and crimew.gay communicating with each other - especially popular for microblogging --- # The architecture of Activitypub ![Alt text](image-2.png) --- # Actors and Activities ### Actors represent People, Video Channels, Podcasts ![Alt text](image-3.png) ### Activities represent Posts, Videos, Audio ![Alt text](image-4.png) --- # Actors and Activities ### Actors represent People, Video Channels, Podcasts ``` { "@context": "https://www.w3.org/ns/activitystreams", "type": "Person", "id": "https://crimew.gay/users/luna", "name": "luna 'delete & redraft' vivian.", "preferredUsername": "luna", "summary": "hi, i'm luna, your local 18 year old gay ace polyam non-binary transfem genderfluid mess.", "inbox": "https://crimew.gay/users/luna/inbox/", "outbox": "https://crimew.gay/users/luna/outbox/", "followers": "https://crimew.gay/users/luna/followers/", "following": "https://crimew.gay/users/luna/following/", "liked": "https://crimew.gay/users/luna/liked/" } ``` --- # Actors and Activities ### Activities represent Posts, Videos, Audio ``` { "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "to": ["https://donotsta.re/users/april"], "attributedTo": "https://crimew.gay/users/luna", "content": "it's 4:20, nice" } ``` --- # Issues of the standard - barebones specification leading to many unstandartized extensions of the protocol - happened, because as a w3c standard it had to satisfy many people, and thus less was more - activitypub sends HTML with Activities, which the Servers need to parse and then server to users - XSS as a service! - Limited standard featureset, but we can extend it ourself! --- # How? ### "Simple", we add extra JSON fields! --- # Extending the AP protocol - Projects want new features - They need to invent the standard to federate these themself --- # Case study: Cat ears on a profile - Misskey added support for cat ears on profile pictures: ![h:80](image-5.png) - federated using a ActivityPub extension called ``isCat`` - Misskey interprets it and displays cat ears - others like Mastodon just ignore it --- # Case study: Cat ears on a profile ``` { "@context": "https://www.w3.org/ns/activitystreams", "type": "Person", "id": "https://crimew.gay/users/luna", "name": "luna 'delete & redraft' vivian.", "preferredUsername": "luna", "summary": "hi, i'm luna, your local 18 year old gay ace polyam non-binary transfem genderfluid mess.", "inbox": "https://crimew.gay/users/luna/inbox/", "outbox": "https://crimew.gay/users/luna/outbox/", "followers": "https://crimew.gay/users/luna/followers/", "following": "https://crimew.gay/users/luna/following/", "liked": "https://crimew.gay/users/luna/liked/", "isCat": true } ``` --- # ..that doesnt always work --- # Multiple standards for the same feature ## Quote posts - ``_misskey_quote`` - ``quoteUrl`` - ``quoteUri`` --- # Multiple standards for the same feature ## Groups exclusive posts - Bonfire's circles - Lemmy's implementation using ``Announce`` and ``Follow`` - Friendica & Hubzilla implementing groups using ActivityStreams - Smithereen using FEP-400e (Fediverse Enhancement Proposals) - .... --- # Mastodon in the meantime - implementing FEP-400e partially - adding many own ActivityPub extensions to the mix which werent used in any of the above mentioned projects - we now have an even different standard --- # Mastodon messing up things ### The issue with that - Mastodon is by far the biggest fediverse project - When mastodon implements something a specific way it turns the de-facto standard - bad standards impact the fediverse as a whole --- # Mastodon messing things up ### Things already messed up - LD-signing - bad sanity checking of AP ids - Mastodon storing activities using internal IDs instead of using the provided IDs - no single implementation of the AP C2S api (yes that exists), they rather use their own - goal is to preserve a "Mastodon User Experience" by not implementing it - and soon... Groups --- # Why things are like this - every project working on its own - no real unified effort between fediverse software maintainers to unify features - working together was tried before, but suffered from disagreement between different software projects - every software maintainer playing "mini dictator" - Mastodon having a monopoly, caused my 90% of people being on the 10 most populated instances (which run on mastodon exclusively) --- # How things could get better - Fediverse Enhancement Proposals - standardize activitypub examples using w3c - AP C2S - people moving from big instances to small ones - selfhost it! --- # Activitypub Client to Server - part of the original AP spec - never got implemented fully anywhere - some clients existed for it - Pleroma started implementation of it, Mastodon refused to do it for 5 years in a row - essentially universal API for all activitypub servers, using the same standards as between server communication - makes it able to use one client for all* AP servers - takes much load of the server --- # Selfhost it! - big instances work against decentralisation of the fediverse - reason Mastodon got the biggest fedi software in the first place - own instances gives you independance - lets you deal with fediblocks yourself --- # Issues with self hosting - money - one needs to administer the instance themself - your server hardware may be overwhelmed - fedi consumes much storage --- # How to selfhost - get suitable hardware & domain - What instance do you want? - How do you want to deploy it? - Do you want to use a S3 bucket? - Follow relays! --- # What can the future hold? ### Universal Peer-to-peer ### More smaller instances --- # Ending words ## Distrust authorities - promote decentralisation