<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>2021s on Mika Tuupola</title>
    <link>https://www.appelsiini.net/2021/</link>
    <description>Recent content in 2021s on Mika Tuupola</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 18 Nov 2026 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="https://www.appelsiini.net/2021/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Decentralized Social Media</title>
      <link>https://www.appelsiini.net/2021/decentralized-social-media/</link>
      <pubDate>Thu, 21 Jan 2021 00:05:00 +0200</pubDate>
      
      <guid>https://www.appelsiini.net/2021/decentralized-social-media/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.appelsiini.net/img/2021/american-sector.jpg&#34; alt=&#34;Berlin wall American sector&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;i&gt;Photo by &lt;a href=&#34;https://unsplash.com/@etiennegirardet?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&#34;&gt;Etienne Girardet&lt;/a&gt; on &lt;a href=&#34;https://unsplash.com/s/photos/berlin-wall?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&#34;&gt;Unsplash&lt;/a&gt;&lt;/i&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;This is a post I have started to write several times already. First time 2017, then again in 2019 and 2020. I do not remember what was the drama then. Each time I procrastinated and thought things are not that bad yet.&lt;/p&gt;
&lt;p&gt;Leaving all politics a side, this is not the way the Internet was supposed to be.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;The first truth is that the liberty of a democracy is not safe if the people tolerate the growth of private power to a point where it becomes stronger than their democratic state itself.  That, in its essence, is fascism &amp;ndash; ownership of government by an individual, by a group, or by any other controlling private power.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;—Franklin D. Roosevelt, excerpt from &lt;a href=&#34;https://publicpolicy.pepperdine.edu/academics/research/faculty-research/new-deal/roosevelt-speeches/fr042938.htm&#34;&gt;message to Congress, April 29, 1938&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR: Social media services such as Twitter and Instagram could be recreated with an RSS like file format. No platform needed.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;
&lt;p&gt;Everything is centralized which gives the control of allowed ideas to the owner of the platform. If you deviate from the allowed thinking you will be silenced.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.appelsiini.net/img/2021/jahrestag.jpg&#34; alt=&#34;Berlin wall celebration&#34;&gt;
&lt;i&gt;&lt;small&gt;&lt;a href=&#34;https://commons.wikimedia.org/wiki/File:Bundesarchiv_Bild_183-1986-0813-454,_Berlin,_25._Jahrestag_zur_Errichtung_der_Mauer.jpg&#34;&gt;Bundesarchiv, Bild 183-1986-0813-454 / Franke, Klaus / CC-BY-SA 3.0&lt;/a&gt;, &lt;a href=&#34;https://creativecommons.org/licenses/by-sa/3.0/de/deed.en&#34;&gt;CC BY-SA 3.0 DE&lt;/a&gt;, via Wikimedia Commons&lt;/small&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;There have been attemps to create platforms which allow wider spectrum of opinion. These attempts are usually hindered by companies such as Apple and Google by &lt;a href=&#34;https://nypost.com/2021/01/09/apple-joins-google-in-suspending-parler-from-app-store/&#34;&gt;removing the apps&lt;/a&gt; from their app stores.&lt;/p&gt;
&lt;p&gt;Technically inclined Android users can install apps from alternative sources but even that does not help. If they don&amp;rsquo;t like you, companies such as Visa and Mastercard will not only blacklist the company but also &lt;a href=&#34;https://news.gab.com/2020/06/26/social-credit-score-is-in-america-visa-blacklisted-my-business-and-my-family-for-building-gab/&#34;&gt;the family members&lt;/a&gt; of the founders of the platform in order to stop you get funding for running your app.&lt;/p&gt;
&lt;p&gt;If you are still able to get alternate sources of funding companies such as Amazon &lt;a href=&#34;https://www.bloomberg.com/news/articles/2021-01-09/amazon-worker-group-calls-for-cloud-unit-to-drop-parler&#34;&gt;will stop providing you hosting services&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;the-solution&#34;&gt;The Solution&lt;/h2&gt;
&lt;p&gt;No, the solution is not blockchain blockchain something. The solution is not having a new shiny platform either. Platforms are depedent on all the three things mentioned above.&lt;/p&gt;
&lt;p&gt;Solution is to have an agreed file format and/or protocol for publishing the usual social media things such as posts, likes and reposts. Each user can publish this file anywhere they wish, as long as it is publicly accessible from the Internet.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.appelsiini.net/img/2021/brandenburger.jpg&#34; alt=&#34;Peek through Berlin wall&#34;&gt;
&lt;i&gt;&lt;small&gt;&lt;a href=&#34;https://commons.wikimedia.org/wiki/File:Bundesarchiv_Bild_183-1990-0429-411,_Berlin,_Abriss_der_Mauer_am_Brandenburger_Tor.jpg&#34;&gt;Bundesarchiv, Bild 183-1990-0429-411 / Schindler, Karl-Heinz / CC-BY-SA 3.0&lt;/a&gt;, &lt;a href=&#34;https://creativecommons.org/licenses/by-sa/3.0/de/deed.en&#34;&gt;CC BY-SA 3.0 DE&lt;/a&gt;, via Wikimedia Commons&lt;/small&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Simplest way to publish a feed would be to upload the single feed file to your own webserver. Alternatively it could be a &lt;a href=&#34;https://gist.github.com/&#34;&gt;GitHub Gist&lt;/a&gt; or a &lt;a href=&#34;https://pastebin.com/&#34;&gt;Pastebin paste&lt;/a&gt;. If you are worried about webhost cencorship
&lt;a href=&#34;https://ipfs.io/&#34;&gt;IPFS&lt;/a&gt; might help. People preferring to stay anonymous could use &lt;a href=&#34;https://community.torproject.org/onion-services/&#34;&gt;onion services&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;User who wants to follow you subscribes to the url of your feed with their client software. The client software then periodically checks for updates and renders a timeline view similar as Twitter or Instagram.&lt;/p&gt;
&lt;p&gt;This is same as what &lt;a href=&#34;https://en.wikipedia.org/wiki/RSS&#34;&gt;RSS&lt;/a&gt; was for blogging world. Users decide what they subscribe to and what they see. There are no algorithms doing decisions on users behalf. Publishers can publish on any Internet connected server. Anyone can create a client software.&lt;/p&gt;
&lt;p&gt;There is no single point of failure.&lt;/p&gt;
&lt;h2 id=&#34;the-file-format&#34;&gt;The File Format&lt;/h2&gt;
&lt;p&gt;I have given this some though. This might change when doing an actual implementation. Instead of XML I would use JSON which is lighter to parse. Goal is to be not bloated and easy to implement.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;title&lt;/code&gt; is your displayed username and the &lt;code&gt;description&lt;/code&gt; is the tagline or what Instagram calls a bio.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;url&lt;/code&gt; is an array which contains one or more addresses where the client can access your feed. Only the first one is fetched by default. If the first one cannot be accessed next one in the array will be fetched instead. This is useful if you lose access to your primary feed you will not lose your subscribers.&lt;/p&gt;
&lt;p&gt;Rest of the json contains your posts, reposts and likes.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Mika Tuupola&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Technology guy gone advertising&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.appelsiini.net/social.json&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.org/social.json&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;posts&amp;#34;&lt;/span&gt;: [],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;reposts&amp;#34;&lt;/span&gt;: [],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;likes&amp;#34;&lt;/span&gt;: []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;posts&#34;&gt;Posts&lt;/h3&gt;
&lt;p&gt;Each post consists of an &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;body&lt;/code&gt;, one or more &lt;code&gt;media&lt;/code&gt; files and an optional &lt;code&gt;ref&lt;/code&gt;. The &lt;code&gt;id&lt;/code&gt; should be an instance of &lt;a href=&#34;https://github.com/segmentio/ksuid&#34;&gt;K-Sortable Unique IDentifier&lt;/a&gt;. KSUID was chosen because it has an embedded timestamp so there is no need for a separate timestamp in json data. KSUID can also be naturally sorted by their creation time which simplifies rendering the timeline.&lt;/p&gt;
&lt;p&gt;The post content itself is in plaintext &lt;code&gt;body&lt;/code&gt; property. Clients should be able to parse hashtags in the body. There probably should be some arbitrary character limit to discourage too long post. Maybe 1024 characters?&lt;/p&gt;
&lt;p&gt;User can optionally post one or more images and / or videos in the &lt;code&gt;media&lt;/code&gt; property. To enable single file publishing clients must be able to parse &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs&#34;&gt;data urls&lt;/a&gt;. It is probably good idea to also support traditional urls.&lt;/p&gt;
&lt;p&gt;If the post is a reply &lt;code&gt;ref&lt;/code&gt; should contain the feed &lt;code&gt;url&lt;/code&gt; and the &lt;code&gt;id&lt;/code&gt; of the post being replied to. If post is not a reply &lt;code&gt;ref&lt;/code&gt; should be &lt;code&gt;null&lt;/code&gt;. Depending on settings client can use this to fetch the &lt;code&gt;ref&lt;/code&gt; feed even if user does not currently subscribe to it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;posts&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;p6UEyCc8D8ecLijAI5zVwOTP3D0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Lorem ipsum dolor sit amet. #foo #bar&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;media&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;data:image/png;base64,PAKBjRACCARjPAKBJggg==&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;data:image/png;base64,FCKBjRAKCARjPAKAAgeg==&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ref&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com/social.json#1mr52fioahBqXD7HVgZ4IkKRrUf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0o5Fs0EELR0fUjHjbCnEtdUwQe3&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Ut enim ad minim veniam. #foo&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;media&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com/foo.png&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ref&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;reposts&#34;&gt;Reposts&lt;/h3&gt;
&lt;p&gt;Repost happens when someone posts your post to their followers. Repost consists of &lt;code&gt;id&lt;/code&gt; which is a KSUID and a &lt;code&gt;ref&lt;/code&gt; to the post which is being posted. Thanks to KSUID simply sorting by the id puts the reposts in to correct location in the timeline.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;reposts&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1mr5Btzoz5G9M4Wl5ZZo9K4Y6oQ&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ref&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.org/social.json#1mr5F1roAhBc9YFFftk6WNiZuQP&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1mr5CRWwT8FRHrsq7Lqn3hJ3KV0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ref&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.org/social.json#1mr5HcxkKbNqs9X5oQ0fIfzENqP&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1mr5DK70OQuTUPLvsCML2mkMHdB&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ref&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com/social.json#1mr5InVxCYH0dXSncivI667ESpb&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;likes&#34;&gt;Likes&lt;/h3&gt;
&lt;p&gt;To be honest I am not sure if this is needed. However seeing how popular such a feature is with now, why not. Same as repost, a like consists of &lt;code&gt;id&lt;/code&gt; which is a KSUID and a &lt;code&gt;ref&lt;/code&gt; to the post which is being liked.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;likes&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0uk1Hbc9dQ9pxyTqJ93IUrfhdGq&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ref&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.org/social.json#p6UEyCc8D8ecLijAI5zVwOTP3D0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0uk1HdCJ6hUZKDgcxhpJwUl5ZEI&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ref&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.org/social.json#1mr519x29wy6WAcgAftSb33dEgC&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0uk1HcdvF0p8C20KtTfdRSB9XIm&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ref&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com/social.json#1mr52fioahBqXD7HVgZ4IkKRrUf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0uk1Ha7hGJ1Q9Xbnkt0yZgNwg3g&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ref&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.org/social.json#1mr5448rXkn02LkyFXhOZNaCurh&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;the-problems&#34;&gt;The Problems&lt;/h2&gt;
&lt;h3 id=&#34;discovery&#34;&gt;Discovery&lt;/h3&gt;
&lt;p&gt;Discovery means how can one find new people to subscribe to? I think this problem will fix itself in the same way the Internet has always fixed it. Primary discovery source will be reposts and likes. There will also most likely be people writing &lt;em&gt;&amp;ldquo;Awesome People to Follow&amp;rdquo;&lt;/em&gt; style lists.&lt;/p&gt;
&lt;p&gt;By design clients will index feeds with two degrees of separation. This means if you subscribe to feed &lt;code&gt;A&lt;/code&gt; and that feed has a repost or a like to a feed &lt;code&gt;B&lt;/code&gt; then your client will fully index both feeds &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt; but will not index reposts or likes in feed &lt;code&gt;B&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Clients can optionally have a setting to control the degrees of separation. If user sets this to &lt;code&gt;3&lt;/code&gt; and the feed &lt;code&gt;B&lt;/code&gt; has a repost from feed &lt;code&gt;C&lt;/code&gt; the client software will index  feeds &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;B&lt;/code&gt; and &lt;code&gt;C&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Posts indexed from feeds you do not directly follow can be used for rendering hashtags views and searches. There probably is a practical limit how many dedrees of separation is useful to index.&lt;/p&gt;
&lt;h3 id=&#34;identity&#34;&gt;Identity&lt;/h3&gt;
&lt;p&gt;There is no usernames to reserve. Anyone can post anything under any name. How do people know you are who you are? Blogs have the same problem. Obvious proof of your identity would be your own domain. Maybe something could be done with &lt;a href=&#34;https://gnupg.org/&#34;&gt;PGP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is somehing I do not have a good answer to.  However it is good to remember that even with usernames Twitter et al. have the problem of fake user accounts. In the end in the Internet you never know who the people really are.&lt;/p&gt;
&lt;h3 id=&#34;technical-barrier&#34;&gt;Technical Barrier&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://www.appelsiini.net/img/2021/peek.jpg&#34; alt=&#34;Peek through Berlin wall&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;small&gt;Image by &lt;a href=&#34;https://pixabay.com/users/wal_172619-12138562/?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=4686898&#34;&gt;wal_172619&lt;/a&gt; from &lt;a href=&#34;https://pixabay.com/?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=4686898&#34;&gt;Pixabay&lt;/a&gt;&lt;/small&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Even if not especially high, the technical barrier for uploading the feed file to a webserver is probably too high for 80% of current social media users. The client software should enable uploading the feed file via ftp or scp. There is still problem of setting up the web server.&lt;/p&gt;
&lt;p&gt;In the end there will most likely be multiple companies which offer hosting for the feed file. Same companies might offer their own reader clients. This will contradict with the requirement of not being dependent in a company. It is still better than being dependent on single social media platform though.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>