The Interplanetary File-system must be one of the most interesting technical concepts I’ve come across lately.
[warning: the below is pretty technical. Likely both confused and confusing, written to help me et my head round IPFS]
Globally distributed file-storage is something that’s been just around the corner for a long time now. Bittorrent and the like got us 90% of the way there, but functioned as mechanisms for sharing single files, rather than as a layer of infrastructure for other applications to be built on.
To download a file (as with bittorrent) you query its hash in a Distributed Hash Table. You get a list of users storing that file, and download it from them. As a file becomes more popular it becomes cached by more users, so no one node gets overloaded — again like bittorrent. The IPFS designers are also leaving room for more ambitious incentive schemes like Filecoin.
As for uploading: each user has a writeable directory, with an address generated from a keypair. This means the system can enforce only one user being able to write to a directory, without needing any central authority. Only you can upload to your directory, because only you can sign uploads with the private key corresponding to the public key in your directory name.
There’s also a git-like version history built into the filesystem. This feels like overkill to me. The advantage, though, is that you can provide a mutable-seeming directory structure, while under the surface the directory is an immutable data structure, namely a Merkle Tree. It also means that files don’t get deleted — the user just commits a version of the directory without the files. And perhaps you hope that other nodes won’t store the old data, but you have no way to enforce that.
Here’s how creator Juan Benet describes it:
IPFS provides a high through-put content-addressed block storage model, with content-addressed hyper links. This forms a generalized Merkle DAG, a data structure upon which one can build versioned file systems, blockchains, and even a Permanent Web. IPFS combines a distributed hashtable, an incentivized block exchange, and a self-certifying namespace. IPFS has no single point of failure, and nodes do not need to trust each other.
IPFS gives every user a writeable directory, with an address based on their key