How to Build Java Applications Today: #52
Welcome to my weekly newsletter “How To Build Java Applications Today”! I read all the Java newsletters, so you don’t have to! And it’s “Java news with a smile”.
Quote of the Week
How vain it is to sit down to write when you have not stood up to live.
Spring One is over — and it was bad news to me. And I’m not talking about these sessions where one person always sits awkwardly and we suffer from badly scripted questions and annoying banter. Or people trying to be funny but failing (much more so in the first day’s morning keynote than in the second one). Or people “ acting out a short film “.
No, I’m talking about the actual announcements for Spring Boot. Read on to find out!
22 YEARS OF FULL-STACK JAVA FOR HIRE NEXT FEBRUARY
I’m a full-stack Java developer with 22 years of experience: Spring Boot, Angular, Flutter. I’m looking for a project in February 2022, in Milton Keynes, London, or remote. I’ll work as a contractor or fixed-term employee but don’t take permanent positions.
Interested? Then check out my resume & work samples!
“Works with OpenJDK” Campaign Confuses
Geertjan Wielenga is the Senior Director of Open Source Projects at Azul, the “the largest company 100% focused on Java and the JVM”. He unveiled a “Works with OpenJDK” campaign last week: Geertjan wants us to “attach the badge below to everywhere, everything, and everyone that works with any distribution of the OpenJDK”.
I think in its current state, this campaign is confusing to the Java community. Here’s why.
I’m a fan: I’m very happy with OpenJDK! It powers the back-end of my start-up. It works, it’s free, and I could buy support if I wanted to. Brilliant!
Geertjan meant well: I’m sure Geertjan meant well with this initiative. Unfortunately, this is too confusing right now.
Every JVM is OpenJDK today: According to Wikipedia, every mainstream Java distribution — including Oracle’s commercial Java and GraalVM — is an OpenJDK build. In essence, “OpenJDK” equals “Java runtime” today. Which turns the “Works with OpenJDK” into “This Java program works with a Java runtime”. Duh!
Nothing new to people in the know: Because “OpenJDK” equals “Java runtime” today, of course OpenJDK already works with any Java program! If you know that, then this badge doesn’t tell you anything new.
Confuses people not in the know: But if you don’t know that OpenJDK already works with any Java program, then you may ask: “Does this Java program not work with OpenJDK? It’s missing the badge!” And then you ask us developers about it. Or you try not to use OpenJDK for that Java program, which doesn’t work. And then you ask us developers about it.
What does it really mean: What OpenJDK distribution does that badge refer to? I count 16 in Wikipedia list, leaving out GraalVM Enterprise and ojdkbuild. Does the “any” in Geertjan’s “works with any distribution” mean “ one of these distributions”, or does it mean “ all distributions”? Does it mean that a Java program also works when compiled to a native binary with GraalVM, an OpenJDK distribution? And which version of Java is the badge referencing — 8, 11, or 17, “one of” or “all”?
What does the badge wearer have to do: If we want to put that badge onto our Java programs, what do we need to do? Do we run special “Works with OpenJDK” tests? Do we run our own tests? What if we don’t have any tests — does “Starts without crashing” count as “works” then? Do we need to test with all 16+ OpenJDK distributions, times 3 (Java 8/11/17)?
Who’s behind this: Is this Geertjan’s personal project? Is it an Azul one? Is it an initiative of the OpenJDK project? Are other OpenJDK projects backing this? Are the “ Friends of OpenJDK”? Will Oracle sue me if I put this badge on my website? After all, Oracle owns the OpenJDK trademark and has vicious lawyers!
It doesn’t say “powered”: This campaign would be better if it said “ Powered by OpenJDK”. Why? Because that would make clear that it’s a marketing campaign, a branding exercise, an image initiative. You know, like the “Intel inside” ads and computer stickers. Or like the “Powered by X” logos on websites. Which I think is a goal here because Geertjan said he wants to “celebrate the OpenJDK”. But nope, it says “Works with” which is an unfortunate choice of words.
Frameworks & Libraries
Spring Boot 3 15+ months way
Here’s the bad news from Spring One: Spring Boot 3, the version that is fully optimized for native compilation, is 15+ months away. And even then, some of the libraries from the Spring Initializr probably still won’t work in native mode.
Here’s the good news: Spring Boot 3 requires Java 17, boosting the adoption of the latest Java LTS version, and Jakarta EE 9 (the “package rename release”). It will have observability (tracing & metrics) baked in and will be more competitive with Quarkus, Micronaut, and co.
What’s taking so long?
Spring Framework 6 is. It’s the foundation for Spring Boot 3 and currently scheduled for release in October 2022. Yes, October next year. Spring Boot 3 will follow afterwards. I think Spring Framework lead Juergen Hoeller even said that Spring Boot 3 may slip into 2023. But I can’t find this in Slack, and the session videos aren’t available yet.
So this is the first year without a major Spring framework release since 2010. Why?
I think there are four reasons:
VMware optimizes Spring for native execution. Cloud-native frameworks like Quarkus and Micronaut currently have much better start-up time and memory consumption than Spring Boot with Spring Native.
Spring 6 will have observability baked into each framework. That means a new Spring framework with abstract tracing and metrics. Through adapters, frameworks like OpenZipkin or OpenTelemetry implement tracing, while Micrometer delivers the metrics.
Jakarta EE 9 is the new baseline. Yes, Spring uses Java/Jakarta EE in areas like servlets or Java persistence! Jakarta EE 9 renamed all packages from
jakarta. And some projects that Spring uses - like Hibernate - are at least a couple of months away from a release that's compatible with Jakarta EE 9.
Finally, VMware removes cruft from Spring, such as autowiring setters by name/type or maybe even EJB.
I don’t think that the decision for Java 17 had a big impact there: Juergen Hoeller said in Slack that “the revision of our general availability target certainly helps there [requiring Java 17]”. So that sounds as if Java 17 is a byproduct of pushing back the release date, not a major driver.
What happens until Spring Boot 6 appears?
Spring 5.3 “remains in active development”, so we’ll get more maintenance releases. For instance, it will soon support Java 17.
The same goes for Spring Boot: Spring Boot 2.6 will support Java 17 this November. Spring Boot 2.7 next May will have “further features and infrastructure upgrades” (Java 18?).
And finally: You can use Spring Native today to turn your Spring Boot programs into native applications. Spring Native is still in beta, and many libraries out there don’t work in native mode. Still, watch out for version 0.11 that has many optimizations. It’s planned for November 19, following the release of GraalVM 21.3 and Spring Boot 2.6.
When can you see what happened at Spring One? If you’re registered, then you should see the session videos on Tuesday, September 7. I’m not sure if and when they’ll be on YouTube — last year, it took four weeks. The conference also had Zoom Q&As after the session. I don’t think they were recorded. And finally, there’s also a Slack space for the conference. I don’t know how long this one will be up.
I’ll have a follow-up article next week with more details.
More Enterprises Have to Pay for Docker Desktop
Starting February 1 next year, enterprise users now have to pay at least US$ 5 per user per month for Docker Desktop — unless they have fewer than 250 employees and less than $10 million in annual revenue.
Many years ago, I learned that when you have to share bad news, then that bad news should be in your first or second sentence. See my Spring One article above as an example.
This way of thinking is virtually unknown in the business world. If a company gives you bad news, it’s usually buried way deep in a so-called “sh*t sandwich”: First, some good news, then the bad news, then some good news again.
Here’s an especially egregious example from the Stack Overflow CEO. He buried the bad news of “We laid off staff and may sunset some or all of our ‘Stack Overflow Talent’ business” in a mountain of corporate mumbo jumbo. He didn’t even have the guts to say “We laid them off”, resorting to “impacted” and “transitions” instead. And you got to love the headline for its brilliant buzzword blooming: “An update on our product-led SaaS transformation”. If an announcement starts with “An update on”, then there’s usually bad news inside!
Docker just shared some bad news: Enterprise users now have to pay at least US$ 5 per user per month for Docker Desktop, unless they have fewer than 250 employees and less than $10 million in annual revenue (a “small business” in Docker terms).
So was the headline “Most Enterprise Customers Now Have to Pay for Docker Desktop”?
Of course, it wasn’t. Docker opted for “Docker is Updating and Extending Our Product Subscriptions” instead. I suppose “extending” refers to the “We want your money” part? The announcement is also overly long and repetitive. Am I alone in thinking that bad news doesn’t get better in an oversized “sh*t sandwich”?!
Here’s another head-scratcher: These new Docker policies took effect the day of the announcement — August 31. But they have a grace period until January 31 next year for those enterprises that now have to pay under these new terms.
If I was such an enterprise, I’d be royally annoyed by this move. Because as an enterprise, I like to plan my budget ahead of time. And now a vendor tells me that I have to pay for a formerly free product — on the day that I have to start paying! Sure, there’s a grace period, but questions remain: Could Docker shorten the grace period? Is this a financial liability I now have to report? And what moves will Docker now pull in the future?
In the end, Docker only collects money from these enterprises in February next year. So why didn’t they simply let the new terms start February 1 next year? They’d get the same amount of money but less grief from enterprises. Again, enterprises love certainty and the ability to plan ahead. And Docker’s move flies in the face of these expectations.
So Docker’s now collecting more money from enterprises. You know, the same enterprises that pay money to the “Docker Enterprise platform business”. Oh, wait, Docker sold that part of its business two years ago. I guess somebody over there remembered “enterprises pay for software” and came up with these new policies…
Yay — Quarkus has another release! I think this is the first time that they skipped the “.0” release altogether because it had a showstopper bug (dev mode didn’t work on Windows). From the “You can’t make this stuff up” department: This release focused on fixing bugs and improving usability & documentation…
Karsten Silz is the author of this newsletter. He is a full-stack web & mobile developer with 22 years of Java experience, author, speaker, and marathon runner. Karsten got a Master’s degree in Computer Science at the Dresden University of Technology (Germany) in 1996.
Karsten has worked in Europe and the US. He co-founded a software start-up in the US in 2004. Karsten led product development for 13 years and left after the company was sold successfully. He co-founded the UK SaaS start-up “ Your Home in Good Hands “ as CTO in 2020. Since 2019, Karsten also works as a contractor in the UK.
Originally published at https://bpfnl.substack.com on September 6, 2021.