"Run anywhere" or "Runs everywhere"?
Everyone knows that Java's mantra has always been "Write Once Run Anywhere" (WORA) and there has been a lot of discussion over the years about that claim.
Putting the WORA discussion aside (it's already been beaten to death), I see the real value being in that Java, itself, seems to run everywhere. No matter where I need my application or data to get to; desktops, servers, wireless devices, sensors, it is highly likely that Java will be there for me to use. That's a powerful statement that I believe is rather unique.
As Windows is the common denominator for desktops, Java is becoming the common denominator for everything.
Additionally, if my application is written in Java and I need it to integrate with or interoperate with something that also supports/runs Java, I believe I am less likely to run into complications (Maybe that's wishful or naive thinking...) then if I am trying to fit a square peg in a round hole.
Unlike WORA, I'm not thinking specifically about code reuse but rather knowledge and skill reuse. I already know one discipline of Java (EE, SE, ME) so expanding my application's reach only requires an incremental increase in knowledge. Therefore my experiences with Java become an annuity of sorts. This has got to be better than learning a whole new set of languages and syntax for every different device, platform, or "thing" that I want to engage.
I've thought this for a while but it was today's Editor's Daily Blog that got me to write about. In it, Daniel points to a blog by Bill Bumgarner titled "Why Java on the Desktop Doesn't Matter" that focuses on the thoughts of John Carmack and why Java hasn't been more successful on the desktop. (Apologies to Bill and John if I am not characterizing this properly....read it to keep me honest)
Bill and John make some valid points about UI performance. I believe the biggest reason for Java not reaching it's potential on the desktop is largely because Java doesn't have the same access to OS internals that native code is typically given. To be very specific, the most widely used desktop continues to be Windows and from what I have heard, C++, C#, and VB all have richer access to things like the Registry and other OS internals. Someone writing a desktop application targeting Windows is going to use the language that offers the richest set of capabilities so that the resulting application is best integrated into the OS it is running on. There's only so much that the Java community can do on the Windows front without help from the OS.
Linux, being that it is open, provides an opportunity for Java to add more value on the desktop. It remains to be seen if this will be realized. It seems that in this case more emphasis is put on licensing then the fact that all Java applications run on Linux (and therefore you don't need a "Linux version" of a particular application). Apple does a great job of integrating Java into OS X and some of their desktop utilities. The fact remains that if success is a numbers game, then for now, success on the desktop = success on Windows.
I also believe that it won't be another OS that will replace Windows' monopoly, I believe that it will be devices that will replace desktops. As more and more services and applications get accessed by more and more devices and more of these devices run Java, Java on the desktop becomes more relevant. If you have to support web, device, and desktop access to your application, Java makes sense.
To that end, and based on the beginning portion of this blog, I think that Java on the desktop matters a great deal. I think that the ability to run Java running everywhere is a big deal, including running it on the desktop.
Thanks for reading.