SocialSpec, and why we need it
Lately, I have been thinking a lot about how to build an alternative to today's social networks using technology that is not only free but also much simpler. Recent developments, such as Reddit's decision to shut down its RSS feeds, make this even more urgent. One project I have recently come across is SocialSpec.
I am aware of the Fediverse and the AT Protocol, and they are indeed open. However, hardly anyone has the time or knowledge to run and control their own server. These systems are simply too complex. They are open in theory, but in practice their complexity limits users' freedom.
As of today, I believe the only widespread and truly open systems are email and the web. Running your own email server has become too complex for most people and even for many companies, but there are countless providers offering email hosting. As long as you own your domain, you can easily move your email to another provider.
The same is true for the web. If you own a domain, it doesn't really matter who hosts your website. There are plenty of ways to host a site, some of them free.
In short, DNS is the only proven naming system that lets you stay in control of your online identity.
This is where SocialSpec comes in. It documents conventions that let you find information about a person using only their domain name and the web server running on it. This is much simpler than it sounds: it defines fixed paths where well-known files can be found. Currently, there are four of these conventions:
- Feeds: The user's posts are published in a feed at either /feed.xml (RSS) or /feed.json (JSON Feed).
- Following: A list of all the feeds you follow, published as an OPML file at /.well-known/following.opml.
- About: A short description or bio of the owner, written in Markdown and stored at /.well-known/about.md.
- Contact: A public vCard 3.0 file with the owner's contact details, stored at /.well-known/contact.vcf.
I like the author's approach of not inventing anything new and simply documenting how to use existing formats. This avoids many of the debates that arise whenever a feature requires real design decisions.
That said, I have a few reservations. A feed in Followspec is not necessarily tied to a single person. Think of multi-author feeds or YouTube channels. I see this as a bit of a mismatch in the current specification, although I can't think of a better solution either. Contact is probably the least useful convention at the moment, since very few people will want to publish their full name, email address and phone number for everyone to read.
It also remains to be seen how far the "conventions only" approach can go. Some of the more obvious things needed to reach parity with existing social networks would be:
Discovery: As the spec grows, probing a website for each feature becomes impractical. A discovery mechanism is already being discussed.
Profile images: Perhaps even a profile image feed, like Facebook has.
Public keys: These are a prerequisite for sharing data only with your contacts. For example, contact details could be encrypted so that only people you follow can read them. That is technically possible with asymmetric encryption, but it requires a much more complex design.
Multiple feeds: Many people publish more than one feed.
I have high hopes that SocialSpec will become an important piece of the puzzle in creating a usable, open alternative to social networks. My sites, including twowavesandadot.blog, already support Feeds and AboutSpec, and I am currently evaluating how to integrate SocialSpec into my software projects.