Modern life owes much to the Internet. Many proverbial thanks are due to the inventors at CERN (incl. Tim Burner's Lee) and to Netscape (Jim Clark; the money. Founding engineers; the know-how) for making it accessible to all of us. A recent visit to Google's Boulder, CO office brought back that aching question for me though; is this all the Internet has to offer?
What if it never happened?
Would traditional client-server computing have been able to push network infrastructure (modems, hard-wire networks, wireless-networks, fiber, satellite) as far as the graphical browser has? If we had given it the years that the Internet's had, would we have skipped over and evolved past all the advertising, porn, and shopping that has become our network? I have to wonder if we have simply over-sold/hyped ourselves over the past decade, and subsequently distracted ourselves from the end-goal; better overall human computer interaction. The web is a complete UI/UX disaster, and has severely stunted HCI (Human Computer Interaction) efforts that can only come to fruition with deep driver/hardware bindings (e.g. Oblong - a firm you've never heard of that has the potential to change everything). We're still wallowing around inside web pages, building applications that have awful authentication/authorization models (how many usernames and passwords do you have?), and HTML5 is our latest savior?!? Please.
Getting Serious (again)
My recent conversation in the Google cafeteria challenged some base assumptions that I, and most of my colleagues, make; namely that web-apps are "it." That lunch discussion is well represented in a talk two of the key engineers gave at Google I/O 2010; Programming the web with Native Client SDK". When we were talking, what was initially described to me was something I could neatly, and conveniently, fit into today's browser plugin APIs. "Why not just use NPAPI; why re-invent the wheel?" I asked. I got a response that only someone with the know-how, and the resources could give; "because this [web as we know it] can't be it." I left skeptical, but it's been a month or so, and I'm there.
We'd be nowhere without the tubes that have been built. From a gazzillion miles of various types of cable/wire being laid all over the world, to IP/HTTP ubiquity. However, consider them a simple, yet crucial, layer in the client-server software model stack. Sure it's taken us 15 years to build it, but what if you chalk it up as "done." What's the next layer in the cake diagram that you'd pursue?
If we'd had this layer complete 15 years ago, the kings of client-server software at the time (Microsoft and IBM) could have started building highly distributed applications then, as opposed to trying to do so now (IBM quite successfully in more of an industry consultancy role, and MSFT arguably flat out failing at it). With Native Client, Google is trying to answer the question of what should software look like now that the connectivity layer is "done?" It's a cool question if you think about it and are able to extract yourself for a moment from our day-to-day web-app construction, and browser engineering realities; we have a hard time seeing the forrest from the trees.
It has a very long way to go, but a new way of executing "native" code through our "tubes" could open the door to a new generation of software. One that can harness the power of our hardware and the most important part of the Internet, namely the "tubes." While a train-wreck, recall the confines Microsoft tried to break out of with Microsoft Bob; knocking down the four walls of the traditional rectangle window managers that none of us exists without. Imagine networked software that can talk to your hardware to obtain identity information (something that requires a hardware component; you). These are things that we shouldn't be dreaming about, they should just be.
While Google's Native Client SDK goals seem audacious, they are also admirable, and if there's one company out there right now that has the power to pull something like this off, Google's it. Good luck.