Why Desktop Computers Aren't Going Anywhere

Latency is Bad

Lack of a Consistant UI and API for Dynamic Web Applications

The Status Quo is Comfortable

Powerful Computers are Cheap

Conclusion

Over the past few years, the web interface for creating applications has come a long way. With AJAX and similar technologies, we now have the ability to have the browser interact directly with the server without page reloads in a more or less standard way, a critical step in perceived performance for end users. Applications such as Google Maps and Spreadsheets, Writely, AjaxWrite, and Meebo, among others, prove that the web applications can perform at a level comparable to disk-based counterparts. It would seem like the late 90's vision of the Network Computer is finally upon us. And yet it isn't.This infuriates many people in the software development world. We deal in a world of absolutes, where there is one right answer and it is inevitable, at least to people who trouble themselves to think of such things. Procedural languages give way to object-oriented ones. Proprietary formats give way to open standards. And desktop applications move to the web. There is just something that feels right about this, like a ship emerging from a fog. When it is in the fog it does its best to muddle its way through, but when it sees an opening filled with sunlight it suddenly knows the right way to go.There are several things which prevent this from happening on a wide scale, however, some of which are either miscalculated or underestimated by people on the front lines developing the software.Below are some of the hurdles web applications have to overcome to graduate to the next level of mainstream acceptance.This one we all know. The problem with all applications delivered over a network is that the network itself is unpredictable. While it is neat to play with Google Spreadsheets to see what the guys in Mountain View are up to, trying to do real work in it is another thing entirely. If you lose your connection to the net because your ISP trips over your wire at the central office, you lose what you are working on. More likely, you will deal with nagging little performance issues as your AJAX calls aren't returned in real-time, or the Flash game on another tab in your browser sucks up all your CPU cycles and makes your page slow to refresh, or any number of other things that impact your browser and make your AJAX experience less than optimal. The web applications just don't have the same feel as desktop applications, much like Java Swing interfaces don't feel like native ones. It's a fact of life right now.This is more subtle and requires a little more explanation. First, there is a difference between a library and an API. A library obscures some functionality to let someone program at a higher level of abstraction. An API defines a platform. There are of course similarities between the two, but the bottom line is that there is not a consistant dynamic web platform that is accepted as a standard by normal users. What we are left with instead are 299 different AJAX libraries with largely overlapping functionality and slightly different assumptions and design goals. Building your application around one of these may help you from dealing with obnoxious things like browser detection and XMLHttpRequest object instantiation and may even give you some cool fading effects to play with, but it will most likely not make your application look like other web applications to end users or give you higher-level building blocks with which to build your applications and interfaces.A quick rant: Developers (particularly open-source developers) believe that diversity in libraries and interfaces is a strength rather than a weakness. I agree only in so far as the diversity eventually pushes standards into place as the stronger ideas are adopted and the weaker ones dropped. To typical end-users (the type you need to make any type of revolution mainstream) having 10 ways to do the same thing is confusing. Look at the window managers available for Linux as an example. Should mainsteam users even know what a window manager is? Are the subtle differences between Gnome and KDE worth the fact that every newby book for Linux needs to dedicate a chapter to describing X Windows and how it decouples the presentation of windows from the lower level parts, and how you can choose between a million different interfaces despite the fact that you want the one that looks like Microsoft Windows? This stuff is confusing to people who do it for a living, nevermind people just looking to surf the web in peace. This same problem plagues web development, where the large number of developers and the Not-Invented-Here syndrome that they usually have leads to everyone wanting to make their own libraries rather than adopt someone elses'. Our inability to establish de facto standards on our own is what lets certain monolithic corporations do it for us. End rant.I believe that the YouOS project is one of the first (or at least most popular at this moment) to attempt to tackle this problem head on, and I wish them luck. I haven't seen their code to know how it works, but their site looks impressive. It remains to be seen whether or not higher-level development will take place on this platform beyond the widgets I have seen so far. If they get OpenOffice running, I am there. :)We are in a mature industry, and people often forget that the "Next Big Thing" doesn't occur nearly as quickly as the "Last Big Thing" in such an environment. At this point the players are pretty well established in the computer industry, and the costs associated with the current structure are both well-known and accounted for. While web applications are being pursued for most in-house development nowadays (replacing buggy VB applications with buggy ASP.net replacements) there is no push to also replace standbys like Word and Outlook with web-based alternatives. The current versions work and we already paid for them. Plus we have a help desk that knows them. Plus we paid for training in them. Plus we have Active Directory and group policy already set for them. Plus the CIO wants more money in his budget to spend, not less. And so on.While this isn't necessarily something that will hold back web application development, it certainly removes some of the exigency for going in that direction. Web application supporters often say that less sophisticated users "like my grandmother" only use a PC for limited tasks, such as email or balancing a checkbook. Naturally, these users would flock to a cheap thin-clientesque computer running web-based applications since they are cheaper and would allow them to do everything they need.This argument is problematic because of a simple misunderstanding about human nature: People never want to feel that they are getting ripped off. There is a reason Starbucks charges $3.25 for a 16oz drink and only $4.25 for the 32oz. People will pay a little bit more just to make sure that they get better value for the money. This is exactly the situation the thin-client finds itself in. If they are even available, the cost is only a shade below that of a full-fledged PC that comes without any of the limitations. And this is a big if. Most thin-client computers are only sold to corporate customers that have the ability to centralize a huge number of functionally identical machines, and even this is relatively rare.For the most part, people will keep buying the best PC they can afford when upgrade time comes around, and that will be more than capable of running mainstream desktop applications.Web applications have come a long way and are often genuine works of art. A lot of ingenuity was required in taking a platform meant to merely view static documents online and turning it into a mostly fully-functioning operating system. That being said, we as developers must be careful not to get too far ahead of ourselves in extrapolating this growth curve. If we want this work to result in a real desktop replacement platform, we will need the discipline to overcome the issues listed above.Til next time.