One of the challenges of producing software for other developers is getting the balance between backwards compatibility (so lots of developers can use the code) with supporting more modern versions of Java (so developers can take advantage of new features). In this series of posts, I will be showing you how we are trying to achieve this and the questions/problems we solve.
Which version of Java to support?
Java has always had really good backwards compatibility. So Java code written for Java6 will run with Java8, but cannot make use of any features added to Java after Java6 (ie lambda, streams). The move to Java11 introduced some major changes which can break this (but generally added workarounds).
We have 4 products (JDeli, JPedal, BuildVu and FormVu) which other developers use in their own software development. At the moment, we support Java8. So our code runs really nicely on and Java8 and any later version of Java. Java8 is still the most popular release, so this makes sense. However, there are some really nice features introduced in later versions of Java and we do not want new applications using our software to be stuck in 2104 (when Java8 was released) and unable to take advantage of improvements.
In particular, we would like to continue to support Java8, but allow newer versions of Java to use jigsaw and some other features. In the next article, I am going to look at how can achieve this with a module file.