Why Sun and Microsoft Should Merge Java and .NET
July 6, 2004 Timothy Prickett Morgan
It is hard to believe that it has been almost a decade since Sun Microsystems announced its jazzed-up version of C++ and a portable runtime environment for it, called, respectively, Java and the Java Virtual Machine. A lot has (and has not) happened in nine years, and the JavaOne 2004 trade show in San Francisco last week was once again a time for the Java faithful to examine what Java has promised and what it has delivered.
A year ago, after contemplating the JavaOne 2003 show, I wrote an essay (“JavaOne 2003: What Are We Going to Do with Java?”) that tried to lay out the challenges the Java community faced as Microsoft and its .NET marketing machine were coming on strong. Sun had countered with a marketing blitz to try to make Java look cool, and spending half of its total advertising budget on Java in the process, and I was pretty annoyed by that and picked apart the way that Java was perceived and used in the IT market. (I don’t normally have a strong opinion about my own writing, but that story was one of the better things I wrote last year.)
That essay is a tough act to follow, particularly since Java is doing a lot better than many expected it would in one year’s time. Like many of you involved with Java, I still have a few gripes. Java is not really a standard that everyone in the IT industry can steer, and it certainly is not an open source project (or a collection of projects) that allows the best programmers in the world to steer the development of Java. To be sure, the best programmers among the Java licensees and participants in the Java Community Process, Sun’s quasi-open-source program for managing the development of Java, can suggest ideas on improving the Java language and its virtual machines. But Sun is still solidly in control of what goes into Java and what does not. It is not an open source project, and I still believe that it needs to be. If Java were open source from day one, or even from a few years after it was launched, in 1995, we would not be talking about Java versus .NET. Microsoft would have had substantial input into how Java evolved from the get-go, and would have been working from within the Java community, not against it.
I think it is safe to say that, by not letting go of Java, Sun has most assuredly created its arch-nemesis, Microsoft’s C# and Common Language Runtime. The recent settlement of lawsuits between Sun and Microsoft could eventually put that genie back in the bottle, but only if the best ideas of C# and CLR are allowed to be included in Java. Java needs the support of Microsoft a lot more than Sun needs Microsoft’s money, and Sun needed that $2 billion settlement of outstanding antitrust lawsuits pretty badly, since its server and workstation businesses are no longer profitable.
I have argued, as have IBMers for years, and as did BEA Systems at a roundtable discussion at JavaOne last week, that Sun needs to let go of Java and allow it to be a truly open standard with open source code made available to the world. Like BEA, I used to make that argument, with the idea that only by going open source could Sun hope to get the millions of programmers it needs to create a viable ecosystem of programmers, tools, and independent software makers to combat the rapidly growing .NET ecosystem. I’m a little more sophisticated this year. I think Java has to become an open standard and that the code behind it has to go open-source, so it can absorb .NET.
You heard me right.
While it is true that I am usually itching to see a good fight in the IT industry, the one that is shaping up between Java and .NET is going to cause as much harm as it does good. The fact that Sun and Microsoft have buried the hatchet on their Java lawsuits is a sign that these two may be able to work together. Their respective customer bases, which might see the wisdom of the idea I am proposing, could certainly compel the two to work together if they unified behind the idea. I don’t believe that .NET and Java have drifted so far apart that a single standard could not emerge. I lived through the Unix wars of the 1990s, and all I know is that Windows and Linux both were created to take advantage of the frustration in the server market when the Unix vendors could not get their act together and create a unified Unix that spanned all platforms.
What the people in IT want is what Java promised in 1995: write once, run anywhere. We don’t care if Sun or Microsoft makes money selling Java or .NET tools. We care if the code we write can span platforms, from cell phones and PDAs to mainframes and supercomputers. IT needs a simplified programming model and compatible applications that can execute in a virtual machine that can span all manner of devices. Merging Java and .NET will guarantee this, and then Sun, Microsoft, IBM, BEA, and other tool makers can get down to the serious business of creating the best implementation of this unified platform. This is how X86 server vendors compete, and it drives innovation and price/performance.v
Sun has to let go of Java for other reasons. For one thing, it cannot afford to make the kinds of investments that Java deserves, and that a cash-flush company like Microsoft can afford to make. The $2.2 billion market in application servers based on Java, and the $110 billion investment that Sun president Jonathan Schwartz says companies have made in Java applications in nine years, needs Java (or better still, Java plus .NET) to be something that thrives regardless of the up and down cycles of one vendor. To put it bluntly, Sun’s revenues have plummeted from just over $18 billion in 2001 to $11 billion in 2003, and Sun’s whole software business is so small it doesn’t even talk about it as a separate line item in its business discussion. In 2001, Sun Software might have sold $800 million in software to the outside world and another $400 million to other Sun divisions. And Java licensing was a small piece of its software business. The reality is that Java may as well be open source, since it doesn’t make Sun very much money anyway. Sun could make more money (meaning keep more profits) if it let the world develop Java and focused on providing tools, middleware, and services for creating Java programs and making Solaris the best platform on which to run Java.
While Java gets the write-once, run-anywhere idea correct, Microsoft has correctly identified that programmers want to use different languages within their virtual machines and to run them on different platforms. Why shouldn’t there be something called RPG#? And why shouldn’t it run in a unified JVM-CLR runtime environment, which runs on OS/400 and any other kind of server? Microsoft needs to take a hard look at its Windows-only approach, and to do a little letting go of its own. CLR is great, and flexible, but no one wants to run in a Windows-only world. But Sun has to realize that one of the reasons why it only has 4 million Java programmers (when it wants and needs to have 10 million in order to beat Microsoft in the tools and languages game) is that making the jump from RPG to Java is tough. Something like RPG# might smooth the transition, and would provide all of the benefits that RPG shops want when writing RPG# applications once and running them anywhere.
What the IT industry needs is the best programmers, creating a flexible and versatile virtual machine environment, and another collection of the best programmers in any particular language creating modular objects that are pieces of code. Then, with the right kinds of tools, regular programmers can spend their time assembling only the best modules into the applications their companies use. This has always been the promise of object-oriented programming, and the industry keeps missing. We have to stop recreating the wheel when creating applications, but allow more flexibility in function and platforms than packaged applications. What we really need are modular objects created to run in a unified Java-CLR environment, on any platform, using any one of a dozen popular languages that are tweaked for that environment.
I don’t know what to call this unified JVM-CLR environment, but I do know what its motto could be: “Write whatever you want once, in whatever language you please, and run it anywhere you want.”
Having gotten that off my chest, next week I will give you a run down on all of the interesting Java announcements that Sun made at JavaOne.