In our special Java Daily edition, we would like to introduce you to Simon Ritter. He is the Deputy CTO of Azul Systems. He has been in the IT business since 1984 and holds a Bachelor of Science degree in Physics from Brunel University in the U.K. Simon joined Sun Microsystems in 1996 and started working with Java technology from JDK 1.0; he has spent time working in both Java development and consultancy. Having moved to Oracle as part of the Sun acquisition, he managed the Java Evangelism team for the core Java platform. Now at Azul, he continues to help people understand Java as well as Azul’s JVM technologies and products. Simon has twice been awarded Java Rockstar status at JavaOne and is a Java Champion. He currently represents Azul on the Java SE Specification Expert Group.
Java Daily: After some time with the new Java release cycle, what’s your impression on how companies are reacting to the increased frequency of new Java versions? Do you think the adoption rate for new versions has increased?
A six-month release cycle is excellent for enabling the Java platform to become more agile. I think that this change has been very beneficial for “Moving Java forward faster”, to use the Oracle marketing phrase. It has also made it possible to include preview features and incubator modules, something that was not practical with the older, multi-year release cadence.
For enterprise Java users, however, this presents significant challenges if they try to keep pace with each new release. Although both continuous integration and continuous deployment are widespread, many development teams still use rigorous regression testing on applications before releasing to their users. The more complex the application, the more time and effort it takes to run these tests. For many, the idea of doing this every six months is too much.
To address this, all OpenJDK binary distributors have long-term support (LTS) releases. This started with JDK 8, and the current one is JDK 11. By providing extended updates and support to one release every three years, those users who prefer stability over the most modern features can take advantage of this.
From talking to many enterprise customers, I see that the vast majority of users are following this approach and migrating applications from JDK 8 to 11. For those who would also like to take advantage of some intermediate features, we at Azul also provide what we call medium-term support (MTS) releases of our Zulu build of OpenJDK. For two releases between LTS ones (currently JDK 13 and JDK 15), we provide extended updates and support until 18 months after the next LTS release. This gives ample time to migrate to that release.
Although the adoption rate for new releases has not increased, I always recommend users to do testing where possible with each new release so that there are no big surprises when migration to a new LTS release is required.
Java Daily: From your experience, what are organizations struggling the most with when upgrading to newer versions of Java? And how can these challenges be addressed?
Simon Ritter: The developers of Java have always considered backwards compatibility of the platform to be of fundamental importance. We have seen this through the over quarter of a century of Java’s lifetime. It is still possible to take an application compiled on JDK 1.1 and run it unchanged and without recompiling on JDK 15.
Moving from JDK 8 to 11 can pose some challenges due to the introduction of the Java Platform Module System and, more importantly, the encapsulation of internal APIs. These problems often manifest themselves when developers are using external libraries and frameworks, which have made use of APIs like sun.misc.Unsafe. Thankfully, most common libraries have now been adapted for this, but there are still some that may cause issues.
Fortunately, the JDK includes tools, such as jdeps, that can be used to help identify where internal APIs are used and then the appropriate command-line configuration can be included to address this.
Java Daily: As Deputy CTO of a company that’s providing both Critical Patch Updates (CPUs) and Patch Set Updates (PSUs) – how do you convince your clients that they need to keep their systems up to date in a very timely manner?
Simon Ritter: I’m always surprised that anyone should need convincing! If you’re running any type of mission-critical application or dealing with sensitive data, security should be an absolute priority.
I analyzed Java updates and, since January 2015, there have been 328 CVEs addressed for different Java releases. Of those, 56 had a high CVSS value, and 59 were classified as critical. That’s the type of information that can be very sobering for the CIO of an organization with Java-based mission-critical applications.
Providing a CPU, which only contains security-related changes, gives more time for testing of the full (PSU) update before deployment. This ensures applications can have both maximum security and stability.
Java Daily: What would you say was the most useful feature added after Java 11?
Simon Ritter: My personal favourite feature since JDK 11 is the introduction of Records as a preview feature in JDK 14. As Java developers, we use data-type classes all the time in our code. Although these are easy to define in Java, even the simplest is quite verbose in the amount of code required. Records bring a great simplicity to this while including other benefits, such as making the fields of the Record truly final (even through reflection).
Java Daily: You are a member of several JSR Expert Groups, one of them being the Java SE 16 Platform JSR 391. Is there any feature that you are especially looking forward to being integrated into the upcoming Java versions?
Simon Ritter: Yes, although we don’t know when it will be integrated, I am very much looking forward to the delivery of Project Loom. This adds support for easy-to-use, high-throughput lightweight concurrency to the Java platform.
Asynchronous programming models, through libraries like RxJava, have become very popular recently. These address the limitations of the concurrency model in Java that maps Java threads directly to operating system threads. The drawback to this approach is it is much harder to debug. Project Loom introduces virtual threads to Java. Many of these can map to a single OS thread, and the JVM handles context switching with almost zero overhead.
Many developers are looking forward to this becoming part of the core Java platform.
Java Daily: As you mentioned in a blog post, there’s a lot of discussion about the verbosity of Java in comparison to other languages. With features like the Diamond-operator, Lambdas, Local-Variable Type Inference and records the language became gradually more concise. How much do you think languages influence each other and how is that trade-off between keeping Java recognizable as Java and adopting new trends handled in the Java Community Process?
Simon Ritter: There is certainly a lot of influence between programming languages, and that is nothing new. If you look at the basic syntax of Java, it is heavily derived from that of the C programming language. Over the years, features from other languages have been adopted into Java. This is not about plagiarism; it’s about pragmatism. As other languages develop useful features, why not integrate them where it helps Java developers be more productive?
The trade-off between adopting new features and keeping Java recognizable is a tricky one but the architects of Java, people like Brian Goetz and Mark Reinhold, do an excellent job of this.
Occasionally, a feature will be added that initially looks somewhat foreign and non-Java like. Lambdas and Streams in JDK 8 is a good example of this. However, as Java developers get used to the new feature, it rapidly becomes just another part of the platform.
Java Daily: By 2016 you have given presentations in 56 countries and attended a lot of conferences. Do you see a change in where people are most active in the Java scene globally?
Simon Ritter: Not really, no. After its release, Java’s popularity quickly took off and has spread around the world. Certainly, some places will always be well known for their enthusiasm for Java (Brazil immediately springs to mind). What I haven’t seen is anywhere where the popularity of Java is declining. Before my travel came to an abrupt halt, I used to visit a lot of Java User Groups in many places. Almost without exception at each of these meetups, there would be one or more recruiters with a list of open Java positions they were looking to fill. That always reassured me that the popularity of Java was still very high.
Java Daily: If someone is interested in getting to know the Java Community Process and becoming more involved in the community, what would you recommend as first steps?
Simon Ritter: The simplest way is to become a member. There are several levels of membership, so you don’t need to be part of a large company to get involved. You can be an Observer, a Registered User or sign-up to become an Associate Member. From there, you can start looking at the information in individual JSRs and think about how you want to contribute.
Is there anything else you would like to ask Simon Ritter? What is your opinion on the questions asked? Who would you like to see featured next? Let’s give back to the Java community together!