When I imply that the web is too small, what I'm really getting at is that the vast majority of the devices connected to the Internet, participate in the WWW merely as consumers of data - publishing is centralized and generally takes place on 3rd party hardware.
This has certain fundamental implications for how we can use the web, both technical (we have to upload everything before sharing), and social, in the form of Terms and Conditions and of course Privacy Policies - which are barely ever read by anyone.
If anything, this trend is accelerating with the rise of SaaS, PaaS, "the cloud" and behomoths like Google and Facebook.
Once upon a time...
With a server on every computer, how would we make them all reachable without more IP addresses?
pagekite.py implements a tunneled reverse proxy.
There are some limitations to this approach...
Needing a front-end is a bit lame. But it surprisingly pretty well!
This is one way to make a web server on localhost (ports 8000 and 8443) visible as http://bar.foo.net/, ...
foo.net $ sudo pagekite.py --runas=nobody \ --isfrontend --ports=80,443 \ --domain=raw,http,https:*.foo.net:s3cr37
laptop $ pagekite.py \ --frontend=foo.net:443 \ --backend=http:bar.foo.net:localhost:8000:s3cr37 \ --backend=https:bar.foo.net:localhost:8443:s3cr37
pagekite.net is a front-end service provider, a "FOSS start-up"
Another example, this time using the pageKite.net managed front-end service and enabling SSH and the HTTP user interface ...
laptop $ pagekite.py \ --defaults \ --httpd=localhost:9999 \ --backend=http:bar.foo.net:localhost:8000:s3cr37 \ --backend=https:bar.foo.net:localhost:8443:s3cr37 \ --backend=raw/22:bar.foo.net:localhost:22:s3cr37
Some of the use-cases I have seen so far:
Basically any time a router or firewall is in the way.