|
Re: Java: Evolutionary Dead End
|
Posted: Jan 17, 2008 8:58 AM
|
|
In the real world, things are unfortunately not so easy. Let me tell you a true story that has happened about a year ago in a big production environment (several hundreds Java/J2EE applications running on as about as many instances of Borland Application Server BES on a Sun/Solaris operating system platform).
All begun with Borland announcing that in twelwe months from then they would not support the currently in use BES version anymore (version 5.8 something) and that an upgrade to version 6 something should be envisioned. Needless to say, this new version would require a step forward to JDK 1.5 (1.4.2 in use at that time). That in turn would imply the Solaris version had also to be updated, because the current one was not totally compatible with the new JDK / JVM (speaking of Java hardware "independence"...).
But changing the JDK also implied adjusting the J2EE framework that had been developped in the previous years on which the few hundred applications relied on. All in all, a daunting, unsustainable amount of work and risks, because it had all to be done in parallel with new developments and in a narrow timeframe (less than a year).
The end story is it was decided to abandon Borland and switch to a new application server (Open source, this time, allowing to stick longer to a given version), because it was economically more feasible and less risky.
Backwards compatibility is a *major* issue, because the previous story shows that it is illusory to think you can decide yourself when you want to upgrade. A simple constructor announcment may trigger an unexpected amount of ripple changes that you have no choice to absorb in a way or another. And sooner or later, you'll have to switch to a new version of your XDK, whatever the 'X' stands for.
Several hundreds applications means many tens of millions of lines of code, and even a simple recompilation / redeployment is not an easy task, provided you have to guarantee the continuity of operations, including interoperability, of course.
In such an environment, there is simply no possibility for a programming language that could significantly break compatibility from a given version to the next.
|
|