I am writing a fully decentralized application and in doing so have learned a lot about the concept. There has been a lot of interest on the subject over the last few months so I likely need to write a document about the things I have learned. Some quick things:
* Security is wildly different in a decentralized model compared with a client/server model.
* Decentralization is about one thing only: maximum autonomy.
* Federated systems are semi-autonomous. They are a move towards decentralization but not completely so. With decentralization you only need an application that send/receive agreed upon instructions.
* Anonymity and privacy are opposing qualities. Decentralization is not about either but enables one or the other.
As I have been exploring this subject I have formed some criteria for decentralization:
* Address based (IP addresses or identifiers that resolve to an IP address without third party consultation, no DNS)
* Protocol agnostic (what ever two parties can agree upon)
* No third parties (no servers or message proxies unless you own them)
Think about it in terms of snail mail. The post office moves packages around without opening or inspecting the contents. The contents are never stored in a database and could be broken. It is address to address communication.
Decentralization allows for personal or organizational devices to be remotely connected as a large physically distributed computer:
* A single file system, cross OS.
* Remote application execution, such as Steam’s remote game play.
* Content on demand. Push media out to your friends or access their computer and pull it off yourself.
considered 9p yet?
https://en.m.wikipedia.org/wiki/9P_(protocol)
Here is the approach I am taking: https://github.com/prettydiff/share-file-systems