For software developers, the people who at some point have to stop gawking at the promise of Java and get work done that will pay the bills, not much is clear in the perpetual haze that swirls around all things Java.
In fact, for now, just one thing is obvious. Sun Microsystems' push to establish its prize creation as a platform will have to overcome the most unmovable of objects in the software industry: Microsoft's determination that Windows is the center of the universe. For Microsoft, Java is a language - albeit a cool one that can serve Windows well. And that's that.
Developers are attracted to Java because of Sun's revolutionary - if somewhat hype-ridden - invitation to write programs for the sake of writing programs. Never mind the operating system - the code will run everywhere. The promise itself, however mist-wrapped, gets developers' juices flowing.
"Somehow Java reignites people's excitement about developing software," says Rick Ross, founder of the independent Java Lobby group. "There's something wild and new, something funky about the Internet, and its tendency is to work in a way that's not 100 percent about profit."
But Java's entrepreneurial devotees and Sun itself are not charitable organizations. So profit must emerge from the Java haze, too, at some point. And that means developers are looking for some resolution to the Sun-Microsoft Java set-to.
Key to that battle is Sun's October federal court allegation that Microsoft is trying to determine Java's future by developing its own unique version of the product. Sun alleges that Microsoft has broken its licensing agreement by refusing to include key parts of Sun's Java package in its software developer's kit for Internet Explorer 4.0.
Among the missing pieces are remote method invocation classes - RMI for short - that allow Java objects and virtual machines to talk to each other in a network. The virtual machines are devices embedded in browsers and other software that read and "interpret" program code for specific operating systems.
"We would like more clarity on the standardization of Java. At this point, you really have to sort of bet on horses," says John Schroeder, vice president of engineering at Sqribe Technologies. "You look at the technology that's embedded in Java and you have to choose wisely. We've avoided the use of RMI, for example, in our products. It would have been beneficial, but we didn't use it because of the uncertainty."
It looks like that uncertainty will last.
Microsoft views Java as a useful language - and "language" is the operative word here - to develop yet more applications for the Windows platform, taking advantage of all the features and processing support therein.
"We think this is a cool language," says Jon Roskill, director of visual tools marketing at Microsoft. "You can write a watered-down platform-neutral version [of an application] or use it as a language to write apps that people have come to expect on the platform that's on most people's desktop."
That approach represents a big problem for Sun. First, the development of a Window-ized version of Java compromises Sun's "write once, run everywhere" vision for its invention. Second, Microsoft has overcome oft-mentioned Java performance problems by developing a virtual machine that works - and according to many, works fast.
"Do developers have to choose?" asks Microsoft's Cornelius Willis. "Yeah, clearly, if you want to invest in Windows, Java is a great language for building Windows applications. The platform is a valuable asset, and there will always be choices."
It's clear that Microsoft brings all its Windows clout to the dispute. What does Sun bring? Paradox, for one thing. On the one hand, Sun doesn't want Java to become a platform-specific language, because that would undermine Java's cross-platform mission. However, Sun has yet to deliver the platform support, such as development tools for printing and connecting to serial ports, so that developers can build applications with these important capabilities. As it stands, Sun says, developers can use platform-specific code, but they may do so at the expense of some of Java's core features.
"We provide native method interfaces for developers that want to access native method code, but you do that at your own risk, because then you give up portability issues, scalability, and security features," says David Spenhoff, director of product marketing at Sun's JavaSoft division. "But we have that feature because we understand some users have a need to touch into the non-Java world. We think that as the platform grows and matures and reaches a complete stage, for the vast majority of apps, the need to do that will go away."
Well established as a powerful behind-the-scenes and middleware technology - in application servers and other linking tools - Java hasn't yet produced any significant front-end programs, something for users to feast their eyes on. And therein is one of Java's weaknesses.
"The problem lies in the GUIs," says Madhu Siddalingaiah, a Java developer who has written several books on the technology. "Developers need more tools and education on how to properly implement the GUI. But with the core technologies, I don't know of anyone that could have done a better job with that than Sun has."
The promise is that Java will deliver more platform features as it evolves. Yet the question lingers: Will developers succumb to market pressures and build products that forgo Java the platform and build OS-specific features into their products, as Microsoft recommends?
"The trend is, where Java can't cut the mustard, developers are building in about 90 percent Java. They're hiding behind an interface, and then can drop in more Java as it comes along," says the Java Lobby's Ross, who is himself working on a way to manage image file formats in Java.
"For 97 percent of the programming community, Java works well," says IBM Java evangelist Simon Phipps. "Bankers want to hire banking programmers, not Windows programmers. In about two or three years, business programs will be agnostic about the platform."
As they work with Java, many C and C++ traditionalists are becoming more aware of the problems and limitations of these bread-and-butter programming languages. This is particularly true when it comes to memory management, a source of dread when developers get to compiling and debugging.
"In Java, you have to decide to write bugs, they don't just happen to you," says Phipps. "Microsoft is so used to having people mucking around with [application programming interfaces] that they forget people want to write applications. They think it's a bad thing to not have to mess around with OS APIs!"
Java's advantage as a programming language is partly due to the fact that it's a new language, with none of the baggage that languages like C++ have acquired over the years. "JavaSoft has done a good job of defining compact sets of classes, and you don't need an encyclopedia to understand them," said Ross, noting that in C++ it can be difficult to keep track of an application's framework as it evolves: "Java's app framework is easier to use than C++ frameworks, and creating new classes is simpler and less error-prone."
The Java virtual machine is another integral part of Java's appeal, providing memory management features and enabling applications to run across different platforms. And in markets ranging from back-end application servers to small, focused desktop business programs, Java is slowly proving itself to be a cross-platform commodity.
David Boydston of Solutions Consulting in Santa Barbara, California, and a longtime C and C++ developer who recently used Java to create serial port software for Windows, is sold on this aspect.
"Java has turned out to be an exceptional tool," he says. "We're building things two to four times faster than before." He added that "speed is an issue, but a well-designed program can be very fast."
For many, the advantages of using Java boils down to development time. And that may be where Java will find a ready supply of converts.
"It takes you half as much time to write Java code," says Siddalingaiah. "I teach Java classes and in every class I challenge the best C++ programmers to write a program and we'll see who gets it done first. No one will take the challenge."