blueskyArchitecture/BlueskyArchitecture.html

876 lines
32 KiB
HTML
Raw Normal View History

2024-05-20 08:22:33 +00:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>Bluesky Architecture compared to other social media services</title>
<meta name="author" content="Éibhear Ó hAnluain"/>
<meta name="description" content="A discussion of Bluesky's architecture as it relates to other social media services"/>
<meta name="keywords" content=""/>
<style type="text/css">
.underline { text-decoration: underline; }
</style>
2024-05-25 19:28:44 +00:00
<link rel="stylesheet" href="../reveal.js/dist/reveal.css"/>
2024-05-20 08:22:33 +00:00
2024-05-25 19:28:44 +00:00
<link rel="stylesheet" href="../reveal.js/dist/theme/white.css" id="theme"/>
2024-05-20 08:22:33 +00:00
<link rel="stylesheet" href="./e-reveal.css"/>
<link rel="stylesheet" href="./gridding.css"/>
</head>
<body>
<div class="reveal">
<div class="slides">
<section id="sec-title-slide" data-background="./bCardBackground.png"><h1 class="title">Bluesky Architecture compared to other social media services</h1><p class="subtitle"><a href="?print-pdf">Printable version</a></p>
<h2 class="author">Éibhear Ó hAnluain</h2><h2 class="email"><a href="mailto:eibhear.geo@gmail.com">eibhear.geo@gmail.com</a></h2><h2 class="date">2024-05-24 Fri 00:00</h2>
</section>
<section id="sec-table-of-contents" data-background="./bCardBackground.png"><div id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
2024-05-25 19:28:44 +00:00
<li><a href="#/slide-org9ccac15">Introduction</a></li>
<li><a href="#/slide-orgecc07a4">General social media architectures</a></li>
<li><a href="#/slide-org2b980de">Federated social media services</a></li>
<li><a href="#/slide-org1c58401">Bluesky</a></li>
<li><a href="#/slide-org3b3e36e">Bluesky &#x2013; Identities</a></li>
<li><a href="#/slide-org08fb271">Bluesky &#x2013; Composable Feeds</a></li>
<li><a href="#/slide-orgcd374ae">Bluesky &#x2013; The AppView</a></li>
<li><a href="#/slide-org11ff99e">Bluesky &#x2013; The Relay and the PDS</a></li>
<li><a href="#/slide-org2dec4ec">Bluesky &#x2013; Moderation</a></li>
<li><a href="#/slide-orgdc59907">Bluesky</a></li>
<li><a href="#/slide-org8fc9925">Resources and further reading</a></li>
2024-05-20 08:22:33 +00:00
</ul>
</div>
</div>
</section>
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-org9ccac15" data-background="./bCardBackground.png">
<h2 id="org9ccac15">Introduction</h2>
<div class="outline-text-2" id="text-org9ccac15">
2024-05-24 14:05:40 +00:00
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-orgf294eb5" data-background="./bCardBackground.png">
<h3 id="orgf294eb5">Éibhear Ó hAnluain</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-24 14:05:40 +00:00
<ul>
2024-05-24 19:38:02 +00:00
<li class="fragment appear">IT professional since 1994</li>
<li class="fragment appear">IT Architect since 2009</li>
2024-05-24 14:05:40 +00:00
<li class="fragment appear">Interested in and promoting federated social services since 2013-ish
<ul>
2024-05-24 19:38:02 +00:00
<li><a href="https://www.gibiris.org/eo-blog/gibiris-services.html">Implementations</a></li>
<li><a href="https://www.gibiris.org/eo-blog/tags/selfhosting.html">Blog posts</a></li>
<li><a href="https://www.gibiris.org/eo-blog/posts/2019/04/15_harmful-content-consultation.html">Representations</a> to government organisations</li>
2024-05-24 14:05:40 +00:00
</ul></li>
2024-05-24 19:38:02 +00:00
<li class="fragment appear">This presentation uses diagrams created using <a href="https://structurizr.com/">Strucutizr</a>
2024-05-24 14:05:40 +00:00
<ul>
<li><code>autolayout</code> throughout</li>
</ul></li>
</ul>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org28122e7" data-background="./bCardBackground.png">
<h3 id="org28122e7">What is Bluesky</h3>
2024-05-24 14:05:40 +00:00
<div class="e-frame">
<ul>
<li class="fragment appear">A new social media service</li>
2024-05-24 19:38:02 +00:00
<li class="fragment appear"><a href="https://twitter.com/jack/status/1204766078468911106">Initiated</a> by Jack Dorsey when he was CEO of Twitter
2024-05-24 14:05:40 +00:00
<ul>
<li>Vision of a decentralised service</li>
2024-05-24 19:38:02 +00:00
<li>Inspired by Mike Masnick's 2019 "<a href="https://knightcolumbia.org/content/protocols-not-platforms-a-technological-approach-to-free-speech">Protocols, Not Platforms: A
Technological Approach to Free Speech</a>" paper</li>
2024-05-24 14:05:40 +00:00
<li>Plan was for Twitter to move all its users to the new platform
when ready</li>
</ul></li>
2024-05-24 19:38:02 +00:00
<li class="fragment appear"><a href="https://en.wikipedia.org/wiki/Bluesky_(social_network)">Company formed in 2021</a>
2024-05-24 14:05:40 +00:00
<ul>
<li>Seed funding from Twitter</li>
<li>Dorsey on the board</li>
<li>Set up as a public benefit company</li>
</ul></li>
2024-05-24 19:38:02 +00:00
<li class="fragment appear">Privatisation of Twitter in October 2022; Bluesky defunded</li>
<li class="fragment appear">2023, Dorsey deleteds Bluesky account &#x2013; not meeting his vision</li>
<li class="fragment appear">April 2024, Dorsey resigns from Bluesky board.</li>
2024-05-24 14:05:40 +00:00
</ul>
2024-05-20 08:22:33 +00:00
</div>
</section>
</section>
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-orgecc07a4" data-background="./bCardBackground.png">
<h2 id="orgecc07a4">General social media architectures</h2>
<div class="outline-text-2" id="text-orgecc07a4">
2024-05-20 08:22:33 +00:00
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org561c31e" data-background="./bCardBackground.png">
<h3 id="org561c31e">Simplistic view 1/2 &#x2013; overview</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org3650cce" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-001-GenericSocial-01.png" alt="structurizr-1-001-GenericSocial-01.png" width="90%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-orga310422" data-background="./bCardBackground.png">
<h3 id="orga310422">Simplistic view 2/2 &#x2013; services</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns">
2024-05-20 08:22:33 +00:00
2024-05-25 19:28:44 +00:00
<div id="org05cdedb" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-002-GenericSocial-02.png" alt="structurizr-1-002-GenericSocial-02.png" width="40%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
<ul>
<li class="fragment appear">Social media user access the app</li>
<li class="fragment appear">The app interacts with the API</li>
<li class="fragment appear">The API is the gateway for the database of posts, responses, likes, etc.</li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org81c5775" data-background="./bCardBackground.png">
<h3 id="org81c5775">More realistic view 1/4 &#x2013; overview</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org8b9da19" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-003-RealisticSocial-01.png" alt="structurizr-1-003-RealisticSocial-01.png" width="90%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org8c410e9" data-background="./bCardBackground.png">
<h3 id="org8c410e9">More realistic view 2/4 &#x2013; basic services</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns">
2024-05-20 08:22:33 +00:00
2024-05-25 19:28:44 +00:00
<div id="orgb398180" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-004-RealisticSocial-02.png" alt="structurizr-1-004-RealisticSocial-02.png" width="70%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
<ul>
<li class="fragment appear">Social media user access the app</li>
<li class="fragment appear">The app interacts with the API</li>
<li class="fragment appear">The API is the gateway for the database of posts, responses, likes, etc.</li>
<li class="fragment appear">The API also captures data for building profiles of users for targeting purposes</li>
<li class="fragment appear">The algorithmic feed generator guides the API on what posts to place into the app's feed</li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-orge1aa03f" data-background="./bCardBackground.png">
<h3 id="orge1aa03f">More realistic view 3/4 &#x2013; the algorithm</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
2024-05-20 08:22:33 +00:00
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
2024-05-25 19:28:44 +00:00
<div id="org23a679f" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-005-RealisticSocial-03.png" alt="structurizr-1-005-RealisticSocial-03.png" width="70%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
<ul>
<li>Social media user access the app</li>
<li>The app interacts with the API</li>
<li>The API is the gateway for the database of posts, responses, likes, etc.</li>
<li>The API also captures data for building profiles of users for targeting purposes</li>
<li>The algorithmic feed generator guides the API on what posts to place into the app's feed</li>
<li>Algorithmic feeds are created by the service administrator, using an app only <i>they</i> have access to</li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org5b5e0f3" data-background="./bCardBackground.png">
<h3 id="org5b5e0f3">More realistic view 4/4 &#x2013; content moderation</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns">
2024-05-20 08:22:33 +00:00
2024-05-25 19:28:44 +00:00
<div id="org29bbdd9" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-006-RealisticSocial-04.png" alt="structurizr-1-006-RealisticSocial-04.png" width="100%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
<ul>
<li>Social media user access the app</li>
<li>The app interacts with the API</li>
<li>The API is the gateway for the database of posts, responses, likes, etc.</li>
<li>The API also captures data for building profiles of users for targeting purposes</li>
<li>The algorithmic feed generator guides the API on what posts to place into the app's feed</li>
<li>Algorithmic feeds are created by the service administrator, using an app only <i>they</i> have access to</li>
<li>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</li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
</section>
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-org2b980de" data-background="./bCardBackground.png">
<h2 id="org2b980de">Federated social media services</h2>
<div class="outline-text-2" id="text-org2b980de">
2024-05-20 08:22:33 +00:00
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-orga398dbc" data-background="./bCardBackground.png">
<h3 id="orga398dbc">Federated services 1/8 &#x2013; overview</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org4ad1c2c" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-007-FederatedSocial-01.png" alt="structurizr-1-007-FederatedSocial-01.png" width="75%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-orgbec2724" data-background="./bCardBackground.png">
<h3 id="orgbec2724">Federated services 2/8 &#x2013; internal, administration and content moderation services</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
2024-05-20 08:22:33 +00:00
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
2024-05-25 19:28:44 +00:00
<div id="org30fa294" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-008-FederatedSocial-02.png" alt="structurizr-1-008-FederatedSocial-02.png" width="70%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
<ul>
<li class="fragment appear">Same as before, the user access the service through an App that uses an API</li>
<li class="fragment appear">As federated services are small, the administrator and the moderator are the one person</li>
<li class="fragment appear">No algorithmic feeds, though
<ul>
<li>not popular in the fediverse community</li>
<li>difficult to implement in a federated environment.</li>
</ul></li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org06f0adf" data-background="./bCardBackground.png">
<h3 id="org06f0adf">Federated services 3/8 &#x2013; federation 1</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
2024-05-20 08:22:33 +00:00
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns" style="width: 60%">
2024-05-25 19:28:44 +00:00
<div id="orgbc419b6" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-009-FederatedSocial-03.png" alt="structurizr-1-009-FederatedSocial-03.png" width="100%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns" style="width: 40%">
<ul>
<li>Same as before, the user access the service through an App that uses an API</li>
<li>As federated services are small, the administrator and the moderator are the one person</li>
<li>No algorithmic feeds, though
<ul>
<li>not popular in the fediverse community</li>
<li>difficult to implement in a federated environment.</li>
</ul></li>
<li class="fragment appear">Federation service to push activity out to the federated network</li>
<li class="fragment appear">Federation API to take in activity from other nodes</li>
<li class="fragment appear">A logical database of inbound federated posts</li>
<li class="fragment appear">Federation using ActivityPub standard</li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org9eeed58" data-background="./bCardBackground.png">
<h3 id="org9eeed58">Federated services 4/8 &#x2013; federation 2</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="orgaa3a02f" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-010-FederatedSocial-04.png" alt="structurizr-1-010-FederatedSocial-04.png" width="75%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org2c884a1" data-background="./bCardBackground.png">
<h3 id="org2c884a1">Federated services 5/8 &#x2013; federation 3</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org6c07421" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-011-FederatedSocial-05.png" alt="structurizr-1-011-FederatedSocial-05.png" width="75%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-orga02bdaf" data-background="./bCardBackground.png">
<h3 id="orga02bdaf">Federated services 6/8 &#x2013; federation 4</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="orge29a477" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-012-FederatedSocial-06.png" alt="structurizr-1-012-FederatedSocial-06.png" width="75%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org490ac3a" data-background="./bCardBackground.png">
<h3 id="org490ac3a">Federated services 7/8 &#x2013; federation 5</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org59eee6e" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-013-FederatedSocial-07.png" alt="structurizr-1-013-FederatedSocial-07.png" width="75%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-orgab66133" data-background="./bCardBackground.png">
<h3 id="orgab66133">Federated services 8/8 &#x2013; federation 6</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org78782bf" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-014-FederatedSocial-08.png" alt="structurizr-1-014-FederatedSocial-08.png" width="75%" />
</p>
</div>
</div>
</section>
</section>
2024-05-20 13:10:29 +00:00
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-org1c58401" data-background="./bCardBackground.png">
<h2 id="org1c58401">Bluesky</h2>
<div class="outline-text-2" id="text-org1c58401">
2024-05-20 13:10:29 +00:00
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org4dad692" data-background="./bCardBackground.png">
<h3 id="org4dad692">Basic Bluesky 1/2</h3>
2024-05-20 13:10:29 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org4f17692" class="figure">
2024-05-20 13:10:29 +00:00
<p><img src="structurizr-1-015-BlueskyBasic-01.png" alt="structurizr-1-015-BlueskyBasic-01.png" width="100%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org28d95b1" data-background="./bCardBackground.png">
<h3 id="org28d95b1">Basic Bluesky 2/2</h3>
2024-05-20 13:10:29 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 70%">
2024-05-25 19:28:44 +00:00
<div id="org88f86d8" class="figure">
2024-05-20 13:10:29 +00:00
<p><img src="structurizr-1-016-BlueskyBasic-02.png" alt="structurizr-1-016-BlueskyBasic-02.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 30%">
<ul>
2024-05-20 15:43:17 +00:00
<li class="fragment appear">User interfaces with a client hosted by the <i>AppView</i></li>
<li class="fragment appear">The <i>AppView</i> includes an API (allowing for 3rd-party and bot-like clients)</li>
2024-05-20 13:10:29 +00:00
<li class="fragment appear">The <i>AppView</i> stores and reads data from the <i>Personal Data Server</i> (PDS)</li>
<li class="fragment appear">Bluesky resolved user identities using "DIDs" (Distributed IDs)</li>
<li class="fragment appear">The Bluesky admin uses a separate service for preparing algorithmic feeds</li>
<li class="fragment appear">The Bluesky moderator applies labels and actions to posts for trust and safety through a dedicated service</li>
2024-05-24 14:05:40 +00:00
<li class="fragment appear">All implemented using a new social protocol call "The AT Protocol", or <i>@proto</i>.</li>
2024-05-20 13:10:29 +00:00
</ul>
</div>
</div>
</section>
</section>
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-org3b3e36e" data-background="./bCardBackground.png">
<h2 id="org3b3e36e">Bluesky &#x2013; Identities</h2>
<div class="outline-text-2" id="text-org3b3e36e">
2024-05-20 13:10:29 +00:00
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org54b695f" data-background="./bCardBackground.png">
<h3 id="org54b695f">Bluesky Identities 1/4</h3>
2024-05-20 13:10:29 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 35%">
2024-05-25 19:28:44 +00:00
<div id="org34ac80b" class="figure">
2024-05-20 13:10:29 +00:00
<p><img src="structurizr-1-017-BlueskyIdentity-01.png" alt="structurizr-1-017-BlueskyIdentity-01.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 65%">
<ul>
<li class="fragment appear">User's typical Bluesky ID is <code>@&lt;user-handle&gt;.bsky.social</code>
<ul>
<li>e.g. <code>@theauldsthretch.bsky.social</code></li>
</ul></li>
<li class="fragment appear">Users can set up their own handle, <code>@&lt;user-handle&gt;.&lt;domain&gt;</code>. E.g. (and these are all real IDs) &#x2026;
<ul>
<li><code>@astrokatie.com</code> &#x2013; a cosmologist</li>
<li><code>@eibhear.gibiris.org</code> &#x2013; the author</li>
<li><code>@wyden.senate.gov</code> &#x2013; a U.S. Senator</li>
</ul></li>
<li class="fragment appear">User must control the domain or be a legitimate member of the domain's community</li>
<li class="fragment appear"><p>
Domain-based handle resolves to a DID, either by DNS or <code>.well-known</code>:
</p>
<div class="org-src-container">
<pre class="src src-shell" ><code trim>$ dig _atproto.eibhear.gibiris.org TXT
...
;; ANSWER SECTION:
2024-05-25 19:28:44 +00:00
_atproto.eibhear.gibiris.org. 3600 IN TXT <span style="color: #ffa07a;">"did=did:plc:23mysztmt7dh3l5lzhinzafi"</span>
2024-05-20 13:10:29 +00:00
$ curl https://theauldsthretch.bsky.social/.well-known/atproto-did
did:plc:avzdf5esd7xpbgsgh7lx4kzq
</code></pre>
</div></li>
</ul>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-orga7295f1" data-background="./bCardBackground.png">
<h3 id="orga7295f1">Bluesky Identities 2/4</h3>
2024-05-20 13:10:29 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org1998a63" class="figure">
2024-05-20 13:10:29 +00:00
<p><img src="structurizr-1-018-BlueskyIdentity-02.png" alt="structurizr-1-018-BlueskyIdentity-02.png" width="100%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-orgc5df1be" data-background="./bCardBackground.png">
<h3 id="orgc5df1be">Bluesky Identities 3/4</h3>
2024-05-20 13:10:29 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org66ca3bd" class="figure">
2024-05-20 13:10:29 +00:00
<p><img src="structurizr-1-019-BlueskyIdentity-03.png" alt="structurizr-1-019-BlueskyIdentity-03.png" width="100%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org2c0008d" data-background="./bCardBackground.png">
<h3 id="org2c0008d">Bluesky Identities 4/4</h3>
2024-05-20 13:10:29 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org533df2a" class="figure">
2024-05-20 13:10:29 +00:00
<p><img src="structurizr-1-020-BlueskyIdentity-04.png" alt="structurizr-1-020-BlueskyIdentity-04.png" width="100%" />
</p>
</div>
</div>
</section>
</section>
2024-05-20 14:53:31 +00:00
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-org08fb271" data-background="./bCardBackground.png">
<h2 id="org08fb271">Bluesky &#x2013; Composable Feeds</h2>
<div class="outline-text-2" id="text-org08fb271">
2024-05-20 14:53:31 +00:00
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org3a41380" data-background="./bCardBackground.png">
<h3 id="org3a41380">Bluesky Composable Feeds 1/3</h3>
2024-05-20 14:53:31 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 70%">
2024-05-25 19:28:44 +00:00
<div id="orgefa6bb4" class="figure">
2024-05-20 14:53:31 +00:00
<p><img src="structurizr-1-021-BlueskyFeeds-01.png" alt="structurizr-1-021-BlueskyFeeds-01.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 30%">
<ul>
<li class="fragment appear">Algorithmic feeds use an API</li>
<li class="fragment appear">Allows for independent feeds to be created by 3rd parties</li>
<li class="fragment appear">Users' default feed is <i>Following</i>:
<ul>
<li>A chronological feed of posts from those you follow</li>
</ul></li>
<li class="fragment appear">Users subscribe to other feeds. Examples:
<ul>
<li><i>Discover</i> &#x2013; posts that you may be interested in</li>
<li><i>Astronomy</i> &#x2013; Posts relating to astronomy</li>
<li><i>Quiet Posters</i> &#x2013; those you follow but who don't post very often</li>
</ul></li>
<li class="fragment appear">The <i>AppView</i> will read data from the independent feeds</li>
<li class="fragment appear">The feeds get relevant posts from the PDS</li>
</ul>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org8b76c2d" data-background="./bCardBackground.png">
<h3 id="org8b76c2d">Bluesky Composable Feeds 2/3 &#x2013; feeds as a separate application type</h3>
2024-05-20 14:53:31 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org40b6633" class="figure">
2024-05-20 14:53:31 +00:00
<p><img src="structurizr-1-023-BlueskyFeeds-03.png" alt="structurizr-1-023-BlueskyFeeds-03.png" width="100%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org8c023dc" data-background="./bCardBackground.png">
<h3 id="org8c023dc">Bluesky Composable Feeds 3/3 &#x2013; Generic feeds</h3>
2024-05-20 14:53:31 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org9113ddd" class="figure">
2024-05-20 14:53:31 +00:00
<p><img src="structurizr-1-024-BlueskyFeeds-04.png" alt="structurizr-1-024-BlueskyFeeds-04.png" width="100%" />
</p>
</div>
</div>
</section>
</section>
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-orgcd374ae" data-background="./bCardBackground.png">
<h2 id="orgcd374ae">Bluesky &#x2013; The AppView</h2>
<div class="outline-text-2" id="text-orgcd374ae">
2024-05-20 14:53:31 +00:00
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org9fb3197" data-background="./bCardBackground.png">
<h3 id="org9fb3197">Bluesky AppView 1/3</h3>
2024-05-20 14:53:31 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 60%">
2024-05-25 19:28:44 +00:00
<div id="org515eb99" class="figure">
2024-05-20 14:53:31 +00:00
<p><img src="structurizr-1-025-BlueskyAppView-01.png" alt="structurizr-1-025-BlueskyAppView-01.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 40%">
<ul>
<li class="fragment appear">The main application users interact with the <i>AppView</i>.</li>
<li class="fragment appear">The <i>AppView</i> consists of the application (web, mobile, etc.) and the API
<ul>
2024-05-20 15:43:17 +00:00
<li>3rd-party clients (web, mobile, bots) can be created</li>
2024-05-20 14:53:31 +00:00
</ul></li>
2024-05-20 15:43:17 +00:00
<li class="fragment appear">The client is only a part of the <i>AppView</i></li>
<li class="fragment appear">The <i>AppView</i> implements the <i>lexicon</i> of the service
2024-05-20 14:53:31 +00:00
<ul>
<li>Converts the <i>data</i> in the PDS into the social media <i>information</i></li>
</ul></li>
2024-05-20 15:43:17 +00:00
<li class="fragment appear">Now implemented by Bluesky as a separate service</li>
<li class="fragment appear"><i>AppView</i> reads from the feeds services, the moderation services and the PDS itelf</li>
2024-05-20 14:53:31 +00:00
<li class="fragment appear"><i>AppView</i> writes new posts, reposts, likes, replies, etc. to the PDS</li>
</ul>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org0992db0" data-background="./bCardBackground.png">
<h3 id="org0992db0">Bluesky AppView 2/3 &#x2013; A 3rd-party independent AppView</h3>
2024-05-20 14:53:31 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 60%">
2024-05-25 19:28:44 +00:00
<div id="org7b9997d" class="figure">
2024-05-20 14:53:31 +00:00
<p><img src="structurizr-1-027-BlueskyAppView-03.png" alt="structurizr-1-027-BlueskyAppView-03.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 40%">
<ul>
<li>The main application users interact with the <i>AppView</i>.</li>
<li>The <i>AppView</i> consists of the application (web, mobile, etc.) and the API
<ul>
2024-05-20 15:43:17 +00:00
<li>3rd-party clients (web, mobile, bots) can be created</li>
2024-05-20 14:53:31 +00:00
</ul></li>
2024-05-20 15:43:17 +00:00
<li>The client is only a part of the <i>AppView</i></li>
<li>The <i>AppView</i> implements the <i>lexicon</i> of the service
2024-05-20 14:53:31 +00:00
<ul>
<li>Converts the <i>data</i> in the PDS into the social media <i>information</i></li>
</ul></li>
2024-05-20 15:43:17 +00:00
<li>Now implemented by Bluesky as a separate service</li>
<li><i>AppView</i> reads from the feeds services, the moderation services and the PDS itelf</li>
<li><i>AppView</i> writes new posts, reposts, likes, replies, etc. to the PDS</li>
<li class="fragment appear">Third parties can also develop separate <i>AppViews</i> (the client and APIs) &#x2026;
2024-05-20 14:53:31 +00:00
<ul>
<li>Alternatives to Bluesky's own <i>AppView</i></li>
<li>Implement a new <i>lexicon</i> for, say, video sharing, long-form posts, etc.</li>
</ul></li>
</ul>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org399c6de" data-background="./bCardBackground.png">
<h3 id="org399c6de">Bluesky AppView 3/3 &#x2013; Generic AppView</h3>
2024-05-20 14:53:31 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="orgfc397a7" class="figure">
2024-05-20 14:53:31 +00:00
<p><img src="structurizr-1-028-BlueskyAppView-04.png" alt="structurizr-1-028-BlueskyAppView-04.png" width="70%" />
</p>
</div>
</div>
</section>
</section>
2024-05-20 15:43:17 +00:00
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-org11ff99e" data-background="./bCardBackground.png">
<h2 id="org11ff99e">Bluesky &#x2013; The Relay and the PDS</h2>
<div class="outline-text-2" id="text-org11ff99e">
2024-05-20 15:43:17 +00:00
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org897fac7" data-background="./bCardBackground.png">
<h3 id="org897fac7">Bluesky Relay 1/2 &#x2013; 1 PDS into many</h3>
2024-05-20 15:43:17 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 70%">
2024-05-25 19:28:44 +00:00
<div id="org03c7907" class="figure">
2024-05-20 15:43:17 +00:00
<p><img src="structurizr-1-029-BlueskyRelay-01.png" alt="structurizr-1-029-BlueskyRelay-01.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 30%">
<ul>
<li class="fragment appear">Initially, Bluesky had just 1 PDS</li>
<li class="fragment appear">Separated out into multiple PDSs for performance reasons</li>
</ul>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-orgce2dfdf" data-background="./bCardBackground.png">
<h3 id="orgce2dfdf">Bluesky Relay 2/2 &#x2013; Relay, as a proxy to the PDSes</h3>
2024-05-20 15:43:17 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 70%">
2024-05-25 19:28:44 +00:00
<div id="org46c6eac" class="figure">
2024-05-20 15:43:17 +00:00
<p><img src="structurizr-1-030-BlueskyRelay-02.png" alt="structurizr-1-030-BlueskyRelay-02.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 30%">
<ul>
<li>Initially, Bluesky had just 1 PDS</li>
<li>Separated out into multiple PDSs for performance reasons</li>
<li class="fragment appear">Interfaces for reading PDSs now proxied through <i>the Relay</i></li>
<li class="fragment appear">The Relay stores metadata and indexes/indices of posts</li>
<li class="fragment appear">All information about posts are read from the Relay
<ul>
<li>the <i>AppView</i></li>
<li>algorithmic feeds services</li>
<li>moderation</li>
</ul></li>
<li class="fragment appear"><i>AppView</i> still writes to the PDS (new posts, etc.)</li>
<li class="fragment appear">With <i>the Relay</i>, we can now have <b>independent, self-hosted, PDSs</b>.</li>
</ul>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org9b06846" data-background="./bCardBackground.png">
<h3 id="org9b06846">Bluesky PDS 1/3 &#x2013; An independent PDS: "federation" of a sort</h3>
2024-05-20 15:43:17 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="orgbaafeca" class="figure">
2024-05-20 15:43:17 +00:00
<p><img src="structurizr-1-032-BlueskyPDS-01.png" alt="structurizr-1-032-BlueskyPDS-01.png" width="90%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org98204cf" data-background="./bCardBackground.png">
<h3 id="org98204cf">Bluesky PDS 2/3 &#x2013; An independent PDS: "federation" of a sort</h3>
2024-05-20 15:43:17 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org7ced10c" class="figure">
2024-05-20 15:43:17 +00:00
<p><img src="structurizr-1-034-BlueskyPDS-03.png" alt="structurizr-1-034-BlueskyPDS-03.png" width="90%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org97b3d45" data-background="./bCardBackground.png">
<h3 id="org97b3d45">Bluesky PDS 3/3 &#x2013; PDS: "federation" of a sort</h3>
2024-05-20 15:43:17 +00:00
<div class="e-frame">
2024-05-25 19:28:44 +00:00
<div id="org9b4c327" class="figure">
2024-05-20 15:43:17 +00:00
<p><img src="structurizr-1-035-BlueskyPDS-04.png" alt="structurizr-1-035-BlueskyPDS-04.png" width="80%" />
</p>
</div>
</div>
</section>
</section>
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-org2dec4ec" data-background="./bCardBackground.png">
<h2 id="org2dec4ec">Bluesky &#x2013; Moderation</h2>
<div class="outline-text-2" id="text-org2dec4ec">
2024-05-20 15:43:17 +00:00
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org18fcb5e" data-background="./bCardBackground.png">
<h3 id="org18fcb5e">Bluesky Moderation 1/2</h3>
2024-05-20 15:43:17 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 70%">
2024-05-25 19:28:44 +00:00
<div id="orgbb030f9" class="figure">
2024-05-20 15:43:17 +00:00
<p><img src="structurizr-1-036-BlueskyModeration-01.png" alt="structurizr-1-036-BlueskyModeration-01.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 30%">
<ul>
<li class="fragment appear">Moderation separated out as a distinct service</li>
<li class="fragment appear">Moderation tooling reads from the Relay</li>
<li class="fragment appear">Bluesky maintains and operates the top-level moderation
<ul>
<li>Suppresses the really bad stuff, like illegal and abusive material</li>
<li>and really, really, <i>really</i> bad stuff like copyright infringement<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup></li>
</ul></li>
<li class="fragment appear">But separate moderation services can be implemented by 3rd parties</li>
</ul>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org76eea11" data-background="./bCardBackground.png">
<h3 id="org76eea11">Bluesky Moderation 2/2 &#x2013; A 3rd-party independent Moderation service</h3>
2024-05-20 15:43:17 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 70%">
2024-05-25 19:28:44 +00:00
<div id="orga3fb7e8" class="figure">
2024-05-20 15:43:17 +00:00
<p><img src="structurizr-1-038-BlueskyModeration-03.png" alt="structurizr-1-038-BlueskyModeration-03.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 30%">
<ul>
<li>Moderation separated out as a distinct service</li>
<li>Moderation tooling reads from the Relay</li>
<li>Bluesky maintains and operates the top-level moderation
<ul>
<li>Suppresses the really bad stuff, like illegal and abusive material</li>
<li>and really, really, <i>really</i> bad stuff like copyright infringement</li>
</ul></li>
<li>But separate moderation services can be implemented by 3rd parties</li>
<li class="fragment appear">User subscribes to moderation service</li>
<li class="fragment appear">Users' feeds have material removed or elided by the moderation service</li>
<li class="fragment appear">User can't unsubscribe from Bluesky's moderation</li>
</ul>
</div>
</div>
</section>
</section>
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-orgdc59907" data-background="./bCardBackground.png">
<h2 id="orgdc59907">Bluesky</h2>
<div class="outline-text-2" id="text-orgdc59907">
2024-05-20 15:43:17 +00:00
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org9e351b5" data-background="./bCardBackground.png">
<h3 id="org9e351b5">Bluesky &#x2013; Current architecture</h3>
2024-05-20 15:43:17 +00:00
<div class="gridded_frame_with_columns e-frame">
2024-05-25 19:28:44 +00:00
<div id="org3936a39" class="figure">
2024-05-20 15:43:17 +00:00
<p><img src="structurizr-1-038-BlueskyModeration-03.png" alt="structurizr-1-038-BlueskyModeration-03.png" width="100%" />
</p>
</div>
</div>
</section>
2024-05-25 19:28:44 +00:00
<section id="slide-org0002bbf" data-background="./bCardBackground.png">
<h3 id="org0002bbf">Bluesky &#x2013; Roadmap</h3>
2024-05-20 15:43:17 +00:00
<div class="e-frame">
<p>
Planned for 2024
</p>
<ul>
<li class="fragment appear">Private/Direct messages (DMs)
<ul>
<li>E2E Encrypted</li>
<li>1:1 initially, but group DMs planned</li>
</ul></li>
<li class="fragment appear">Video sharing
<ul>
<li>short clips, 90s or so.</li>
</ul></li>
<li class="fragment appear">Improved custom feeds</li>
<li class="fragment appear">Improved anti-harassment</li>
<li class="fragment appear">OAuth &#x2013; for allowing 3rd-party clients to authenticate without
an application password</li>
</ul>
</div>
</section>
</section>
2024-05-24 14:05:40 +00:00
<section>
2024-05-25 19:28:44 +00:00
<section id="slide-org8fc9925" data-background="./bCardBackground.png">
<h2 id="org8fc9925">Resources and further reading</h2>
2024-05-24 19:38:02 +00:00
<div class="e-frame">
<ul>
<li>Original <a href="https://knightcolumbia.org/content/protocols-not-platforms-a-technological-approach-to-free-speech"><i>Protocols, Not Platforms: A Technological Approach to Free Speech</i></a> paper</li>
<li><a href="https://bsky.social/about">Bluesky main page</a></li>
<li>The <a href="https://atproto.com/">ATProtocol specification</a></li>
<li>Bluesky <a href="https://docs.bsky.app/">documentation and blogs</a></li>
<li>Bluesky's <a href="https://github.com/bluesky-social">github</a>:
<ul>
<li>The <a href="https://github.com/bluesky-social/atproto"><code>atproto</code></a></li>
<li><a href="https://github.com/bluesky-social/ozone">Ozone</a>, stackable content moderation tooling.</li>
<li>Self-hosting a <a href="https://github.com/bluesky-social/pds">PDS</a>.</li>
</ul></li>
<li><a href="https://docs.bsky.app/showcase">Community</a> (i.e. not governed by the Bluesky company) projects (tools, apps, bots, etc.)</li>
<li>Original <a href="https://git.gibiris.org/eibhearPublic/blueskyArchitecture">source for this presentation</a>
<ul>
<li>Structurizr <a href="https://git.gibiris.org/eibhearPublic/blueskyArchitecture/src/branch/main/Bluesky.dsl">DSL file</a></li>
</ul></li>
</ul>
</div>
2024-05-24 14:05:40 +00:00
</section>
</section>
2024-05-20 08:22:33 +00:00
</div>
</div>
2024-05-25 19:28:44 +00:00
<script src="../reveal.js/dist/reveal.js"></script>
<script src="../reveal.js/plugin/markdown/markdown.js"></script>
<script src="../reveal.js/plugin/zoom/zoom.js"></script>
<script src="../reveal.js/plugin/notes/notes.js"></script>
2024-05-20 08:22:33 +00:00
<script>
// Full list of configuration options available here:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
plugins: [RevealMarkdown, RevealZoom, RevealNotes],
transition:'none', margin: 0.1, slideNumber:true
});
</script>
</body>
</html>