I argue that rich clients have efficiency and security problems that we should push off for later: right now, we should focus on building a better thin client. The essence of a thin client is to implement the most common graphical UI elements across multiple hardware and OS platforms while maintaining security. A thin client can be thought of as a first stab at ubiquitous network computing, where the security hassles of having the information superhighway coming into your PC- and the internet bandits and thieves who can now drive right up to your computer door- are handled by the thin client platform so that developers don’t have to. I estimate that 30-50% of all applications can be implemented on a thin client platform, as most applications don’t need much more than a thin client provides. And finally, thin and rich client platforms are hugely important to the future of operating systems, as I can write this today in a web browser using FreeBSD on my desktop because of the web’s ubiquity as a thin client.
But what would a better thin client design look like? It would provide better and more modern GUI elements than HTML, updating the standard widget set since HTML was initiated almost 20 years ago. Sessions would be the atomic unit of its network model, focusing on highly interactive user experiences rather than the old-fashioned request-response model used by HTTP/HTML. A binary encoding would greatly increase network efficiency, minimizing much of the wasteful uncompressed text sent over the network since I estimate that HTML makes up approximately 5% of network traffic. Graphic designers would use GUI tools exclusively to work with this binary format, which works out perfectly as nobody wants to muck around with a markup language like HTML anyway.
Finally, the internet standards process has not been beneficial for application protocols like HTTP/HTML. Rather, it has led to multiple implementations that each has their own quirks. Part of this is because of the vagueness of important sections of open standards, perhaps it is impossible to precisely detail any reasonably complex technology. Part of it is because every implementer tries to differentiate themselves by adding special features that are incompatible with alternate implementations. What is important for a software platform is that it is open to reimplementation and the resulting competition, allowing developers to always have the choice of moving to another implementation, not that it conforms to some preconceived standard. I've laid out some ideas on what should replace the standards process at my blog.
Mufasa blogs about GUI and thin client issues at A new thin client.