For many companies, however, it's not Java OR .Net, it's Java AND .Net.
That's because for a variety of reasons, including acquisitions and mergers, even a company which has decided to standardize on one of the two platforms may end up with both architectures.
That is echoed by Scott Dietzen, chief technology officer for application server vendor BEA Systems. "Java and .Net are going to compete and co-exist," he says.
For many firms which find themselves using both platforms, Web services offers a way to connect the two worlds. XML, SOAP and other Web services standards supported by both the Java camp and Microsoft allow .Net and Java applications to talk to each other.
But the convenience offered by Web services comes with a price. Web services consume more CPU and network resources than applications built using either .Net or J2EE, according to Dietzen. "It's not out of line to think that you're going to double the processing cost for an XML communication over a binary object communication," he says.
Fortunately, other options are emerging which hold out the possibility of bridging the two worlds.
Stryon Inc., a Grand Rapids, Mich.-based startup, sells an integration server that resides on any platform and allows Java applications to access .NET applications, legacy COM and ActiveX objects, and DLLs. Called iHub, the product uses SOAP and .Net Remoting protocols to connect the two platforms.
IHub's performance outstrips that of Web services, according to Stryon's Chief Technical Officer Don Hsi. "For applications with demanding performance needs," he says, "XML-based solutions will fall apart quickly."
The company's iNet product, which is currently in beta, goes even further. iNet is a complete Java implementation of the .Net framework, according to Hsi. The project was a "major undertaking," says Hsi, which Stryon has been working on for two years. The result, however, will allow .NET developers to deploy applications on any platform, including IBM mainframes and servers running Linux.
An open source effort with the same goal is also underway. The Mono project aims to allow developers to create .NET applications and run them on Windows or any Mono-supported platform, including Linux and UNIX.
Well over 100 programmers are contributing to Mono, according to project leader Miguel de Icaza, who is also the CTO of the Linux desktop company Ximian. The project is working on developing C# and Common Language Runtime (CLR) compilers, and a full suite of .Net class libraries for Linux and Unix. De Icaza expects a formal product release sometime next summer, although several companies, such as instant messaging vendor Tipic, are already building projects based on Mono technology.
There are also Web services development tools which can help tie together the Java and .Net world. Cape Clear Software, of San Mateo, Calif., and Cambridge, Mass.-based Systinet both provide Web services development environments which work with both Java and .Net.
Kyle Gabhart, a consultant for Learning Patterns, a New York, NY-based training and consulting firm, has worked with Cape Clear's tools.
"You can point it at any given Web service," he says, "and generate a client capable of accessing that Web service, in either Java or Visual Basic. It will generate a Visual Basic .Net client, if you want to see what that code looks like, or you can have it generate a Java client."
Programmers who are not looking for a complete development toolset, but who simply want to write C# code in a Java environment can make use of "E-Sharp," a plug-in to the open source Eclipse development environment which lets programmers write C# code in Eclipse.
Companies which want to go the other way can use Microsoft's Java User Migration Path -- JUMP for short, which lets programmers convert Java code to C#.
While JUMP is an unmistakable indication that Microsoft would clearly prefer to see users run their applications on Windows, Redmond may someday come to accept the fact that not all users want to run .Net applications on its operating system. Industry research firm META Group predicted recently that by late 2004, Microsoft will begin moving .NET components to the Linux environment.