Search This Blog

Sunday, April 18, 2010

Top 5 Missed Opportunities for Java

Last year around the time it was becoming evident that Sun was up for acquisition, I had blogged about how Sun could have made money off Java. Given the recent developments of Oracle's acquisition of Sun as well as a number of Java luminaries leaving their long-held posts (including James Gosling, the creator), I wanted to expand on the post a bit more and list the top 5 missed opportunities for Java and leave you at the end with a bit of hope.

Opportunity #5: Enhanced JCP Mechanism
A lot of bigwigs in the industry have talked about the Java Community Process (JCP) - where it falls short and what can be done to improve it. Not having been an active member of the JCP, I cannot comment much more than what has been said already. However, as an active user of Java, the happenings of JCP does impact me.

Personally, I feel that the idea of JCP is great. You have a coordinated steering committee with participation from multiple corporation all having a vested interest in making Java a success. It is reasonably democratic. However, that seems to have given rise to JCP's problems as well. There are two fundamental issues in a democracy, as can be understood from India and USA, the two leading democratic countries in the world.
  1. Too many voices can cause cacophony: When the participants are numerous, nothing useful gets done. The Indian democracy is a prime example of this. Those who are supposed to make decisions tend to squabble over petty issues or short-term issues rather than focus on the greater good. 
  2. With power comes pork: As can be evinced from the US democracy, great power leads to greater demands from vested interests ('pork' projects). While the participation of major corporations has been great in boosting Java's position in the Enterprise, it has also led to them seeking customizations that can give them an edge against the competitors, who are also part of the process.
Thus, instead of making Java better, the JCP seems to have given rise to more and more politics. I can think of one layman option to fix this.

Instead of Oracle (or Sun) leading the JCP efforts, it must be floated as a separate non-profit organization. Each corporation must pay to be a part of the group. Final decision on a specification must be in a time-bound manner and must be resolved by a common vote. There must also be checks and balances to ensure that things don't get stalled. More importantly, the process must be agile enough to adapt to changes in the industry quickly. I know that most of these were the original goals of the industry, but it helps to revisit the initial goals and see what failed along the way.

Such a non-profit group can also lead to better Intellectual Property management, which seems to be the primary contention among a number of folks.

It is sad to see how the Java ecosystem is going the same way as the multi-party Indian democracy. When someone (Google) does not like the way things are, they form a splinter party (Android). This leads to an erosion of the core base. Now, when time comes to do something useful, those in power are more interested in getting a big enough coalition to retain power than to do anything useful. I hope this is not how the JCP ends up.

Opportunity #4: Desktop Java
When I started working on Java, one of my first projects was on Swing. Having had a bad taste with Visual C++ and Windows apps (it just seemed way too complex), I was excited to see the ease with which I could develop desktop applications with Swing (using Borland JBuilder, which was the best at that time).

At one time, Java came really close to creating its own Operating System and there were talks about a Java OS. However, nothing much came out of it.

In addition, there was another cool innovation within Java that was never utilized very well, and that is the Java Web Start technology. Java Web Start was the grandfather of the Apple App Store. All the pieces were there, but no one really did anything with it. When Java Store came recently, it was too little, too late.

Java could have very easily leveraged on the core components of Swing and Java Web Start and could have developed an ecosystem like App Store for the desktop. The widgets that we see on Windows 7 today could've been delivered with Java Web Start.

Google OS to me is a fancy version of what could have been Java OS. Unfortunately, this did not, and still has not, materialized.

Whenever I see Ubuntu's Software Center, I see the power of Java Web Start and what it could have been, and it saddens me.

Opportunity #3: Applets
I have been involved in Java pretty much since I started getting seriously into the world of computers. My very first encounter with Java was around 1996 when my friend told me that there is something really cool called Applets that could run applications within a browser. It took me a while for me to grasp the concept - how can you run an app inside a static web browser? It would be another two years before I fully understood the technology behind the whole system.

Applets were a great missed opportunity. When applets came into the picture, it was like Jetsons. People imagined all sorts of dynamic web that would be possible in the future due to the technology. Eventually that has been materialized with AJAX and Silverlight and Flash, but it sad to see how the technology that started it all never went anywhere. Java FX again, was too little, too late.

I still think the potential is there, but it would require a significant overhaul before it gets anywhere.

Opportunity #2: Meta-libraries
As I mentioned in my previous blog, I think a huge area where Sun failed to realize the potential of Java was in commercializing it. I don't think the folks at Sun never fully grasped the concept of 'style over substance' - something that Apple has shown all of us since then with iPhone and iPad.

While it was important to focus on the mechanics of various functions, that is never enough. You need a great looking skin on top to sell. While JCP and Java focused on standardization and developing a great API, they never focused on making it user-friendly. It would take Spring and Hibernate frameworks to show the need for the skin. Till then, one had to write a bunch of lines of code just to send an e-mail or create a simple application.

Microsoft .NET still regained its popularity even though it had a lot less functionality than Java primarily because of this reason - there were so many wizards that could be leveraged by a developer to develop an application quickly.

All Sun (and others) needed to do was to create an abstract layer on top of the various APIs that would allow developers to be productive from the start - and what's more, they could've charged companies for it! I still fail to understand why that never happened.

Opportunity #1: Mobile Java
Finally, the biggest missed opportunity of all - the mobile space. After all, Java started as a language for non-desktop systems, such as set-top boxes and toaster ovens. With such a strong foundation and need for atypical systems, Java meandered and never delivered on the promise it started out with - to create a platform for resource-sensitive systems.

Having written a book on this subject, I can understand the rationale. Java wanted to be the lowest common denominator - to be something for everyone. But I don't think they went about doing it right.

One of the reason why Apple is successful is because they have a tight control on both the device as well as the API. They have 2 sizes (iPhone and iPad), compared to a million combinations that Java has to satisfy.

I feel the foundations of MIDP are strong - it is modular (profile-based). However, it is not agile. They could have expanded the concept and created 'feature packs' that would satisfy different types of inputs and screens, with a base foundation. This way, the developer would simply create a base application, and additional feature packs that would be applied based on the device (the download mechanism can determine the packs to download and install based on the need). Such a mechanism could have led to multiple manufacturers rallying behind a single API instead of each developing their own kit (such as Nokia, RIM, and Sony currently do).

It is simply unpardonable that a language that started out as the champion of all things that are not desktop or web failed to finally meet the dynamic demands of its target market.

At the end, I don't think the end is near yet. The foundation of Java is strong. There is a strong user base that can rally behind it when a call is given. All it needs is a good leader who has a long-term vision - I just can't help but see the parallels between Java and the struggles that the two major democracies (US and India) seem to be having. I hope that sanity prevails!

2 comments:

Srikanth said...

Very well written. I think the main problem with Java folks is, their perspective was more artistic than commercial. They were fascinated in Java as a work of art rather than a profitable business. So being an artistic piece it is heading towards museum i guess :)

Unknown said...

They did take pride in trying to get it right. I agree that they were more technical than business-oriented. In some ways, I guess they emulated Palm - which was not a good role model!

I don't think being artistic is antithetical to being commercially successful. Prime example is Apple - even though the iWhatever is relatively lacking in features, it still is a huge commercial success thanks to its artistic appeal.

Too bad Java didn't capitalize the artistic appeal of modular development! Maybe one man's art is another man's trash :)