Show, Don't Tell: Decentralization Can Be This Easy

I've created a product called ZeroTier One with two different goals in mind. One is to build a startup. The other is to help "redecentralize" the Internet as a medium.

I grew up with this medium, and I've watched it progress toward something that is increasingly controlled, jailed, monopolized, and disempowering to users and in many cases creators.

Lots of people have asked then: if that's a goal, why isn't ZeroTier a true meshnet?

There's two answers to that. One is technical. The existing design represents a compromise between decentralization, design simplicity, and zero-configuration "it just works"-iness. But the second answer is more theoretical.

Despite my agreement with the general gist of the decentralizers' goals, I am not convinced decentralization of the network's topology is the essential thing.

I think it depends on how you define decentralization, and on what exactly you're talking about decentralizing.

If we took the existing Internet and converted it to a full mesh at the infrastructure level, I'm not sure that alone would change anything about how we interact with it.

When I think about decentralization, what I think about instead is decentralization of how this medium is created and consumed. I think about putting you in control of things like your own data, who you trust with what, and allowing creators to either give or sell (as they choose) their creations directly to their audience. I picture direct relationships, roads without t(r)oll booths and spies watching your every move, and content that doesn't need someone else's stamp of approval.

When I take that form of decentralization back down to the wiring level, the essential thing that emerges in my mind is deperimeterization.

Deperimeterization means -- in short -- finding a way to do away with NAT and firewalls.

The connection between deperimeterization at the infrastructure level and decentralization at the media level seems stupidly obvious to me, yet explaining it to other people has proven to be a really difficult exercise. Superficially the two look unconnected, and trying to explain why I think they're linked takes me down a complicated rabbit hole involving analogies about biological evolution and quotes from Marshall McLuhan.

The other night I realized: maybe I should take a cue from literature. In English departments, one of the first pieces of advice often given to new writers is: show, don't tell.

So instead of attempting to tell you why deperimeterization is important and why it may in fact be a prerequisite to (re?)decentralizing the Internet as a medium, I'm going to show you.

Do this:

  1. Download and install ZeroTier One.

  2. Join Earth by entering 8056c2e21c000001 into the network ID box or running "sudo zerotier-cli join 8056c2e21c000001" at the command line (Linux users).

  3. Check that you've got an IP and a working connection by going to http://earth.zerotier.net/ (or pinging same). It might take up to a minute, but usually it happens in under ten seconds.

  4. Add http://29.44.238.229/~api/feed.xml to a local RSS reader app (not a cloud-hosted one). You can also load this in some web browsers, since some (Chrome?) will render RSS in a presentable way. Or, if you want to be quick and dirty and are on Mac or Linux, you can just fetch it from the command line with "curl http://29.44.238.229/~api/feed.xml".

See you on the other side.

EDIT

A few folks tried this -- it was intended as a simple proof of concept. I've since taken it offline. Here's what was "on the other side":


Peer to peer networking is this easy.

The text you are reading was served from my personal laptop. If I'm in the office, it was served from my desk. If I'm at a coffee shop, it was served from my table. I might be on a train, sitting in a park, or at home in bed and catching up on some reading. I'll try to remember to leave my laptop on overnight, but if it's late at night (California time) and this feed is offline it probably means my laptop is folded up in my backpack and like me it's asleep. In that case your RSS reader will just keep trying, getting the next update next time it's available.

The point is point to point. As far as IP is concerned it's going straight from me to you -- from my computer at 29.44.238.229 on ZeroTier/Earth to yours.

Here's what I did:

(1) Since I use a Mac, I followed these instructions to enable the Apache web server and the "~/Sites" web sharing folder in my account. Took me all of five minutes.

(2) Then I wrote a simple RSS document based on some examples I found online. I saved this as "~/Sites/feed.xml". I'll also cut and paste the inner content of each article into "~/Sites/feed/#.html" when I'm done with it just so the links work.

That's it. Instant peer to peer syndication.

IP is already a peer to peer protocol, as is every application layer protocol that runs on top of it. Get all the cruft out of the way and it's the only one we need.

ZeroTier One is a complicated thing designed to let us do simple things with simple, open, straightforward protocols. It handles all the ugliness of NAT traversal, mobile addressing, and key exchange, then gets out of the way.

I suppose the ultimate quesiton is whether we'll always need something like ZeroTier (or cjdns, community meshnets, etc.) to do this. I think the answer is no. If we can adopt IPv6, this will give us enough addresses for every single device. If we can fix our operating system, application, and service security problems enough that devices no longer need firewalls for their users to feel safe, then we can ditch those too. If we did those two things a peer to peer future of content co-creation and co-distribution would be easy to achieve, at least at the technical level. That's what deperimeterization means. But until that day, meshnets and network virtualization overlays can let us engage in a bit of time travel.

There are of course other technical challenges, like the challenge of device availability that I allude to in the first long paragraph above. But those would be a lot easier to solve if the network would just get out of the way. NAT and firewalls make everything orders of magnitude harder, forcing every protocol to become a confusing mess of obstacle-dodging hacks. All that complexity also destroys interoperability, making it impossible for networked systems to easily build upon one another.

Stay on Earth (if you're not too paranoid) and add http://29.44.238.229/~api/feed.xml to your favorite RSS reader app and you'll see updates from my laptop whenever it's online and there's something new.

I'll be using this feed to talk about a parallel effort that I've been incubating alongside ZeroTier. It's not another software product, more of a way of thinking about and using the medium.

We now return you to your centralized, monopolized, firewalled and asymmetrically addressed Internet.

Show Comments