Saturday, December 18, 2010

The Cloud OS

My recent remark about the future of ChromeOS generated a surprisingly passionate response. Some said that my prediction was obvious and boring, but others disagreed, arguing instead that I am ugly and "don't get it". I won't disagree with either side, but I also noticed that my prediction was sometimes inaccurately characterized as me "hating" ChromeOS, Google, or The Cloud, all of which is false. Since there seems to be so much interest in this topic, and because people keep emailing me about it, I should probably explain my actual thoughts a little better.

First, what is a "cloud OS" and why should I want one? Actually, I don't even know if anyone calls it a "cloud OS", but I couldn't find a better generic term for something like ChromeOS. The basic idea is that apps and data all live on the Internet, which is has been renamed "The Cloud" since that sounds cooler, and your laptop or whatever is basically just a window into that cloud. If your laptop is stolen or catches fire or something, it's not a big deal, because you can just buy another one and nothing has been lost (except your money). Many people characterize this approach as using a "dumb terminal", but that's wrong. Your local computer can still do all kinds of smart computation and data manipulation -- it's just no longer the single point of failure.

To me, the defining characteristic of cloud based apps is "information without location". For example, in the bad old days, you would install a copy Outlook or other email software on your PC, it would download all of your email to your computer, and then the email would live on that computer until Outlook corrupted its PST file and everything was lost. If you accidentally left your computer at home, or it was stolen, then you simply couldn't get to your email. Information behaved much like a physical object -- it was always in one place. That's an unnecessary and annoying limitation. By moving my email into "the cloud", I can escape the limitations of physical location and am able to reach it from any number of computers, phones, televisions, or whatever else connects to the Internet. For performance and coverage reasons, those devices will usually cache some of my email, but the canonical version always lives online. The Gmail client on Android phones provides a great example of this. It stores copies of recent messages so that I can access them even when there is no Internet access, and also saves any recent changes (such as new messages or changes to read state), but as soon as possible it sends those changes to the Gmail servers so that they can be reflected everywhere else (such as my home computer). To the greatest extent possible, the information all "lives" in the cloud, and all other copies are simply caches which may be discarded at any time. (BTW, Apple is lame for not allowing a native Gmail app on the iPhone -- email is the one place where Android really outshines the iPhone for me)

Continuing with the Gmail example, it's not just your data that resides in the cloud -- the entire application lives there. This is the part that causes people to erroneously describe cloud based apps as a "return to dumb terminals". Just because an application "lives" in the cloud doesn't mean that your local computer isn't still doing work. When you use Gmail from your web browser, it downloads large chunks of Javascript code to run on your computer doing things such as rendering your inbox, handling keyboard and mouse events, pre-fetching messages, etc. The advantage of having this code run on your computer is that it can respond to your actions within a few milliseconds instead of the hundreds of milliseconds it could take to reach Google's servers (thanks to the relatively low speed of light). Which parts of the application run on your computer and which run on Google's computers? Ultimately, it does not matter, and can change over time (and in fact the split is different for different interfaces -- the basic html interface does not need any Javascript) As an end-user, you simply use the app, and let Google worry about making it all work, keeping it up to date, etc.

Because we're now treating the executable code and system configuration as data that lives in the cloud and is only cached locally, it also makes sense to do away with the old notions of installing and administering applications on your computer. And of course we also need a security and sandboxing system that prevents the code from breaking your computer (as is so common in the Windows world). In the web/Javascript world, this happened somewhat automatically because web apps evolved from simple web pages, and obviously you don't have to install or uninstall web pages -- your browser simply fetches what it needs to display, optionally caches parts of it for improved performance, and discards resources that it no longer needs (since it can always re-fetch them later on).

Cloud-based apps don't necessarily have to be written in Javascript and run in your web browser however. iPhone and Android apps behave in much the same way. Although they can be "installed" or "uninstalled", from a user perspective, that process isn't substantially different from adding or removing a bookmark, and in fact many of those apps are little more than a thin wrapper around an embedded web browser. A combination of technical and review policies prevent those apps from doing anything dangerous to your computer (unlike a Windows app, which could install a new device driver, replace a core system library, install a root-kit, etc). 

One way of understanding this new architecture is to view the entire Internet as a single computer. This computer is a massively distributed system with billions of processors, billions of displays, exabytes of storage, and it's spread across the entire planet. Your phone or laptop is just one part of this global computer, and its primarily purpose is to provide a convenient interface. The actual computation and data storage is distributed in surprisingly complex and dynamic ways, but that complexity is mostly hidden from the end user. For example, interacting with my FriendFeed page involves the coordination of thousands of individual processors and disks owned by a dozen different entities, including you, Facebook, Amazon, Google, your ISP, and many intermediate ISPs. The same is true of the services provided by thousands of other web apps.

This global super-computer enables us to do things that would have been impossible not long ago, such as instantly search billions of documents, access our email and other info from almost anywhere, easily share ideas with thousands or millions of people, collaboratively edit documents with people spread around the world, leak embarrassing diplomatic cables, etc. It also makes it easy to launch new services and applications with almost zero money, which has created a new generation of low-budget startups and expanded the world of high-tech entrepreneurship to many more people.

Inevitable, some curmudgeonly types will say this is all bad, and indeed it is not without some downsides and complications, but overall I believe the development of this global super-computer is one of the most important technological advances in history.

And what about ChromeOS? If my laptop is just one part of a much larger computer, what is the ideal design for my local node? It should be relatively cheap and reliable, secure (no viruses or anything), zero-administration (I don't want to be a sys-admin), easy to use, and fast. I believe this is roughly the design target of ChromeOS. They are building laptops that run the Chrome web browser and approximately nothing else.

I actually like the idea of ChromeOS, so why did I predict its demise? The answer is that we already have millions of devices that almost meet the same ideal, and they are running iOS and Android. In the 1.5 years since ChromeOS was announced, Apple launched the iPad, which quickly became one of the fastest selling new devices ever. Google will necessarily respond by building Android tablets, which means Android will be running on larger, more powerful devices. All of the benefits of ChromeOS (security, instant-on, etc) should apply to Android as well, and I expect that any new Chrome features (mostly under the umbrella of HTML5, but perhaps Native Client as well) will also be added to the Android browser, since platforms succeed by being as large as possible. Once Android has all the benefits of ChromeOS, the most obvious difference will be that ChromeOS lacks the thousands of native apps which are popular on Android. Android apps are closer to web apps than Windows apps in terms of security and manageability, so eliminating them doesn't seem like much of an advantage for ChromeOS. 

The other obvious difference between ChromeOS and Android is that ChromeOS assumes a mouse/track-pad while Android currently assumes a touch interface (many Android devices already have a keyboard). If my prediction is wrong and both OSs stick around, this will probably be the reason. However, I doubt that's enough of a difference to justify maintaining two separate OSs, and ultimately everything may end up with a touch screen anyway. Perhaps the tablet / laptop convertible will make a comeback.

Put another way, the ChromeOS laptops are awkwardly positioned between the established Mac/Windows laptop market, which isn't going away anytime soon, and the rapidly growing Tablet market, and it has approximately zero users. That's not a great place for a new platform to get traction and establish itself. But if it does, I will be happy for it. And even if it doesn't, it may still be a worthwhile experiment.