The key missing piece (which I am working on) is distributed data. One of the big reasons for the current trend in centralization is that all the data can be stored and managed by a single provider. With a de-centralized web you will have millions of nodes spread all around the world, each with tens of millions or hundreds of millions of pieces of data (files, database tables, etc.). In order for these systems to inter-operate, one node needs to be able to quickly query another node to see if it has some information it needs. Imagine that node 1 needs a configuration file from node 2 but doesn’t know the exact path in the file system. It doesn’t work if it takes node 2 an hour to search through its 100 million files looking for MyConfig.dat. We have to have systems that can store 100 million+ pieces of information; attach meta-data tags to each one; and then find everything that matches a tag in just a couple of seconds or less.