For some reason, it goes without questioning that networked applications of significant complexity require a centralized server. Much of the nature of the web and the cloud are basically a result of this. In a number of cases, it’s relatively legitimate. Some things just are significantly easier when fully centralized, operating over consistent state. Programmers understand this from experience.
I suspect we assume this constraint because of incidental, lower level technical constraints.
One is NAT traversal. I’m not going to explain it in depth, but in short it means that two users on their regular old computers connected to the internet can’t get their computers to talk to each other without another pre-designated computer somewhere in the middle. This implies at least minimal centralization for any peer to peer protocols.
The second technical constraint is that the current networking paradigm is conversation centric, rather than content centric. This means that effectively the only means of receiving or conveying information to or from other nodes on the network is a one to one conversation with those computers. (Yes, there are nuances to this, but they don’t fundamentally change the argument, so I won’t get into them.) This means if you want information from a large number of different sources (which is what would happen in a distributed social network), your computer has to start a large number of conversations. This is full of complications and makes the peer to peer social network via conversation centric protocols an untenable project.
So why do these both matter? Well, centralized services can be both cheaper and more expensive to run than decentralized ones, depending on the problem you’re trying to solve. It’s terrible that we have to see ads on all the services we use, but we’re also not willing to pay enough to use them without the ads. But if they ran on our computers, and our friends computers, rather than on BigCo’s servers, then we wouldn’t have to pay, except for our own power, internet, and computers. Again, not all services can be decentralized like this, but some can. I see it as a social problem to put so much control over the ways we can interact into the hands of any single party, no matter how benevolent.
But, because of NAT traversal and a conversation centric approach to networking, the simple fact is we can’t do those sorts of things. IPv6 can help because it gets rid of the necessity of NAT traversal. It doesn’t mean there won’t be any more NAT traversal, but that it won’t have to be there. This means arbitrary computers can just start a conversation with each other. But, it only allows conversations, given the current set of network protocols in wide use. Content Centric Networking can help because it provides a mechanism to request a piece of content directly from the network itself, rather than asking individual computers for it. This means it is theoretically possible to gather information from a large number of sources efficiently, without any central computer needing to be involved.
Unfortunately, IPv6 is taking a LONG time to get into wide use, and CCN isn’t even a fully fleshed out idea yet. I still think they really matter, and even if I haven’t been able to persuade anyone else that they do, I hope this at least starts a conversation about it.