1 line
11 KiB
JavaScript
1 line
11 KiB
JavaScript
import{d as a}from"./chunks/git.data.BUKN53Ta.js";import{u as l,c as s,j as e,a as o,k as i,a5 as r,o as n}from"./chunks/framework.BIC8H_hJ.js";const u=e("h1",{class:"p-name"},"Fedi v2",-1),d=["innerHTML"],h=r('<hr><blockquote><p>Referenced by: <a href="/garden/social-media/">Social Media</a>, <a href="/garden/weird/">Weird</a></p></blockquote><p>A placeholder name for a theoretical new federated network that is client-centric, in contrast to the server-centric <a href="/garden/fediverse/">Fediverse</a></p><p>There are further discussions about actually implementing all this within the <a href="/garden/weird/">Weird</a> community</p><h2 id="inspiration" tabindex="-1">Inspiration <a class="header-anchor" href="#inspiration" aria-label="Permalink to "Inspiration""></a></h2><ul><li><a href="https://raphael.lullis.net/a-plan-for-social-media-less-fedi-more-webby/" target="_blank" rel="noreferrer">A Plan for Social Media - Rethinking Federation</a><ul><li>This article doesn't address many implementation details: <ul><li>If the server is a relay, can content not be viewed anonymously?</li><li>How to handle storing large amounts of data on every client?</li><li>Don't you still need to associate with a server for people to direct their messages to?</li></ul></li></ul></li><li><a href="https://mull.net/mastodon" target="_blank" rel="noreferrer">Single-user Mastodon Instance is a Bad Idea</a><ul><li>Focuses on the non-feasibility of self hosting, contributing to <a href="/garden/fediverse/">Federated Social Media</a> not actually having all the upsides it should theoretically have by virtue of being <a href="/garden/decentralized/">Decentralized</a></li></ul></li><li>The <a href="/garden/commune/">Commune</a> community</li><li>Existing protocols: <ul><li><a href="https://nostr.com" target="_blank" rel="noreferrer">Nostr</a><ul><li>Currently suffers a culture problem by being associated with alt right and crypto users, making broad adoption more difficult</li></ul></li><li><a href="https://atproto.com" target="_blank" rel="noreferrer">ATProto</a><ul><li>Focused on a few large instances, to be run by large corporations. Still requires associating your identity with a server you don't own</li></ul></li></ul></li><li>A lot of these ideas are learned lessons from the usenet days</li></ul><h2 id="identity" tabindex="-1">Identity <a class="header-anchor" href="#identity" aria-label="Permalink to "Identity""></a></h2><ul><li><a href="/garden/federated-identity/">Federated Identity</a></li><li>Private and public keys anyone can create and store how they want <ul><li>Fully free to create and store with no server dependencies</li></ul></li><li>Profile information <ul><li>Sent as a signed message through all the relays</li><li>How would you trust a username? <ul><li><a href="https://spritely.institute/static/papers/petnames.html" target="_blank" rel="noreferrer">Petnames</a> could be used to display human readable names via contacts or decentralized "naming hubs"</li><li>In most conversations online, you can trust their display name and add them as a contact as that display name <ul><li>You only need to verify they are the same person you interacted with previously</li><li>You only need to trust people you want to send money to or otherwise "important identities"</li><li>For important identities, you can trust your contacts forming a chain of trust, or a authoritative naming hub <ul><li>E.g. a white house ran naming hub that verifies the identities of the president and people of Congress</li><li>People typically wouldn't reach out to a naming hub, as it's not typically necessary</li></ul></li><li>Contacts supercede naming hubs, so if a naming hub is breached, anyone I've previously added as a contact is still the source of truth <ul><li>This only fails if the private key itself was breached</li></ul></li><li>I'm just thepaperpilot, my display name. For most online communication, this is sufficient <ul><li>My website can have a nameserver saying this publickey is the same as the site owner</li><li>If I write a paper at a scientific journal, they can say the author of x paper is my publickey</li></ul></li></ul></li></ul></li></ul></li><li>How to handle losing your private key <ul><li>If you do have a naming hub you can verify with, they can say the identity has a new publickey</li><li>Contacts can "vouch" for a identity having a new publickey</li><li>Clients can decide to trust the new publickey based on contacts and naming hubs saying to</li><li>Also applies to stolen or compromised keys</li></ul></li></ul><h2 id="servers" tabindex="-1">Servers <a class="header-anchor" href="#servers" aria-label="Permalink to "Servers""></a></h2><ul><li>Act as relays, merely storing messages and sending them to any clients or servers that have subscribed</li><li>May decide to publicly display messages its received <ul><li>These servers are how discovery would work</li><li>Different servers may offer unique displays, filters, etc.</li></ul></li><li>Users can send their content to any server - no authentication or account required, as the identity suffices <ul><li>Even replies can work this way - no need to know from where a given message originated</li></ul></li><li>Private servers could require some password when sending messages or subscribing to things <ul><li>Useful for a school or other entity that wants an internal social network</li></ul></li><li>Different ways to subscribe to a server's messages <ul><li>All messages the relay hears about (new relays essentially subscribe like this to some existing relay)</li><li>All messages from a specific poster ID</li><li>Any replies to a message created with a specific poster ID</li><li>Shallow subscriptions, to lighten the load when subscribing to communities</li></ul></li></ul><h2 id="content" tabindex="-1">Content <a class="header-anchor" href="#content" aria-label="Permalink to "Content""></a></h2><ul><li>Protocol should dictate how to convey text, image, audio, video, and binary content</li><li>Protocol should include reacting to content with arbitrary text, including a URL <ul><li>Upvotes and downvotes are implemented with this system</li></ul></li><li>Each message contains fields for the poster's ID (public key) and a signature that verifies the content was made by that poster <ul><li>That signature serves as an ID for the message itself <ul><li>Anything can be replied to using the ID as the "parent" property in a new post</li></ul></li></ul></li><li>Edits are handled as replies with some flag to indicate it's updating the parent messages' content <ul><li>Naturally, this reply would only be respected if it matches the same creator ID</li><li>Servers should replace the original message entirely with this one and indicate its an edited message <ul><li>Some servers will inevitably keep a full history though</li></ul></li></ul></li><li>Groups/communities are just specially flagged messages <ul><li>Posting to a community is just replying to that message</li><li>Subscribing to a community is just subscribing to that message</li><li>The original message creator effectively owns the group</li></ul></li><li><a href="/garden/the-small-web/">IndieWeb</a> pages could publish these messages as well, effectively serving as clients within the network <ul><li>Perhaps use a bit to actually send those messages to other relays within the network</li></ul></li></ul><h2 id="moderation" tabindex="-1">Moderation <a class="header-anchor" href="#moderation" aria-label="Permalink to "Moderation""></a></h2><ul><li>In general, edits and delete requests are made by replying with a specially flagged message</li><li>Edit and deletion messages are ignored unless they have the correct public key and signature <ul><li>Parent messages form a hierarchy of permission - if someone replies to your message, you can send a delete request for that message</li><li>Relay owners cannot fully delete messages, but can choose to stop relaying replies etc. of messages as the server owner wishes</li></ul></li><li>Posts can be publicly reported with a specially flagged reply <ul><li>How to make anonymous reports?</li></ul></li><li>Users can send deletion or edit messages even without a matching public key, and clients (or relays) can choose to respect those messages if that public key is whitelisted as a moderator <ul><li>Messages (and by extension, groups) can have replies granting or removing permission to other public IDs at that hierarchy level</li><li>People can setup accounts with their desired heuristic for sending delete messages, such as looking at public reports or analyzing the content with AI <ul><li>This way clients can effectively customize their preferred moderation</li></ul></li></ul></li><li>Clients can also choose to add additional rules for hiding content, such as any reports by followed users</li><li>Perhaps delete messages pull double duty as public reports in and of themselves?</li></ul><h2 id="problems-to-solve" tabindex="-1">Problems to solve <a class="header-anchor" href="#problems-to-solve" aria-label="Permalink to "Problems to solve""></a></h2><ul><li>No anonymity <ul><li>All upvotes, downvotes, etc. are linked to your public key</li><li>Perhaps a client could generate new keypairs for every action for anonymity, but then it'd be hard to determine if such an account and action was a genuine user or a bot</li></ul></li><li>Servers could probably determine the identity of clients sending their messages to them <ul><li>A client that only ever sends messages with a specific public key is unlikely to be a server</li><li>A client that doesn't subscribe to all messages is unlikely to be a server</li><li>Perhaps clients and servers can be identified as such, and subscribing to new messages is something you only do to servers, not clients</li></ul></li><li>Illegal material will likely be placed on the hard drive at least temporarily <ul><li>Messages will be downloaded and, even if you follow a moderator bot that looks for illegal material, there's likely to be a delay between receiving the initial message and receiving the bots delete message</li></ul></li><li>You have to download all spam messages <ul><li>For redundancy, you'd likely subscribe to multiple relay servers</li><li>You cannot trust several relay servers to have identical rules on not relaying messages that don't pass whatever moderation heuristic</li><li>Therefore, the filtering out of spam has to be done by the client, after downloading it all</li></ul></li></ul>',16),b=JSON.parse('{"title":"Fedi v2","description":"","frontmatter":{"public":"true","slug":"fedi-v2","title":"Fedi v2","prev":false,"next":false},"headers":[],"relativePath":"garden/fedi-v2/index.md","filePath":"garden/fedi-v2/index.md"}'),c={name:"garden/fedi-v2/index.md"},v=Object.assign(c,{setup(m){const t=l();return(y,p)=>(n(),s("div",null,[u,e("p",null,[o("1274 words, ~7 minute read. "),e("span",{innerHTML:i(a)[`site/${i(t).page.value.relativePath}`]},null,8,d)]),h]))}});export{b as __pageData,v as default};
|