Java 27 is only boring on the surface.

Half a year ago, I wrote an article with Lutske de Meer on why Java 26 is boring and why it is a good thing. Being boring also means being stable and predictable. Java 27, which came out the day this blog post comes out, is no different. While the language and the runtime library surface didn’t change with this release and only four non-preview JDK Enhancement Proposals (JEPs) got merged, the JVM changed significantly under the hood. So in this blog, I’ll tell you all about the new JEPs, how the preview ones have changed since JDK 26, and the notable changes in the JDK you might not read elsewhere (except in the release notes, which this text is heavily based on and Artur Skowroński‘s well researched JVM Weekly).

TL;DR: Java/JDK 27 got some new defaults and refinements, but the most consequential change is the removal of the JVM compiler interface.

Continue reading →

What do GitHub download statistics really mean?

After a summer being busy with other stuff, I’m looking forward to an autumn of blogging.

In this blog post, I’ll share a fun investigation into GitHub download statistics, especially their meaning. For every GitHub release, you can use the GitHub REST API to get the release count. But does this number represent the number of downloads started? Ended downloads? Or something else? I couldn’t find anything in the API docs, so I started a short investigation.

TL;DR: The download count for releases on GitHub seems to include simple release link accesses, with deduplication.

Continue reading →