Post a Comment
Does this actually matter now? Seriously? Everyone can discuss what ifs all they want to but it doesn't change the past. Instead of wondering if Java would have been more ubiquitous on Linux if it had been open sourced sooner, perhaps they should be wondering what they can do now to make Java more ubiquitous on Linux now that it is open source. Hint: Java bindings for a lot of major libraries might go a long way... oh, and a native widget toolkit that is simple and straight forward would go a long way as well. Currently SWT is the only option in that area, and it is anything but simple and straight forward.
The other issues discussed, however, are quite interesting.
Simple answer to that actually, it made development of native-seeming apps very simple, at least for GNOME. Bindings to all the major GNOME libraries were provided and are quite extensive, and their C# API is extremely straight forward. Java has the language, but nothing really native around it--very few bindings to native libraries, no native toolkits other than the overly complex swt (not even part of Java itself in any case). Java apps just don't integrate well with most of the native environments--they don't act quite the same, they look out of place, and a lot of functionality is not available to them. That's why Mono got the drop on Java, a very unfortunate thing imho. It seems rather typical of Sun (pre-Oracle at least)products in recent years... huge potential, thrown away by a string of bad decisions. Java on the desktop needs a massive improvement before most will seriously consider it for desktop apps, and unfortunately is confined for the most part to backends of enterprise applications. Great language, not so great libraries for the desktop.
I don't dislike Java and I don't mind apps looking different - I may even like it.
However, one interesting thing about .Net and Mono that sets it apart is the plethora of languages available for use. I don't think this played any role in its adoption on Linux, but at least the feature is there for people wanting to experiment with different languages. Being in scientific computing now, I'm not really among this crew anymore (its either Python and its wrappers, C/C++, and if I can't avoid it Fortran & Perl). Java in my area tends to be reserved for big projects where you need a nice GUI.
There are certainly some bad examples out there, usually older projects. Here is a good example of a nice GUI (IMO):
http://www.cytoscape.org/screenshots.php
Regarding bindings for native libraries, I've recently had the pleasure of trying out JNA (https://jna.dev.java.net/) which makes it really easy to call native libraries. Instead of writing heaps of ugly c/jni code you only need to define an ordinary java interface that matches (a subset of) the library's header file. All the stuff like pointers, structures, function pointers, etc is handled quite naturally. I haven't tried it on anything very complex though (or anything c++).




