Beating Microsoft

Friday, July 30, 2004

Java Destroys .NET: Chamberlain

((In this post, I'm merely mirroring John Chamberlain's blog (linked above) about how Java has whipped .NET technologically. I am mirroring his notes, just in case John's remarks ever go away... ))


Java Versus .NET

I switched from Visual Basic to Java exactly three years ago (at the turn of the millenium). A lot has changed since then. No longer is it Visual Basic versus Java, it is .NET versus Java. With the new year upon us it is a good time to take stock and ask if Microsoft has produced a competitive alternative to Java.

How Java Got in the Door in the First Place

Before getting into the comparison I should explain why I originally switched. The operative reason was that the .com startup company I was working for wanted to make a cross-platform, web-based document editing system. In other words the user would design a complex document including images using a browser and then be able to generate and download the completed document. After studying this problem I came to the conclusion that the best solution would be to use a combination of Java and the rich text format. A VB/Word combination was unworkable for several different reasons one being that it would not run on non-windows platforms.
Once I started leaning towards Java there were two enormous attractions it held for me:
- transparency - object-oriented - the powerful GUI toolkit, Swing

You can almost date my interest in Java to the appearance of Swing. Before Swing Java was a toy for applets as far as I was concerned, but Swing changed all that. Not only could you write a GUI, but you had lower-level control than was possible in VB. I write big client applications like the OPeNDAP Data Connector. Using native tools like MFC takes much more effort than VB to build interfaces so for programs like this you either have to spend millions on a large team or use a rapid development solution like VB. Nevertheless I often found VB's lack of low-level control limiting. For example, VB could not dynamically create controls. If you had a form which had a dynamic number of input boxes you would have to pre-create, say, 50 boxes, hide them and then as they were needed make them visible and move them into position. What a hack! Swing was like a dream--you had high-level convenience with low-level control and ability to dynamically generate controls.

One thing I really liked about Java was transparency. Everything was open: the VM was open, you could download the source code to reference implementation. You could download all the source code to all the libraries. Compared to VB which is completely sealed and opaque this was highly attractive. In many cases internal bugs in VB would cause difficulties, delays and problems. Often VB would work, but you couldn't figure out how it worked for an advanced behavior. None of this has ever been a problem in Java. You just read the source code and see exactly what it does.

Finally Java had a much more sophisticated object-oriented capability that included inheritance. C++ was out for me and my development team because it would have been much more expensive by an order of magnitude to develop in C++. With Java we could develop for the same money as VB but be using a better language.

.NET is Spawned

For the next two years that is how things stood. I happily programmed away in Java while Microsoft fulminated about future plans. They were determined to imitate Java and replace it feature-by-feature if necessary with their own, hopefully superior, product. By 2002 these plans finally resulted in runnable code: .NET had become a reality. No longer would it be Java versus VB. Now it was Java versus C#.

Microsoft also flirted with their Java: J++. This flavor of Java had some nice features such as good native connectivity to Windows which was a real benefit in the days before the JNI specification existed. I took a look but was quickly disillusioned. All of the class libraries and runtimes were locked up in undocumented dlls. It was just like VB--totally proprietary and opaque. Even more disconcerting was the walk I took through the VM. Microsoft kept the source code to the VM secret so I disassembled and examined the binary as I had done years earlier for VB. It was like night and day. Internally Visual Basic's virtual machine is a work of art. It is largely the work of one guy and it is elegant and efficient in the extreme in its design. The J++ VM was a mess. It was obviously written by a large team and the design was byzantine. It gave me a bad omen.

But what about C#? When .NET arrived Java programmers were not impressed because J2EE was already way ahead. I have never been interested in J2EE but for the lack of an alternative it swept the corporate world by storm and Microsoft was for once on the outside looking in. For a shop committed to J2EE C# has no meaning, but objectively is it better?

.NET Does Not Measure Up

Looking back on the last three years my feeling is that .NET has not measured up to the high standard Java has evolved from either the standpoint of an enterprise developer or an applications developer (like me). In enterprise it is obvious that Java is superior. In fact, .NET is not even in the same league as J2EE which can run freely on unix, mainframe systems and super-clustered architectures. Compared to Apache and the servlet model, IIS is weak and flawed to the point of being pathetic. When it first came out IIS was nifty but now it is so outclassed the J2EE guys just sneer at it. A much more interesting comparison is in application development, my field.

For me Java greatly surpasses C#. I freely admit that overall C# is a better language, but that is not really important. For heaven's sake I spent years programming in Visual Basic which has a syntax written for a third grader. If I cared about the language they would have had to lock me up a long time ago. Frankly I don't really like Java, especially its ridiculous exception scheme, its failure to provide labeled jumps, its lack of constants and enumerations, and its tire old C imitations, but for an applications developer the language is not important. It would make no difference if it was Urdu. What is important is the libraries.

In the libary department the heavyweight bout is between Swing and Windows Forms and it's a knockout: Swing wins. Windows Forms is mostly a thinly crafted front-end to the old Windows widgets so not only can you forget cross-platform use, but all the benefits of object-oriented development are missing. For example, Swing uses a strict MVC architecture across the board. All the components use separated data models which can all be extended. All the layout and rendering elements also can be extended and overridden. None of this true for Windows Forms. Also the event model in Windows Forms is much more clumsy which is not surprising given its failure to use an object-oriented design.

Scratching the surface a little deeper the disparity becomes more glaring. For applications developers eventually you will at some time or another have to move out of off-the-shelf widgets and do your own drawing. In my application I do extensive screen drawing and image manipulation. The Windows Forms drawing toolkit is rudimentary compared to the Java 2D API. Java 2D and the advanced imaging API are light years ahead of anything available in Windows. What I do could not even be done in C#. I would have to painfully write non-portable native code that I would have graft onto my C# program were I working in that environment. In Java my drawing and forms GUI live in the same place. In some cases I use hybrid canvases that have both Swing and custom drawn components. Trying to do this in Windows Forms would not be reliable.

Java Community Process Outproduces Even Microsoft

The advantages of the Java libraries over .NET's goes way beyond the Java 2D API. If you look at all the Java APIs for security/cryptography, graphics, data, networking, enterprise, web development and so on they just dwarf Microsoft's offering. Many of the Java APIs have no corresponding Windows functionality. Even more telling is that the source code for all of these APIs can be instantly downloaded for free. If I want to see how a programmer at Sun implemented the RSA algorithm I can download all their code and comments in less than a minute (if I don't already have it on my machine). Good luck trying to find the source code for Microsoft's security implementations.

The advanced technology and multiplicity of the Java libraries is being strongly benefited by the Java community process. Sun actively solicits outsiders to contribute and help development of its libraries. This is enriching the libraries way past anything that any single company, even Microsoft, can provide. Also, the openness of Java has resulted in many companies creating public tools in a way that is sadly unavailable to Microsoft developers. For example, take a look at IBM's Alphaworks. It's a whole world of hundreds and hundreds of high-quality tools that are all Java-based and free. There are at least a dozen different compilers for Java, all free and many with public source code. C# has one compiler and it is not free. The same is true for IDE's, debuggers, the list goes on and on.

Conclusion

If anything I think that in the last three years Java has extended its lead over Microsoft technology. At one time Microsoft was the only game in town (except for Delphi) when it came to rapid development, but Java has changed all that and never looked back. A year or two ago I would have said, "Let's wait and see if Microsoft can come up with something better." Now the clock has run out and Java's superiority is accelerating unbounded. Sun has showed the world a new way of doing business in development software and Microsoft must face the reality that it may never catch up.

Thursday, July 22, 2004

Microsoft's Sacred Cash Cow

Some good thoughts from a good guy... See Seattle Weekly article for the complete story.




A former Microsoftie says addiction to Windows revenue, mediocre products, and missed opportunities could doom Seattle’s most successful company.

Why are Microsoft products still so difficult to use and so unreliable? Why is the company improving them so slowly? Is Microsoft losing its competitive edge? Has the company seen its best days?





The Web’s phenomenal growth has driven a number of fundamental changes. And from my vantage, at least, Microsoft seems to have overlooked the most important of those trends. It made a series of missteps, and it’s not clear if it has learned from them. In protecting Windows and Office revenues, Microsoft has innovated less quickly than it could have. The company relies on the same strategy that helped it years ago come to dominate the personal-computer market with the Windows operating system, despite mounting evidence that its customers are looking for a new approach. Competitors such as Linux and Google are gaining, and Microsoft seems unprepared for the road ahead.

I regularly ponder why software giant Microsoft Corp., which has more than $56 billion in cash, hasn’t solved more of these problems.

Sunday, July 11, 2004

IE Leaks Like a Sieve

An MS press release and public lynching (from Internetnews.com) --

In a lively online discussion Thursday, Microsoft engineers faced off with end users who lobbed irate questions, comments and a few tirades about its Internet Explorer browser.

More than any topic, security reigned as the most pervasive theme during the online discussion, including when end users could see the next patch for vulnerabilities in IE.

IE staffers said the XP SP2 service pack is currently available for download as release candidate 2. That means it's not completed, final or stable yet, and that the final stable SP2 is coming soon. The browser's ActiveX scripting vulnerabilities have been faulted in several recent high-profile attacks that hit Web sites running Microsoft IIS 5.0 servers.

Here's the Kicker: Within hours of Microsoft releasing its patch last week to plug a hole in its IE browser, a Dutch security expert posted code on his site that revealed the patch still leaks.

Thursday, July 01, 2004

First Post: A Dying Microsoft

For ten years, I worked in the software industry as a Business Manager, Marketing Manager and Technical Evangelist. I started at Microsoft in the early 90s, moved to Adobe just before the Internet bubble, and then moved to Corel to work on XML products. Finally, in 2003, I came back to Microsoft.

Sadly, the Microsoft I found when I came back was a bloated shadow of its former glory. Back in the early 90s, when we conquered the Internet with IE and created a firestorm of Microsoft magic with innovations in Web browsing, server protocols and XML (co-invented at Microsoft, after all), Microsoft led the software world. But in 2003, I found out that Microsoft had attracted a vast horde of self-interested marketers, none of whom seemed all that interested in creating rock solid technology, market-leading innovation, or actual improvements in software.

I left.

Then I started to research the company's course between the early 1990s and 2003. And I discovered that Microsoft had become a ship adrift. In fact, the more I found out, the more I became certain that Bill Gates once-vaunted company was in the early stages of a downward death spiral.

Microsoft will die. It's only a matter of how long it will take.

I'm sad to see this, frankly, as I've always been a big proponent of Microsoft's pedal-to-the-metal style of programming and software delivery. But I've always been the straight shooter in any software discussion (I've worn both programming and marketing hats, and I don't tend to lie much on either side of the table), and I need to tell the truth on this one.

So this blog charts a few of the warning signs. Included here are comments from software industry colleagues (at Microsoft and companies that compete with Microsoft), press coverage of Microsoft's slips and burgeoning failures, and the resulting slow decline of the Gates empire.


 
ping