I think it’s hard to understand the logic behind the systems I’ve been designing lately if you don’t understand that we’re trying to build a new kind of Internet .
To be sure, it’s not completely new, at least not yet. We’re still relying on the underlying TCP/IP network protocol (at least for now), but even there we’re focused on IPv6 and not letting the baggage of IPv4 hold back anything interesting. Above the protocol layer though, things are much different from how most people currently understand the Internet, and in particular, the Web.
To most people the Web is the Internet. I’m frequently frustrated by this but I understand why it’s the case. It’s not unlike how email was once known to millions as “AOL”, and how, if we allow the trend to continue, most people will start calling Facebook the “internet”.
Given this it’s easy to see why even programmers minds are a bit melted when they try to consume the type of services and architectures that we’re proposing, because they’re designed for a future network that doesn’t completely exist today. We’re designing for a network that in some ways looks a lot like the ancient Internet, even before the existence of Internet Service Providers (ISP’s). Our vision is a worldwide network of independent systems which can cooperate voluntarily or operate completely on their own, capable of seamless and dynamic resource sharing and unencumbered by non-technical baggage. A network accessible by every intelligence on Earth equally, without financial or intellectual tariffs and surcharges, and without gatekeepers or profiteers simply operating turnstiles that exist only to extract value from users and contribute no actual processing capacity.
This might sound impossible or idealistic, perhaps utopian (unless you make a living shaking down Internet users, in which case perhaps “nightmarish” comes to mind) and to be fair it’s not a small undertaking, but it breaks down into smaller parts somewhat nicely, some which we don’t yet have the technology or influence necessary, but others which we can start building right now .
One of the steps we can take today is to stop building systems incapable of existing in such a model. In some ways this means systems become more independent, capable of stand-alone operation, but in other ways it means that systems become more open, capable of integration with known and unknown systems in seamless and dynamic ways. In our current view of what an “application” is, this seems paradoxical, but part of the new way is increasing the granularity of applications, not unlike previous efforts in separating data from logic and display in the Model-View-Controller application architecture, or the emergence of REST/Web API’s.
However this division not only goes the direction of application code , but also in data as well. By using data structures that represent information completely, independent of relationship to other documents, we can eliminate dependencies that constrain existing applications to “always online” operation, and lay the foundation for networks that can change much more dramatically without disrupting continuity. This is a significant change from the silo design currently popular for Internet applications, and even the idea of servers themselves.
I’ll elaborate more in a later post. In the meantime if you’re working with us on a project, and something we’ve designed seems weird or over complicated, keep in mind that we’re not designing a new application, but a new kind of network as well.