#+TITLE: Bluesky Architecture compared to other social media services #+SUBTITLE: [[file:?print-pdf][Printable version]] #+DATE: [2024-05-24 Fri] #+AUTHOR: Éibhear Ó hAnluain #+EMAIL: eibhear.geo@gmail.com #+OPTIONS: ':nil *:t -:t ::t <:t \n:nil ^:{} author:t c:nil creator:nil #+OPTIONS: d:nil date:t e:t email:t f:t inline:t num:nil p:nil pri:nil #+OPTIONS: stat:nil tags:nil tasks:t tex:t timestamp:nil toc:1 todo:nil |:t #+DESCRIPTION: A discussion of Bluesky's architecture as it relates to other social media services #+LANGUAGE: en #+REVEAL_ROOT: ./reveal.js #+REVEAL_INIT_OPTIONS: transition:'none', margin: 0.1, slideNumber:true #+REVEAL_THEME: white #+REVEAL_HLEVEL: 1 #+REVEAL_EXTRA_CSS: ./e-reveal.css #+REVEAL_EXTRA_CSS: ./gridding.css #+REVEAL_DEFAULT_SLIDE_BACKGROUND: ./bCardBackground.png #+REVEAL_TITLE_SLIDE_BACKGROUND: ./bCardBackground.png #+REVEAL_TOC_SLIDE_BACKGROUND: ./bCardBackground.png #+REVEAL_DEFAULT_SLIDE_SIZE: 100% #+REVEAL_TITLE_SLIDE_SIZE: 100% #+REVEAL_TOC_SLIDE_SIZE: 100% * Notes :noexport: * Introduction #+REVEAL_HTML:
Boo! #+REVEAL_HTML:
* General social media architectures ** Simplistic view 1/2 -- overview #+REVEAL_HTML:
#+ATTR_HTML: :width 90% file:structurizr-1-001-GenericSocial-01.png #+REVEAL_HTML:
** Simplistic view 2/2 -- services #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_HTML: :width 40% file:structurizr-1-002-GenericSocial-02.png #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_REVEAL: :frag (appear) - Social media user access the app - The app interacts with the API - The API is the gateway for the database of posts, responses, likes, etc. #+REVEAL_HTML:
#+REVEAL_HTML:
** More realistic view 1/4 -- overview #+REVEAL_HTML:
#+ATTR_HTML: :width 90% file:structurizr-1-003-RealisticSocial-01.png #+REVEAL_HTML:
** More realistic view 2/4 -- basic services #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_HTML: :width 70% file:structurizr-1-004-RealisticSocial-02.png #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_REVEAL: :frag (appear) - Social media user access the app - The app interacts with the API - The API is the gateway for the database of posts, responses, likes, etc. - The API also captures data for building profiles of users for targeting purposes - The algorithmic feed generator guides the API on what posts to place into the app's feed #+REVEAL_HTML:
#+REVEAL_HTML:
** More realistic view 3/4 -- the algorithm #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_HTML: :width 70% file:structurizr-1-005-RealisticSocial-03.png #+REVEAL_HTML:
#+REVEAL_HTML:
- Social media user access the app - The app interacts with the API - The API is the gateway for the database of posts, responses, likes, etc. - The API also captures data for building profiles of users for targeting purposes - The algorithmic feed generator guides the API on what posts to place into the app's feed - Algorithmic feeds are created by the service administrator, using an app only /they/ have access to #+REVEAL_HTML:
#+REVEAL_HTML:
** More realistic view 4/4 -- content moderation #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_HTML: :width 100% file:structurizr-1-006-RealisticSocial-04.png #+REVEAL_HTML:
#+REVEAL_HTML:
- Social media user access the app - The app interacts with the API - The API is the gateway for the database of posts, responses, likes, etc. - The API also captures data for building profiles of users for targeting purposes - The algorithmic feed generator guides the API on what posts to place into the app's feed - Algorithmic feeds are created by the service administrator, using an app only /they/ have access to - Moderation is also performed by a member of the service's staff, using a dedicate app and services the the user doesn't have access to #+REVEAL_HTML:
#+REVEAL_HTML:
* Federated social media services ** Federated services 1/8 -- overview #+REVEAL_HTML:
#+ATTR_HTML: :width 75% file:structurizr-1-007-FederatedSocial-01.png #+REVEAL_HTML:
** Federated services 2/8 -- internal, administration and content moderation services #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_HTML: :width 70% file:structurizr-1-008-FederatedSocial-02.png #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_REVEAL: :frag (appear) - Same as before, the user access the service through an App that uses an API - As federated services are small, the administrator and the moderator are the one person - No algorithmic feeds, though + not popular in the fediverse community + difficult to implement in a federated environment. #+REVEAL_HTML:
#+REVEAL_HTML:
** Federated services 3/8 -- federation 1 #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_HTML: :width 100% file:structurizr-1-009-FederatedSocial-03.png #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_REVEAL: :frag (none none none appear) - Same as before, the user access the service through an App that uses an API - As federated services are small, the administrator and the moderator are the one person - No algorithmic feeds, though + not popular in the fediverse community + difficult to implement in a federated environment. - Federation service to push activity out to the federated network - Federation API to take in activity from other nodes - A logical database of inbound federated posts - Federation using ActivityPub standard #+REVEAL_HTML:
#+REVEAL_HTML:
** Federated services 4/8 -- federation 2 #+REVEAL_HTML:
#+ATTR_HTML: :width 75% file:structurizr-1-010-FederatedSocial-04.png #+REVEAL_HTML:
** Federated services 5/8 -- federation 3 #+REVEAL_HTML:
#+ATTR_HTML: :width 75% file:structurizr-1-011-FederatedSocial-05.png #+REVEAL_HTML:
** Federated services 6/8 -- federation 4 #+REVEAL_HTML:
#+ATTR_HTML: :width 75% file:structurizr-1-012-FederatedSocial-06.png #+REVEAL_HTML:
** Federated services 7/8 -- federation 5 #+REVEAL_HTML:
#+ATTR_HTML: :width 75% file:structurizr-1-013-FederatedSocial-07.png #+REVEAL_HTML:
** Federated services 8/8 -- federation 6 #+REVEAL_HTML:
#+ATTR_HTML: :width 75% file:structurizr-1-014-FederatedSocial-08.png #+REVEAL_HTML:
* Bluesky ** Basic Bluesky 1/2 #+REVEAL_HTML:
#+ATTR_HTML: :width 100% file:structurizr-1-015-BlueskyBasic-01.png #+REVEAL_HTML:
** Basic Bluesky 2/2 #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_HTML: :width 100% file:structurizr-1-016-BlueskyBasic-02.png #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_REVEAL: :frag (appear) - User interfaces with an app hosted by the /AppView/ - The /AppView/ includes an API (allowing for bot-like interactions) - The /AppView/ stores and reads data from the /Personal Data Server/ (PDS) - Bluesky resolved user identities using "DIDs" (Distributed IDs) - The Bluesky admin uses a separate service for preparing algorithmic feeds - The Bluesky moderator applies labels and actions to posts for trust and safety through a dedicated service #+REVEAL_HTML:
#+REVEAL_HTML:
* Bluesky -- Identities ** Bluesky Identities 1/4 #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_HTML: :width 100% file:structurizr-1-017-BlueskyIdentity-01.png #+REVEAL_HTML:
#+REVEAL_HTML:
#+ATTR_REVEAL: :frag (appear) - User's typical Bluesky ID is =@.bsky.social= + e.g. =@theauldsthretch.bsky.social= - Users can set up their own handle, =@.=. E.g. (and these are all real IDs) ... + =@astrokatie.com= -- a cosmologist + =@eibhear.gibiris.org= -- the author + =@wyden.senate.gov= -- a U.S. Senator - User must control the domain or be a legitimate member of the domain's community - Domain-based handle resolves to a DID, either by DNS or =.well-known=: #+BEGIN_SRC shell $ dig _atproto.eibhear.gibiris.org TXT ... ;; ANSWER SECTION: _atproto.eibhear.gibiris.org. 3600 IN TXT "did=did:plc:23mysztmt7dh3l5lzhinzafi" $ curl https://theauldsthretch.bsky.social/.well-known/atproto-did did:plc:avzdf5esd7xpbgsgh7lx4kzq #+END_SRC #+REVEAL_HTML:
#+REVEAL_HTML:
** Bluesky Identities 2/4 #+REVEAL_HTML:
#+ATTR_HTML: :width 100% file:structurizr-1-018-BlueskyIdentity-02.png #+REVEAL_HTML:
** Bluesky Identities 3/4 #+REVEAL_HTML:
#+ATTR_HTML: :width 100% file:structurizr-1-019-BlueskyIdentity-03.png #+REVEAL_HTML:
** Bluesky Identities 3/4 #+REVEAL_HTML:
#+ATTR_HTML: :width 100% file:structurizr-1-020-BlueskyIdentity-04.png #+REVEAL_HTML: