ZeroTier is a semi-decentralized system at the moment from a technical point of view. There's three reasons for that:
(1) Sort of like the common optimization advice of "make it work, then make it fast," I'm pursuing a strategy of "make it work, then make it more decentralized." There seems to be an exponential difficulty curve re: *completely* decentralizing a protocol and that in turn comes from some fundamental constraints in information theory such as the CAP theorem. My goal is for ZeroTier One to be reliable, zero-configuration, and very fast, and doing that without any centralized POP is really hard. In the future it would be possible to further decentralize the protocol by introducing something like a fast Kad network, a trust system for selecting supernodes in a decentralized manner, etc.
(2) I do plan to have both an open source / free component and a commercial component. ZeroTier One supports the creation of arbitrary distributed LANs. There will be a few public wide-open ones that will be free for unlimited use, but you can also create private distributed LANs. I plan to charge users to create private distributed LANs that are administrated by ZeroTier's own servers... basically you're paying for a reliable infrastructure that I manage and a nice web GUI to admin them. Nothing prevents you from running your own netconf-master but you'd have to create your own mysql database and admin everything yourself and most commercial users don't want to do that.
(3) I actually view operational decentralization as being more fundamental and more important than infrastructure decentralization.
#3 is sort of a philosophical point. Basically I think it's more important to enable lateral communication functionally than to physically decentralize the network. I'm not saying the latter isn't important... just that it's a lot harder to achieve and has little value without the former. If nobody is developing peer to peer apps that really leverage an operationally decentralized network, then if we did create a truly physically decentralized network there would be no "killer apps" for it. It wouldn't go anywhere.
This is why one of my goals with this project is to make p2p lateral communication easy on public virtual LANs. The fact that peers use a set of centralized servers to find each other is IMHO secondary... making lateral communication easy enables people to easily develop killer apps that want to talk laterally. Once these exist, the tail will wag the dog.
What do I mean by this distinction?
Functional decentralization means I can run any app you can, I own my data, and we can make direct connections without a third party arbiter being able to control what we do or say. For example, if we were on a functionally decentralized network I could type:
ping <your IP address>
... and directly ping your box.
Physical decentralization means that no central point of failure exists... that I can ping your box regardless of whether someone somewhere else turns off their system. Obviously this is technically a lot harder to achieve and without functional decentralization what's the point?
ZeroTier has been high on my watch-list. Very interesting project. I'm guessing because of the subscription model that it has some central coordinator?
What I imagine doing with ZeroTier is running private web services and distributing the names ("http://couchdb.paul
") among my virtual LAN. Is that feasible?