My book! paperback (Amzn)ebook (Gumroad)

Skip down to the plugin requirements section

We are deeply upset at Twitter, Facebook, YouTube, and all the rest. Blocking President Trump from these giant corporate networks was just the last straw. Most of us already loathed these corporations for their violations of our basic digital rights (laid out here: Declaration of Digital Independence), but this?

This crosses the line.

For many of us, banning Trump (and many of his defenders) means we refuse to participate on their networks anymore. We’re running for the exits. We have to replace them now.

It’s urgent.

Background

There’s a problem with the alternatives. The problem of course, is that there are a lot of them, and more arriving all the time. You might think, “Sure, and one will eventually win out. So let’s just move out and may the best platform win.” This is a mistake. Look, think about what gave the Facebooks of the world their power. It was precisely the fact that people went to the biggest platform…because that’s where the biggest group of friends, or the biggest audience, or whatever, would be. They seemed OK because they talked a lot about how they stood for free speech. They didn’t mean it. And here we are.

Genuinely decentralized networks can’t by censored. Here’s how the Internet used to work until 2005-ish: you wanted to connect to a network like email, or the WWW (Web sites), Usenet, or FTP, or whatever. So, first, you downloaded a client, a piece of software that connects you to that network. The client speaks to the network through a special technical protocols. Nobody is in charge of the whole network. There is an organization that defines the protocol, sure, but they don’t rule the network. The network has no leader, no center.

The Internet still works that way in parts. We still use browsers to connect to the web; we can still use email clients to connect to email. But today, instead of a client using technical protocols to connect people together for microposting, everyone uses Twitter. Instead of a client running social media protocols, people use Facebook. And so forth. Websites that run their own proprietary networks are “platforms.” And you can be shut out of these platforms. This gives Twitter and Facebook massive power. They run what always should have been a neutral network. Absolutely nobody deserves that much power!

Questions and answers

So why replace censorious platforms with…new platforms? Why not replace them with good old-fashioned neutral, decentralized networks? There should be a microposting network, and a video network, and an image network, and a social media (Facebook-style) network. I would also add: an encyclopedia network.

Decentralization”…I’ve heard of that. This is just blockchain, right? Not necessarily. That’s what the blockchain crowd wants you to think, but blockchains are just one kind of decentralization. The problem with blockchains is that they mostly incorporate coins, which means whether content gets into them can usually be determined, in one way or another, by who owns some coins. That means that “whales,” or people with a lot of coins, can control the network. That’s not decentralized. That centralizes power in the hands of a few individuals. The whole idea of decentralization is to eliminate any control of the network.

What’s wrong with just using Parler and Rumble, again? If you’re still asking that, then you missed the point earlier. This is important: we should never trust proprietary platforms again. If Parler and Rumble become the new Twitter and YouTube, it doesn’t matter what they say about how open they are, or how committed they are to freedom of speech. You simply have to trust them. That is what got us into this mess in the first place, back in 2005. Let’s not repeat the mistake.

So…what do we do? Here’s the deal. A lot of people are now working on this problem. Massive amounts of money are going to be thrown at it. I’ve spoken to at least three billionaires in the last 24 hours about this stuff, and they’re all motivated to open their pocketbooks. And that’s all in addition to the existing networks, some of which are growing very fast. So if you ask, “What should we do?” my response is: “You mean, in addition to all these other things, that other people are doing?”

What do you want to do? Quite a few people have been asking me this, and generally, I point them to things I’ve written before, such as this, this, and this. Those document lay out some of the requirements and principles behind a properly decentralized social media network, one that preserves freedom in the way the rest of the Internet does (well—I fear we’ll soon be seeing just how well it stands up to concerted attack).

Naturally, most people with money look at censorship on the march as a big money-making opportunity. I look at it as an existential threat to my country and a brutal attack on my principles. I have never been involved in Internet projects for money alone; I always just wanted to do the right thing in the right way, money be damned.

Wait, so what is “the wrong thing” that people are doing? There are several things:

  • Blockchain: Some startups aren’t even seriously trying to be a good decentralized, free speech social network. A lot of blockchain “social media” projects are sold as “decentralized” (because they’re on a blockchain! That makes them decentralized, man!), but they aren’t really decentralized, because a few people are in control of the chain, there’s one client (a website and/or app), and basically it works like a regular website…built on a blockchain. Who cares? Minds.com is probably the closest we have to a fairly successful and growing site that is committed to free speech and open source, which does use blockchain; but I don’t think it’s quite fully decentralized yet.
  • Conservative social media: Some startups are devoted to free speech, but not decentralization. This is true of Parler and Rumble. They’re OK. But they’re platforms. They can and probably will eventually be compromised. We want to solve the problem, not just kick the can down the road. See “What’s wrong with just using Parler and Rumble, again?” above.
  • Federated networks: Some projects are pretty good at decentralization, but they are hard to use, or aren’t so keen on free speech. This is true of the Fediverse, meaning the projects built using the ActivityPub protocol, such as Mastodon, and also true of Diaspora. When Gab switched to ActivityPub, Mastodon and many others blocked them. This goes to show you that what we really need is not a federated network, but a genuine P2P network, so I can connect to the network to my own little client (which might be a website only I use, or a client app). There is also a big problem on some of these sorts of projects with child pornography and Nazis (or people impersonating them, which I personally think is just as likely). The latter has actually been Gab’s big problem.
  • Totally peer-to-peer networks: There is one small, hard-to-use app, Scuttlebutt, that is totally decentralized. There are others, and I’d like to know about them, but they seem to be small in adoption and in a very early stage of development (so, hard to use and not very good yet).

Can you just summarize what you want? Sure. I explained it before, but let me explain it again in another way. It isn’t that complicated:

  1. Client: I want an easy-to-use, well-designed, fast, modern client. Not an account on a website. No. A client. Not a website on which I make an account. The client could take the form of a browser plugin, a WordPress plugin, a stand-alone website, a hosted solution (where you save your own space, like on WordPress.com), a mobile client app, or even a desktop app.
  2. Similar UX to Twitter: The client allows me to publish to the network and view posts from the network. In other words, my experience as I use the client will be similar to my experience on Twitter: I can follow people, view my feed, like and share posts, etc.
  3. Direct or transparent connections to people: The client basically connects me to…other people. Or to their clients. Possibly with an aggregator intermediary, which stays out of the way. There is nobody who owns the whole network or has any special financial interest in the network. I am connected to people, not accounts on a website. It’s like email: I have a bunch of family, friends, and colleagues, and I have their email addresses, and I see the stuff they send me. Similarly, an unbranded social media network would let me specify the people I follow, and it goes and grabs their posts for me (somehow; see next point) and shows them to me all in a feed. Great.
  4. Aggregator: There are various different aggregators that prepare our feeds for us. If you’re following a thousand people, or if you have a million people following you, your client cannot by itself easily fetch, or send, all the necessary updates regularly for that many people. This is purely technical work that needs to be done as a service for you. So maybe you subscribe to a service. Maybe your university or corporation or ISP runs one. Maybe you just connect to one. It might cost a few dollars a month. It would be money well spent.

Here is the idea that inspires me, that I want to shout out to the world:

If you already have a standardized place—your blog or web space—then isn’t that where you should be able to do your microposting? After all, you should own your own data; so why not there? There’s no better place.

And then it is just a matter of figuring out how to syndicate it and display it in feeds of followers. Just using RSS to begin with would be absolutely fine. Then gradually add support for the other features such as sharing, upvoting, and threading, which Twitter offers, perhaps via a more strictly P2P extension of ActivityPub.

Requirements for a microblogging plugin

I’ve been in discussions with one particular investor and philanthropist, Futo.org, who wants to fund one or more OSS projects that will do 1-4 from the latter list. Basically, he’s willing to put up money for an open source client and also behind an open source aggregator service.

Something like $5,000 for the following is proposed. We’d like to hear from you first, about whether this is fair or not. Let’s talk before you start work. We want it to be very, very solid, beautifully designed, well-documented, easily maintainable, and 100% bug-free.

Let’s begin very simple, with a bare-bones microblogging plugin. And while it will be very simple, it will be 100% modern and awesome, with all the UX features users would expect.

Basic requirements:

  1. We want to build a (to begin with) simple WordPress plugin. It would be acceptable to fork the existing “Simple Microblogging” plugin, although that needs a lot of work.
  2. You must agree to release the code as open source only. Upload the repo to Gitlab, please. The KSF can hold the code, or you can.
  3. The “new micropost” and the “author’s micropost archive” are both on the same page. They occupy a single column, as for example Twitter and Minds do. There is a clear visual distinction between the form for creating a new micropost and the list of old microposts, beneath the form.
  4. Let the blog’s admins create microposts in an easy-to-use interface:
    • For admins only, the new micropost form appears at the top of the page, always open, i.e., never collapsed (as on Twitter). No other user roles see this.
    • Micropost text should be autosaved in the background (i.e., without the user having to do anything), and not in cookies but in the database.
    • When the micropost is submitted, it immediately (without page refresh) appears beneath the new post field.
    • Micropost character limit = 280. Include a nice, standard sort of interface for showing when the user is getting close to 0 characters, including a count of number of characters left.
    • On loading or refresh, the focus/cursor goes inside the form, at the end of any present text. Enter = submit. Submit button available too, same action.
    • Small button for attaching images and video is just below the field. It calls the same WordPress “Select or Upload Media” interface, I guess (seems right).
    • After selecting media, they appear just below the new post box, in a preview.
    • Note: microposts don’t have titles.
  5. The rest of the page is devoted to displaying the author’s older microposts:
    • In this version, the following, older microposts are just those by the author (the author’s history). In the next versions, by micropost feeds followed.
    • Published micropost content design elements should include: small thumbnail of any media, linked user ID, micropost content, timestamp.
    • Each should appear in, or surrounded by, a box.
    • Single images and video thumbnails should appear in smallish thumbnail versions, not terribly full-sized versions, always landscaped. We want this looking like Twitter, not Instagram.
    • If there are two or more images, display the first two side-by-side. If this takes time, take the time to do it right. In a visual medium like this, it is important.
    • Clicking an image displays it in its own modal.
    • A like button (design as you wish, but something with an unsurprising, standard look and feel). Increments a local counter, that’s all. Either on or off for each user session. Don’t bother matching votes to users (or, not yet; we might later; this button is mostly experimental, so don’t take a long time on it without consulting with me).
    • Small delete button in a not-too-prominent place and color (don’t want it to stick out). Available only to admins, of course.
    • Desirement: handle Open Graph data in an intelligent way (like a Twitter card). The more full-featured, the better. Probably best saved for a later iteration, but whatever you can do now, grand. Nobody likes to see just a plain link without any preview. If you can do this, and simply want me to elaborate requirements, let me know. Or if you have any design decisions to make, let me have input on them. Generally, make it unsurprising and standard.
    • Desirement, please do if possible without much extra work: include a view counter. Increment the counter whenever the micropost is (locally, of course) loaded either as part of a page or on a list of posts (see below), or if the micropost’s unique URL (see below) is loaded. I doubt this could be done without a lot of extra work, so, I won’t expect it.
  6. Each micropost has its own unique page and URL, probably that of the corresponding WordPress post (assuming each micropost = a WordPress post), but definitely not based on the title (as microposts must not have titles). I don’t especially care about the design of the micropost-only page yet, but there should be one. A modal, probably, but a regular WordPress post would be fine as well. It doesn’t matter quite yet, though it will (so if you are inspired to work more on this, let me know so I can give you requirements).
  7. Pagination: your choice, either a traditional 30-microposts-per-page pagination feature or else an infinite scroll feature. I personally prefer the traditional sort (doubles as a sort of crude archive). But you decide. In either case, the UX should be standard and work well.
  8. RSS:
    • Include a file describing how we propose to extend the RSS standard, if at all. At the very least (I’m just guessing though), as a child of the <channel> element, there should be a new blogtype element, where the two possibilities are blog and micro. Please see this. This would help blog readers to know which RSS feeds to represent as micropost feeds, which would require special handling.
    • Create RSS output on a subpage. If the human-readable micropost feed appears at mydomain.com/micro/ then the RSS for the feed should appear at mydomain.com/micro/rss . Maybe even better, because shorter: mydomain.com/m/rss .
  9. Nice-to-have, not required yet (requirements available on request):
    • Editing.
    • Twitter importer. Input: a Twitter archive file. Output: all your old tweets, available on your blog in this format. This would make the plugin into truly a killer app and would guarantee explosive growth. Might already exist.
    • Add a sidebar (for wide screens)/hamburger menu (for narrow ones) containing monthly-sorted archive. Archive pagination = 30 per page.
    • Basic search. Results page paginated as necessary.
    • Page reader. Another page…or maybe the same page…which allows you to subscribe to feeds. Ultimately the posts themselves should probably have @username functionality (see ActivityPub).
    • User profile page, linked from the microblog home page as well as each user post. Data drawn from the WordPress blog.

What else, folks? Comments, please.

Realistically, why think this will solve anything?

There is an interesting answer to this.

First of all, if we’re serious about people owning their own identity and data, we can do a lot worse than building on top of the personalized web presence they already own—either their own domain, or at least a blog or website, the data of which they own in a portable format. A lot of people have WordPress sites; for those who don’t, it is very easy to install a hosted blog that includes the ability to add plugins. Something like 35% of websites online are WordPress sites. Like 400 million websites. The “killer” feature of WordPress is its decent (if bewhiskered) server, the power of which is increased by a zillion plugins. Also, it’s free and open source. And you can easily move your data around. And lots of people know how to work with WordPress sites (whether they want to is another matter).

So here’s the deal. All those WordPress sites, every one of them, could become a social media account in which the user owns, controls, and syndicates his own data. How freaking cool is that? Speaking of syndication, that’s a feature of WordPress sites that’s a killer: RSS and Atom are built in. So you could build a social media protocol on top of those protocols. Why not? And there’s another killer relevant feature: that protocol is already massively in use, already supported by many feed and news readers, and already decentralized. All we have to do is build on top of it.

So…why not just use blogging, even as it is right now, in a new “short message, social media” sort of way? Because, of course, the medium drives how people use the tool. We need to make it more like social media:

  • Adding a new micropost needs to be dead simple. Even simpler than writing a new WordPress post. As simple as posting on Twitter.
  • Text has to be artificially limited. You can’t let them go on and on, or they’re not microblogging anymore.
  • The look-and-feel has to be just like “social media” (Twitter and its imitators), not like a blog.

And those are just what the above starts to work on.

Here’s the dream—because we don’t have an interesting dream, what’s the point? It goes like this.

People learn that there’s a new Twitter-like plugin for WordPress. They tell each other, “Did you know that you can just tweet from your blog…and then you own and control your own tweets? Why didn’t anybody ever think of this before?” (Never mind that they did, a long time ago, but it didn’t really catch on or develop because some people didn’t care enough about decentralization and owning your own data, while other people didn’t care enough about writing easy-to-use software for non-geeks.) So people start installing the plugin. They share the location of each other’s feeds, use feed readers, and have an experience that is actually a bit like Twitter…but one that is totally their own and totally decentralized.

At first, people just use Feedly to follow the micropost feeds of friends. But, because of the brisk adoption rate of the plugin, new features are rapidly added. The all-important “dedicated microfeed reader” feature is added, so now you can see not just your tweets, but the tweets of your friends. Someone creates a registry of all known WordPress Microblogs. So you can search through those and find old friends and new. You can also add your friends’ feeds directly. Someone else creates a chat feature, so that, while you can’t tweet in response, you can treat somebody else’s top-level thread as the first. The original poster is given the right to delete and instaban (from the tweet) anyone who is difficult. Another feature quickly added is the “quote retweet.”

Then someone decides to hook up WordPress microblogs with the Fediverse, and various blockchain networks, etc. Suddenly, this becomes the standard: when you offload your content from some other content into your microblog…that, being totally, 100% owned and controlled by you, becomes the “true home” of your social media content. And the RSS is the “true format” of your social media feed. People write exporters for Twitter…and all their tweets are added to their WordPress microblogs. There’s a mass movement to say get off Twitter now, follow me instead via WordPress!

Of course, that’s when we start “posting at” people via their Fediverse account addresses, or perhaps some contextualized shortened version thereof (the present blog happens to be located at @admin@larrysanger.org in the Fediverse; you can confirm this for yourself on mastodon.social because this blog runs the ActivityPub plugin, which enables a few Fediverse sites like Mastodon to pick up my blog posts as feeds).

Many more developments come fast and furious as the world discovers the power of this concept, and starts rebuilding and connecting everything to simple RSS feeds of microposts. The new day, of a truly decentralized microposting world, has dawned.

Well, I think it’s a nice dream.