Hi all,

For client code, that is all the "api-*" modules + Spark, I think requiring
Java 17 as a baseline is reasonable for now. We cannot go lower, because
the Iceberg dependencies force us to bump at least to 17.

Many other dependencies/projects already have Java 17 as a baseline, and a
bunch want to require 21 in the near future.

We should also consider the EOL (End of public updates) for Java 17 [1]:
- Oracle : 2024 (already EOL)
- Temurin, Red Hat, MS, IBM : 2027
- Corretto, Azul : 2029
Java 21 EOL is 2029 for the major distros (2028 for Oracle).

So I think that we should also consider Java 21 as the baseline for all
Polaris modules soon. Spark should not be a big issue, as Spark 4 requires
Java 17 or 21. Spark 3.5 on Java 21 doesn't seem to be officially
supported. I suspect it's not a long time until Spark 4 will be the
baseline.

Some highlights in the Java LTS versions:
- Java 11->17: Mostly source code style, G1 GC improvements
- Java 17->21: Generational ZGC (<1ms pause times advertised), virtual
threads, more pattern-matching, sequenced-collections, constants API
- Java 21->25: Smaller object headers (10-20% less heap pressure), scoped
values, stream gatherers, "better" AOT (faster startups), stable values

Side note: I hope that Hadoop eventually works on Java 25 soon-ish, so that
the Polaris service can benefit from these improvements.

All modules other than the api-* and Spark ones, can be changed to Java 21
IMO - including polaris-core.

There are dependencies on polaris-core in the "api-*" modules + Spark - for
two constants and the RealmContext.
It doesn't seem hard to remove the dependency to polaris-core from these
modules:
- the constants can be moved to the respective API module
- RealmContext can either be removed from the function signatures or moved
to a separate module.

Proposal for iterative steps:
1. (parallel)
  a) remove the dependencies on polaris-core from the api and spark modules
  b) set the Java baseline to 17 for all modulöes that are built using the
'polaris-client' convention
2. let all modules require 21, keep 17 for api and spark modules
3. (later)
  a) re-evaluate downstream dependencies (Hadoop) to bump the server side
to 25
  b) re-evaluate downstream dependencies (Spark, Hadoop) to bump the client
side to 21

WDYT?

Robert

[1] https://en.wikipedia.org/wiki/Java_version_history


On Fri, Feb 6, 2026 at 2:19 PM Romain Manni-Bucau <[email protected]>
wrote:

> Hi Alexandre,
>
> I'd say it depends when the client will be consummed, if you do expect it
> to be end of the year for end users, 21 sounds good, if right now, there
> are still some 3rd parties you can integrate with which are relying on
> security manager and moving to 21 can be an issue (even spark requires some
> specific tuning you might have or not in existing clusters).
> If there is no code difference, 17 doesnt hurt, if you want to leverage the
> new features my 2cts would be to try to anticipate the adoption and
> consider > september 21 would be okish (1 year after latest LTS it is ok to
> support only last 2 LTS in other words).
>
> Just my 2 cts, hope it helps a bit
>
> Romain Manni-Bucau
> @rmannibucau <https://x.com/rmannibucau> | .NET Blog
> <https://dotnetbirdie.github.io/> | Blog <https://rmannibucau.github.io/>
> | Old
> Blog <http://rmannibucau.wordpress.com> | Github
> <https://github.com/rmannibucau> | LinkedIn
> <https://www.linkedin.com/in/rmannibucau> | Book
> <
> https://www.packtpub.com/en-us/product/java-ee-8-high-performance-9781788473064
> >
> Javaccino founder (Java/.NET service - contact via linkedin)
>
>
> Le ven. 6 févr. 2026 à 13:54, Alexandre Dutra <[email protected]> a écrit
> :
>
> > Hi all,
> >
> > Yesterday during the sync meeting, we discussed the issue with the
> > upcoming Iceberg 1.11 release that will require Java 17 or higher.
> >
> > Polaris is currently built with Java 21 or higher [1], but the
> > compatibility level is set to Java 21 [2] for "server" modules, and
> > Java 11 for "client" modules (including polaris-core) [3].
> >
> > We agreed yesterday that all the client modules would have to be
> > upgraded. The question was: should we upgrade to Java 21 directly, or
> > just to Java 17 initially?
> >
> > For completeness, here is the list of client modules that need an
> upgrade:
> >
> > api/iceberg-service
> > api/management-model
> > api/management-service
> > api/polaris-catalog-service
> > extensions/federation/hadoop
> > extensions/federation/hive
> > plugins/spark/v3.5/spark
> > polaris-core
> > tools/config-docs/annotations
> > tools/immutables
> > tools/misc-types
> > tools/version
> >
> > For the sake of simplicity I would be in favor of 21 directly, but
> > don't have strong opinions.
> >
> > I'm curious to hear your thoughts on this topic!
> >
> > Thanks,
> > Alex
> >
> > [1]:
> >
> https://github.com/apache/polaris/blob/26a394e0ea68c68373a75251c97ab0711e637d20/settings.gradle.kts#L24
> > [2]:
> >
> https://github.com/apache/polaris/blob/9377aa731a64d6262dc7cc177d8a457d14c46f0a/build-logic/src/main/kotlin/polaris-server.gradle.kts#L24
> > [3]:
> >
> https://github.com/apache/polaris/blob/9377aa731a64d6262dc7cc177d8a457d14c46f0a/build-logic/src/main/kotlin/polaris-client.gradle.kts#L24
> >
>

Reply via email to