Looking at the Google Web Toolkit, I have realized that Internet browsers are a dead end, much like MS-DOS was. GWT attempts to extract you from the tar pit of browser Javascript by papering over the incompatibilities and limitations. Some examples of these problems:
- No multithreading
- Reference counting GC, causing memory leaks
- Only 2 outgoing TCP sockets, and only to same site as URL
- Whole-page rendering, making dynamic layout changes unpleasant
- DOM incompatibilities
- Event firing and handling incompatibilities
- Limited standard libraries, and poor support for large-scale programming
All of this reminds me very much of MS-DOS. Like the browser, it was essentially a toy that was not originally intended to be used for anything serious or intense. Hackers came in and discovered they could do all sorts of things beyond those original intentions, and that they could get rich in the process. In the resulting gold rush there was no time to worry about fixing the platform. MS-DOS willfully ignored the existing body of knowledge about how to design an operating system. They wanted something quick and dirty (it was truthfully called QDOS at first), so they didn’t bother to include multiple users, multitasking, reentrancy, networking, hierarchical file systems, command shells, etc. The result was a decade of horrible cluges and hacks to work around or fix these mistakes. Novell made a fortune adding in the missing networked file system.
It wasn’t until Windows NT that MS built a reasonable OS. But by that time they were so burdened by compatibility with the mistakes of the past that many of the benefits were dissipated. Windows remains a platform crippled by its past. Apple escaped their own dead end by abandoning compatibility and importing the older but mature technology of Unix into OS X. The result today is that Apple has a better platform, but an inferior market position. Compatibility really is the right business decision.
Google Chrome is like Windows NT. It is an attempt to fix the browser, by building it the way it should have been done if it was known that it would become a universal application platform. The big question is whether Chrome can force the major browsers to improve. All Google can do is make GWT and all the Google Apps run so much better on Chrome that the other browsers will be forced to catch up.
Extending the analogy, Silverlight is like OS X. It reaches back to the previous generation platform – that for desktop apps – and imports a highly mature technology into the browser. Silverlight is a real VM, with everything we have come to expect: industrial strength libraries, languages, and development tools. The Javascript world is really a bunch of children’s toys in comparison. Ironically, Silverlight allows Microsoft to finally jettison the legacy of MS-DOS. Flash and JavaFX are also contenders for replacing the broken browser platform, but they don’t fit so neatly into my historical analogy, so I won’t discuss them. What do you expect?
If we are doomed to repeat history, then reengineered browsers ala Chrome will continue to be the dominant web platform, like Windows dominates desktops, with Silverlight/Flash/JavaFX taking a small minority share like OS X.
I’d rephrase “1. No multithreading” in the affirmative and make it more general: “1. Sequential model of program execution”.
“4. Whole-page rendering, making dynamic layout changes unpleasant” is a half-truth. The deeper problem is that there is no explicit binding language, and as a result, the various mini-languages (JavaScript, XHTML/HTML, CSS, SVG) each try to do too much.
“Compatibility really is the right business decision.” — Although Microsoft offers compatibility, they also iterate the platform and gradually deprecate or obsolete its warts. The fact you can run a 20 year old bath script is a feature.
I reject your comparison to Apple, because it is “not even wrong”. Apple still had to escape a dead end. I think a much better comparison would be Microsoft, Apple, and IBM. IBM is unique in that their mainframe OS line of products, in particular z Series, maintains backward compatibility to the 1960s when IBM first got into developing OSes. The essential design is the same then as it was today — “virtualization all the way down”, even to the hardware.
People often overlook IBM’s designs, but they tend to be consistently superior and worth learning from. For instance, Micro-Channel Architecture (MCA) was ahead of its time, and failed to replace Industry Standard Architecture (ISA). This is of course an illuminating example, since ISA is an example of a Controller object governing a system’s resources. Of course, this flavor of Controller object had some unique problems, such as backward/forward bus compatibility with third-party devices.
Chrome is an excellent web-applications platform, but merely a moderate browser. I hope Google will catch up on that end as well.
@John:
“The fact you can run a 20 year old bath script is a feature.”
It is not a “happy accident” that old software still works in new versions Windows. Microsoft actively designs and has support for such compatibility. It is (or has been, Vista makes this issue less clear) a clear part of their business model to support compatibility for vendor software over a few iterations at least. Having to design your next iteration with the mistakes of the last 2 will ultimately hamper your design– this was the point Jonathan was making. This is ultimately something Microsoft does; Apple is far less afraid to immediately throw away behaviour it doesn’t like, regardless of whether vendors use such behaviour. I think the comparison is perfectly valid and still holds true even when looking at the API changes from 10.4 to 10.5 and onwards. Apple doesn’t really go through “deprecated stages”– the feature will generally get dropped outright.
Yes, the browser was originally designed as a document publishing environment, not an application environment. This is especially true when CSS3 gets widely distributed.
Silverlight’s rendering engine is poor in comparison, as you say it is a copy of windows desktop technology. Silverlight applications lack a lot of the affordances that people have come to expect from web sites.
Google Gears and HTML5 bring forward the technologies required to make full blown applications on the browser, and large websites are starting to push Gears for extended functionality, e.g. mail in myspace.
Even with MS behind it, I suspect Silverlight is dead in the water.
I think a fundamental flaw in your analogy is that JavaScript + HTML + CSS (AJAX for short) simply cannot achieve UI features that Silverlight can, at least with acceptable performance. If this is true, then we have a breakdown, as MS can achieve pretty much any UI it wants regardless of its backwards compatibility choices. Users do not care about how gross the code is, but they do care about how pretty and shiny the interface is. (I am omitting Flash for brevity and because it is not nearly as developer-oriented as Silverlight.)
For example, AJAX is horrible at HTML editors. MS Word might generate abominable HTML, but its editing abilities are very nice. Another example would be large grids — Google Spreadsheets have a long way to go to get anywhere close to Excel 2007’s abilities. Enter the realm of live manipulation of 2-D images or much of any manipulation of 3-D images and AJAX runs out of gas. Try to integrate movies into your website and you will almost definitely have to use Silverlight.
I think the driving force will be how much better developers can make Silverlight apps than their AJAX counterparts. Alternatively, perhaps developers can get to the point where the cost of developing a website is a mere fraction when developed in Silverlight. We need them to do something analogous to Google’s use of XMLHTTPRequest in developing GMail and Google Maps, to demonstrate the benefits of this new technology.
[Luke – Good points. But note that Chrome uses Skia, the same graphics lib inside Android. I think this is comparable in capability to Flash and Silverlight, just not fully exposed yet. Google really is planning to take over the world – Jonathan]
I hope Google competes in the RIA space and puts pressure on MS and Adobe. That being said, your comment is orthogonal to the main point in your post — that RIA tools like Silverlight and Flash won’t get very popular.
@Chris
I understood Jonathan’s point. It is very similar to Alan Kay’s verbal lambasting of MS-DOS in his 1997 OOPSLA speech The Computer Revolution Hasn’t Started Yet.
Alan Kay’s ideal model is the Internet, which is stupid. The Internet’s architecture has progressed much slowly than Microsoft Windows, and even IBM zSeries architecture. Go ahead and compare the IPv6 transition to transitions in these two operating systems, and dare to prove to me the Internet changes fast. The only “advantage” the Internet has is that users don’t control installation/un-installation of components, which in many cases is no advantage at all.
Like Alan Kay, Jonathan is partially correct. However, the important thing to concentrate on is that they both believe in solving what I see as the right problem: changing how we program large systems. That’s commendable.
All I can say is Thanks, and please let me keep my perspective on this subject, rather than succumbing to the view point of some pundit. Reading an article by Nicholas Carr in MIT Sloan Manage Review, the future is predicted by electrical industry (transitioning from individual factories generating their own energy to purchasing it from a municipality… yesterday’s “cloud computing”). Reading Microsoft’s Gianpaolo Carraro, the future is still the desktop. What do Alan Kay, Nicholas Carr, Jonathan Edwards and Gianpaolo Carraro have in common? A self-fulfilling prophecy for their own personal futures. As an example, Alan Kay has been saying the same stuff for over 30 years, and his core beliefs have guided his direction.
You can either join one of these religions, or start your own self-fulfilling prophecy, or whine about things.
Why is an open, large network not close to an ideal model? This of course begs the question, “an ideal model for what?”, as I think we’ve established that there is no One True Way to design everything. We need an open market with little lock-in, and I think the Internet is as close to this as you’re going to get. Or maybe I’m talking out of my rear, in which case I will probably hear from you in person as well as on here. :-p
There is a difference between thinking of an ideal model and actually _achieving something interesting_. I predict that AJAX is going to stay big, and if people do things right, Flex/Silverlight/Skia will get somewhat big. Release an absolute killer application in one of those, make a major portion of it free, and see what happens… I honestly don’t see any huge advances being made on the desktop in the near future, although I do hope I’m wrong. Maybe MS can pull off something with a fully managed operating system, but I won’t be holding my breath.
An extremely interesting article, and a well made point.
On the other hand, you are a little bit negative: you do your comparison by enumerating problems and design faults.
There is a similarity on the positive side too: both MS-DOS and Javascript are approachable for dummies, much better than well-designed, complex alternatives.
MS-DOS is basically just a library. Programs run on the processor, and are using library functions from DOS. No async call complexities, reentrancy issues (most of which have been fixed in libc variants a decade after MS-DOS became highly popular). People approaching MS-DOS did not need to understand what reentrancy, IPC, blah-blah, are. It was plain and easy: you write your program, it is gonna run. End of story.
With Javascript, it is similar. While its implementations are almost(?) the worst among script languages humanity ever created, it is designed to at least give dummies a chance. They could try to write things like “twenty” + “two”, it did something. Actually, it even gives the correct result, twentytwo. Does not work for every corner case :), but everybody could just sit down and try writing.
With dotnet like environments, most people does not have a chance to play with them. It takes years to grasp all the complex features, for example what interfaces are, or how you figure out that some.very.nice.class.that.does.exactly.what.you.wanted
is existing, etc.
In a way, not_allowing multithreadedness or implementing many other features makes the thing approachable.
Sure, users and such featurs in an operating system are a cool thing. But it took at least ten years for linux to reach a point that you’ve installed it and you were able to play passians with it right away. Most people would just simply stuck by a login: prompt, not knowing that their username comes there. On the other hand, you installed dos, you chatted with it about what time it is, and there it was. You typed your command, it worked.
I am not sure if well designed systems, like unix (linux) could have been able to reach that many people with their much steeper learning curve.
And I am not sure if linux would be even close to where it is today without the masses working with computers in the past many years…