The world needs a distributed social media system, in order to achieve the resilience required in times of turmoil. Social media is a very effective tool for allowing citizens to audit and correct societal issues. The obvious flaws in current social media platforms: exchange privacy for free use, user censorship, single point failure, etc., are driving the use case for developing new social media.
This thread should compile a list of the issues related to making the social media over IPFS use case happen, so that the IPFS team can potentially fold these use cases into the architecture, and so that we can more efficiently define an architecture and get a github project started.
Previous contributors to this subject include @MichaelMure, @musicmatze, @StormFire-Technologi, @rklaehn, @karthik-ir, @MirceaKitsune, @josselinchevalay,
Matthias Beyer (@musicmatze) has given some thought to the issues here and here and locally here
Michael Mure (@MichaelMure) has created Arbore. The Arbore project uses an earlier IPFS release and was last updated in April 2018
Many of the issues have been discussed, and solutions should be defined for all perceived issues, so that the architecture can be defined.
Distributed Social Media Issues
-
Topics (Rooms/Groups) - Allow users to create topics (rooms/groups), users to be able to discover topics, and users to be able to subscribe to and remove themselves from topics. Use ipfs-pubsub-room. Each peer would store all of the data for all of the Topics that it is subscribed to. As the quantity of peers grows for a given Topic, the persistence of the data will improve, and the data will fade from existence based upon peer cache size limitations.
-
Chat (Profile to Profile/Peer to Peer messaging) - Use ipfs-pubsub-room
-
Data Format - Meta-data + User Data in DAG - (From M. Beyer second post)
{
âversionâ: 1,
âpreviousâ: [ âQmâŚ1234567890â ],âprofileâ: [ âQmâŚ098765â, âQmâŚ54312â ],
âpostâ: {
âmimetypeâ: âtext/plainâ,
ânodesâ: [âQmâŚabcâ],
âdateâ: â2018-01-02T03:04:05+0200â,
âreplyâ: ,
},âpublicfollowâ: [ âQmâŚefgâ, âQmâŚhijâ ]
} -
Temporary Federated Component - Temporary federated components could provide an effective way to make peer connections, while not being required once peer connections are established. Use multiple rendezvous servers running something like p2p-websocket-star to allow peers to easily find each other. For resilience, if rendezvous servers get taken down, peers would maintain and disseminate a dynamic list of N rendezvous servers. Once peers find each other, they would minimize use of rendezvous servers. They might ping rendezvous servers periodically to see if their rendezvous server list needs to be updated and if there are any new Topics available for subscription. Rendezvous servers would try to keep track of other rendezvous servers, ranking them so that the top ranked servers would be able to be disseminated to connecting peers. Rendezvous servers would also try to keep track of subscribable Topics, ranking them by frequency of use so that the top ranked Topics would be disseminated to any peers requesting a list of Topics.
-
Linking Posts and Profiles - IPLD Not only linking posts and profiles, but linking posts and multiple objects within a post, such as emoji, URL, text, GIF, image, and any combinations of these objects
-
Multi-Level Replies - pubsub Refer to both first post link and second post link above
-
Multi-Device Support - Publishing Content - Refer to first post link above and second post link below
-
Multi-Device Support - Subscribing - Refer to first post link above and second post link below
-
Deleting Profile Versions - CRDTs in IPLD. Refer to first post link above and to Profile DAG in the second post link below
-
DAG Structure - Refer to Matthias Beyerâs second post
-
Deleting Content - CRDTs in IPLD. Refer to second post link above and the local discussion
-
Forgetting Content - IPLD. Naturally handled by activity and cache size. Refer to second post link above
-
Subscribing Privately - CRDTs cached locally? Refer to second post link above
-
Discovering Content - Discussed in second post link above (Temporary Federated Link helps get started, but maybe peers notify other peers of topics they subscribe to, so that those peers offer new topics to users
-
Ease of Use - The platform would need to be nearly as easy to use as FB, Twitter, or MeWe
-
Storage Incentive Without Storage Charges - The platform would need to be free to use, to allow third world country use. Current social media provide free use (data storage), in exchange for giving up privacy (targeted ads incentive). The new platform would need to have all accounts in a given topic (social media group) be mutually incentivized to store all of the data for the topic, without being burdened to pay for storage to third party IPFS nodes. That means the entire topic is cached by all subscribers to a topic, and no storage charges are exchanged between those topic subscribers.
I have further notes on how to enhance the UI and user experience on a social media platform, which would just be details in the infrastructure, once the basic infrastructure is proven.