Recently, a debate has erupted on the Lucene (Open Source search library) mailing list about whether to make the next version of the library require Java 1.5 instead of Java 1.4. Predictably, opinions fall into two camps. I've done my best to summarize the arguments on both sides:
Move forward: "Java 1.5 has been out for about two years and making the next version of Lucene require that release is a reasonable way to move forward. Backwards compatability can't be preserved forever, and there are some nifty features to use in the newer versions of Java."
Backwards compatability: "There are still a ton of users on Java 1.4. Switching to 1.5 provides only incremental engineering advantages and could leave existing users in a lurch. It would be better to wait at least another year until even more users are on Java 1.5."
I've watched the passionate emails on both sides with some interest, as we went through similar discussions in the not-too-distant past. Our Jive Forums product has been locked to Java 1.4 for a long time because we have a lot of large, important customers that just can't upgrade their infrastructures very quickly. So, not much of a debate on which version of Java to use for that product, unfortunately. However, when we were going through the process of making Wildfire Open Source nearly two years ago, there was a choice -- use Java 1.5 and get all the cool stuff, or appeal to more existing users and work on more platforms by supporting 1.4? Back then, it was a pretty tough choice since Java 1.5 had just been released.
Progress at the expense of backwards compatability is obviously one of the core issues in software development, and I can't hope to fully address the problem in this blog entry. However, I can say that we were very happy that we picked 1.5 for Wildfire. Generics and features like the new concurrency package certainly helped our development process. But, there was something else about moving to the new platform that I wasn't expecting. If I had to distill it down to one word, using Java 1.5 simply felt "fresh". It got our engineers fired up and the community of users that developed around the project seemed only too happy to be using the latest and greatest. We also embraced a lot of other cutting edge technologies at the same time like XMPP. I truly believe that if we had gone down the "safer" path with 1.4, Wildfire just wouldn't have developed the same level of energy that it has today.
Maybe this is the path that all software products take as they "cross the chasm" -- start with what's new and risky (which appeals to all of us that love technology) and then gradually slow down into being more mainstream and then eventually obsolescence. I guess we'll see what happens with Wildfire when Java 1.6 comes out later this year and we're faced with the same choice all over again. Will things be entirely different now that the Wildfire project is so much more mature?
Finally, what will the Lucene maintainers decide? We'll find out in the near future, but I cast my vote for the move to Java 1.5.