Yep, they went on and did it. Java will be opened under GPLv2. You notice how every time someone wants to do something good, righteous or productive for the community as a whole, someone else will negatively criticize this till no end. Or as a good friend of mine frequently says, “There is always someone who wants to throw a bar of soap into the sancocho“. Sadly today, that person will be yours truly. The good news is that I don’t have enough readers to get hate mail, and I’ve already had very heated face to face discussions with some of my most loyal readers in advance.
Sun will undoubtedly benefit from this move. First of all, the catalyst that spawned the drop that tipped the glass was the Microsoft and Novell deal (I swear I’m not a narcissistic blogger). They need this in order to compete with Novell. This shouts out loud and clear to the community: “we are not siding with the evil bad guys”, “we support you and your applications”. Not to mention giving them a lot of good press. It seems that all the tech news lately was revolving exclusively Microsoft and Novell. People loved it or hated it, but they were talking about it!
Once and for all the problems with the distribution of Java will end. Since it is now GPL, any commercial or non-commercial operating system can freely distribute it to their hearts content. Ubuntu will be the first Linux distro to offer the open version of Java as well as the Glassfish application server next year. This also means that a lot of programmers that would/could not access the technology because of license/political issues can now give Java another chance. There are alternative implementations of the Java compiler and runtime. The language specification has always been freely available. Implementations like GCJ and Jikes offer these tools with the GPL license, but are lacking a robust JVM, have a lot of bugs and issues, partially implement the standard API and tend to not include the more advanced network oriented features. Previously restricted programmers now can use the Sun JDK which will give them the full potential the language has to offer.
Sun is the sole keeper of the trademark of Java and has the heaviest of influences in the Java Community Process. Ironically in comparison with competitors like IBM and BEA, they are getting very little money out of Java. Primarily because the competitors products have more market penetration in the enterprise and their respective implementations are arguably superior. Making Java open source will encourage the collaboration of hundreds it not thousands of programmers around the world (taking in consideration that around 5 million people use Java around the world, these numbers aren’t so difficult to swallow). With this massive contribution, in due time they will mold a product which may be able to compete at the same level as the previously mentioned competitors, costing them much less money to write, test and promote, and be distributed at a very low price or free.
The community benefits; Sun benefits. It’s a win-win situation… right? You will find countless IT celebrities praising Sun for it’s latest move. In the end this can only mean more developers and end users utilizing the technology in their respective ways. While I understand the need for Sun to push the technology further, I have my reservations in this recent turn of events.
Making the compilers, run times and standard base API’s for both the standard and micro editions respectively GPL has some other consequences that have not shared equal time in the lime light. GPL gives users the liberty to take the available code, and make any modifications to it, as long as the product of these modifications is also made freely available. This is the essence of the famous copyleft. Although the code is GPL, Sun remains the sole owner of the Java trademark. It’s willing to let other implementors call their product Java as long as they pass a certification exam where the new compiler and runtime are tested to prove that they are compliant with all regulatory standards. This will help ensure that all available implementations are equal, and Java’s platform independence is conserved.
Imagine the following scenario: We have a guy who loves to hack (in the original sense of the word), and takes on making his custom virtual machine. For the sake of simplicity I’ll use a fictional character… Ricardo. So Ricardo fixes a couple of bugs here and there, adds a couple of classes to the library and changes networking algorithms in order to make more efficient. Ricardo’s fixes are entirely on the up and up, and make specific calls to the API return unexpected results. Ricardo never opts for the certification and releases his code to the world, as is expected of him due to the GPL license. His JVM is widely distributed and utilized by a lot of people.
Then some application programmers start building on top of this shady JVM. More sooner than later, an application will break under this JVM simply because it did not act as expected. Users will not blame the specific implementation of the JVM, they will not blame Ricardo (in all probability they never bothered to find out who Ricardo was in the first place), they will not blame the operating system. It will come down to one of to things, blame the application itself, or blame Java. Whichever is the result it’s bad for the community. If the application is blamed, and the application programmer receives a lot of heat for it, and may in turn dump Java in favor of a “new and exciting weak type language”. If Java is blamed directly… well no explanation necessary.
Eventually, flame wars will break out, the community will fragment leaded by the die hard haters and followers of the technology. Competitors will use the opportunity to offer a more stable environment on the technical as well as social aspects of the spectrum. Sun will do their due diligence to prevent and mitigate the problem, but they will not be able to eradicate it.
Don’t believe me? Fine, go to DistroWatch and count the different Linux/Unix distributions they keep track of. And that’s not all of them. Count the different ways of installing packages and maintaining applications there are. Yes diversity is good, but excessive fragmentation can be harmful as well. One of the main benefits that Windows has over Linux is simplicity. That simplicity is accentuated by the fact that no matter who sold you your copy of windows, an application is always installed and removed they same way. This is not true for different Linux distros. Keep in mind that users could really care less about maintenance. They are dumb and lazy, and want to be done with it. The quicker and painless the better.
A couple of friends say I’m over reacting. Things will never get as bad as they are in my imagination. For once I really hope that I’m wrong. I have personally vested money, and what’s more important, countless hours of my time and effort into learning the Java technology and building applications utilizing it. I have been certified by Sun. I spend my Saturdays teaching Java to others. It would be a shame that all of this would go to waste.