microsoft .NET community, dot net community
|   In Press   |   Under Development   |   Recently Published   |   Catalog   |   Ordering   |   Help   |   Home   |
  By the Debaters
Under way:

.NET Security



.JSP Standard Tag Library


  By the Moderator
Will Microsoft .NET surpass Java in the marketplace?

The authors of our Microsoft .NET books and our Java books are debating the relative strength of two flagship technologies in the marketplace. Microsoft .NET vs Java. Let the games begin.

  • Shawn Bayern, the JSTL reference-implementation lead, is the author of the pending JSP Standard Tag Library and co-author of Web Development with Java Server Pages. He will carry the torch for Java.
  • Tom Cabanski, president of Objective Advantage, Inc, will carry the torch for Microsoft. He is the author of the pending text, .NET Security.
    Bruce Tate, president of J2Life, LLC, and author of Bitter Java, will moderate the debate. The opening arguments are below. The first rebuttals will be posted in two weeks.
Who's winning? Discuss on our DotNET forum, or read about what others are saying.
Rebuttal: Java will lose
by Tom Cabanski
Rebuttal: .NET will lose
by Shawn Bayern

Marketing muscle will prevail

Microsoft.NET is at least as technically strong as Java and is backed up by a superior IDE, a solid suite of related products and the unrivaled marketing power of Microsoft. Nobody knows how to build and sell platforms better than Microsoft. They may not always be first but they always end up leading the way. Many from outside the Microsoft camp believe that Microsoft's success is due to their willingness to ruthlessly and illegally exploit the undeserved success of DOS, which only succeeded because of a series of accidents. DOS lead to Windows, the argument continues, and Microsoft's dirty licensing tricks squeezed out competitors and guaranteed the dominance of their inferior products and development tools. The truth is significantly different. Microsoft hires the best and brightest in the industry, drives them to develop solid products that deliver what customers want and markets them better than anybody in the business. This is especially true in the development tools and platforms arena. No loose affiliation of competitors can beat this no matter what they call themselves.

Microsoft.NET is technically strong

The difference between C# and Java is almost like the difference between fascism and democracy. Java requires you to declare all exceptions and requires all declared exceptions to be handled; C# uses a much looser approach where classes can throw errors and consumers can choose whether or not to use exception handlers. The ability to ignore exceptions and let them bubble-up the call stack is useful at times. This absolutely requires more responsibility from programmers but I sure appreciate the flexibility. C# offers support for unsafe code for the same reason: Sometimes you have to step outside the managed, garbage-collected world. Yes, you need to know what you are doing when you use pointers, but it sure is useful to have when you need it. It beats the pants off Java's weak support for calling native code because it allows you to put the low-level code you need right into your C# class. Furthermore, you don't have to go outside the IDE to write it, compile it or test it. Libraries that contain what C# calls "unsafe" are nothing new - it's called natively compiled code. The Java runtime is loaded with it.

Microsoft.NET is currently "stuck" with Windows, but that is not as big a technical disadvantage as it might appear. First of all, Windows currently runs on Intel PC's (servers and clients) and mobile devices. Most recently, two phone-oriented versions of Windows were announced. .NET is available on all those platforms. Windows holds over 80% of the workstation market, half the server market and a rapidly growing part of the mobile device market. Java currently has a significant lead in the cellular market, but Microsoft is moving into it in a big way. Java's "write once, run anywhere" promise is still an advantage but certainly will erode as time goes on. Remember, the .NET platform interprets IL just like Java interprets byte codes; there is nothing technical stopping .NET from becoming available on many platforms.

Over time, I expect Microsoft.NET to surpass Java technology in a variety of areas. It already offers superior raw performance as a result of its sophisticated caching technology, efficient JIT compiler and tight, fast integration with Microsoft SQL Server. Code access security in .NET offers more granularity and more extensibility than the current Java approach. The Microsoft.NET web services architecture is ahead of what is available in Java. You can also expect .NET technology to become an intimate part of most future Microsoft products. For example, the next release of SQL Server allows developers to write stored procedures in any .NET language.

The community

There is certainly a Java community full of bright people and well-financed companies. Unfortunately, the only thing the companies involved have in common is a desire to beat Microsoft and a frustration that they have yet to accomplish their goal. They will work together as much and as long as it is to their individual advantages. Microsoft, on the other hand, is a large collection of ferociously bright people that share common goals. Time and time again they have proven that a single company, as long as they keep an eye on the customer, beats a loose confederation every time; and there is no doubt that Microsoft keeps a very close eye on the customer.

There's a community of Microsoft developers too. They may not be as vocal as some of their colleagues in the Java community but they wield significant influence nonetheless. They are quietly inside their organizations writing VB, ASP and C++ applications and they are moving into .NET with a vengeance. There is a huge third-party market for COM components in place today. Many of the COM component vendors are moving their current components and developing new ones for .NET. I don't think it will be very long at all before there are more commercially supported components available for .NET than there are for Java.

Microsoft.NET also is reaching out to programmers with skills in legacy languages. No, you cannot just move your current COBOL applications to .NET. However, you can port big chunks of COBOL logic without having to force your staff to learn some new OO language like Java. Programmers, especially young programmers, love new languages and dismiss the difficulties involved in re-writing systems. After all, they just know that the new way is much better than the old. The reality is much different. Some customers will choose to move legacy logic to something like COBOL.NET rather than re-writing it in Java. At least .NET gives them the option to do so. Once again, the supposedly much more open and friendly Java dictates while the big, bad, corporate Microsoft platform offers more choices.

In conclusion

Microsoft.NET will beat Java in the marketplace. Java leads right now but it is only the bottom of the second inning. Microsoft will win this game by hitting lots of singles. The basic product is in place. Next comes Windows.NET server, SQL Server.NET, object-relational mapping for .NET, and on and on. Every product will be tightly integrated with .NET and will make the platform stronger. Java will not be able to match the breadth and depth of the Microsoft.NET platform. All of this technology will be accompanied by a well-financed marketing effort designed to reach both non-technical decision makers and technically oriented developers. Microsoft is also going after the educational market in a very aggressive way. Slowly but surely .NET's market share will grow at the expense of Java's.

Java will probably not go the way of Netscape, but it will be seen in more or less the same light: It lead the way in an emerging market but was eclipsed by a combination of technology and marketing muscle. Java advocates that remember the wonderful years before .NET will lament the fact that Microsoft stole the design of Java. There may even be lawsuits. Even so, the final lesson will remain the same: In the end, one focused company can outsell any number of loosely allied competitors provided that company knows how to build a product that addresses the needs of the market.

Tom Cabanski is president and co-founder of Objective Advantage, Inc. He is the author of the pending text, .NET Security.

Java superiority trumps marketing

Like .NET and Java themselves, Tom and I seem to agree more than we disagree. Our first articles in this debate converged without any prior coordination; we hit on similar topics, I think, because they were the right topics to hit on -- not because we shared a whiteboard (or stole furtive glances at each other's notes). Having said that, we of course don't agree on everything, and this second article gives me a chance to address some of Tom's stronger points.

The importance of Microsoft marketing

I think both Tom and I would agree that if .NET prevails, Microsoft's marketing will be a major factor behind its success. The question is whether Microsoft's marketing can overcome portability, community standards, and what I (at least) see as Java's technical advantages.

Let's consider a similar area where Microsoft's marketing was up against superior technology, community support, and portability: web servers. Microsoft's Internet Information Server (IIS) has been competing head-to-head for several years with the Apache HTTP Server. Apache is widely considered to be more extensible, reliable, and secure than IIS; it also has the backing of an open community and is, like many Java technologies, freely available. The result? Studies done by Netcraft (http://www.netcraft.com/survey/) currently show Apache with a market share of about 57%, almost twice Microsoft's 30%. A group called SecuritySpace (http://www.securityspace.com) places Apache's market share as high as 64% and shows a marked increase over the past year; the same study shows Microsoft at about 26%, with a modest but steady decline.

Does Microsoft simply not care about web-server market share? I can't believe that that's the case. Adoption of IIS is practically a prerequisite for several key Microsoft technologies. I think a more reasonable explanation than apathy is that Microsoft simply lost a round. Too frequently, people like to cite cases of inferior technologies (like VHS) that prevailed against superior ones. It's important to keep in mind that this doesn't always happen; it might even -- in a surprising burst of logic and common sense -- be the exception and not the rule.

Integrated Development Environments (IDEs)

In his last article, one of Tom's major arguments was that .NET offers better development tools than Java does.

I can't deny that integrated development environments (IDEs) are important for a language's adoption in the marketplace. However, IDEs aren't a core feature of an architecture. For one thing, they change much faster than languages and platforms. While it's likely that the programming languages in use today are reasonably representative of the ones that will be in use two years from now, this isn't the case with IDEs.

Moreover, to many programmers, IDEs are just icing on the cake. Personally, I have to admit that I don't even track them well enough to know if Microsoft's latest IDE is truly better than all of the IDEs for Java. Tom makes this claim, and it very well might be correct -- although the fact that many different vendors produce Java IDEs is certainly encouraging. Similarly, my ability to develop Java in multiple environments -- on a Linux server, a Macintosh desktop, or a Windows laptop -- is also compelling; I can work wherever I'm comfortable.

When it comes to the actual technology on which development environments depend, the Java community brings to bear another open technical architecture. One of an IDE's most important features is its debugger. One upcoming Java specification is "Debugging Support for Other Languages" (JSR-045), which provides standard facilities for debugging languages (like JSP) that are translated into Java. This means that the Java community has an excellent plan to support debugging for the Java-related "languages" I mentioned in my previous article.

Portability

It's important not to discount portability. For instance, when about 60% of web servers do run Apache, it's reasonable to assume that many of them run on Unix-flavored systems, like Linux and Solaris. It's hard to get exact data on which hardware and operating systems are in use, but Linux and Solaris are still popular enough to be worth considering in any debate about market success. For all practical purposes, these servers are excluded -- for a reasonable part of the future, and possibly forever -- from fully using .NET's technologies. I wouldn't feel great about my chances for marketplace success if I started out by excluding a large chunk of my potential clients. Even politicians know better than to alienate large portions of their constituents.

So given that most of the web doesn't run on IIS, Microsoft needs to earn lots of converts in order to take over web space. The question then becomes, why would a web site already using Linux on Apache switch over to IIS and .NET? Certainly not because of Microsoft's track record with web security. What else might be the motivating factor? The ability to produce dynamic web pages in FORTRAN and COBOL? Somehow, that seems unlikely to be compelling.

And is it really cheaper, as Tom suggests, to run .NET than to run Java? I can't see how. Java indeed supports "a large number of powerful application servers," but it also works just fine on small- to mid-range web servers and application servers. Arguments based on "total cost of ownership" are notoriously hard to justify, but the very predominance of Apache in the present marketplace suggests -- at least in the realm of the world-wide web -- a predominance in the future.

Summary

Marketplace success is determined by more than marketing experience. Microsoft marketing has certainly had an impressive history, but it hasn't squelched Apache, and there's no reason to think it will prevail with .NET. It's important to consider factors like portability, community standards, and -- of course -- technological strength in any debate about future marketplace success of programming frameworks. On these counts, Java still has the advantage.

Shawn Bayern is the JSTL reference-implementation lead, is the author of the pending JSP Standard Tag Library and co-author of Web Development with Java Server Pages.