Thank you all for the inputs. I see we currently have agreements on

1. bumping straight to Java 17 for the build system.

For the concern for

> (we need to be sure we don't rely on pieces of the standard library that
are missing in JRE8)

in Java9+ `--release 8` javac flag does exactly this, and beam already set
this flag if build in Java9+ [1]

2. It's not time to drop Java 8 support in the near future, and we should
continue testing on Java8 compatibility until then.

[1]
https://github.com/apache/beam/blob/8a4a250076bde59fadb89b2e580e6e98d064b26d/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy#L1147


On Mon, Jul 1, 2024 at 11:50 AM Danny McCormick via dev <dev@beam.apache.org>
wrote:

> ;tldr - I think we are too early to drop Java 8 support, and that means we
> need to keep building/testing Java 8.
>
> > Java8 has ended premier support in March 2022, the next LTS, Java11 also
> ended premier support in Sept 2023. Should we bump the default Java version
> to 17 for CI at once (while keeping Java8/11 bytecode compatibility for the
> build)?
>
> +1 on bumping straight to Java 17 - it seems like we don't gain a whole
> lot by moving to 11 comparatively.
>
> > This would need to be rigorously tested. How to ensure sufficient
> > coverage? (This is where compiling against old SDKs may have an
> > advantage. Or would using --source and --target be sufficient? Or will
> > we still run into issues with our dependencies dropping support for
> > old versions anyway?)
>
> Agreed. One option is to run selected suites against both Java 8, 11, and
> 17 (which we already do, this would just consolidate the build step).
>
> > As long as we choose to maintain backwards compatibility with version
> > X, is there any advantage to providing separate artifacts for version
> > Y>X? Seems like it would mostly just complicate things.
>
> +1 - I would prefer avoiding this until we *have *to (e.g. if
> dependencies drop support).
>
> > I also think a bigger open question is how long we will maintain
> > support for Java 8 (11, etc.) Is there a good measure for when the
> > ecosystem (or, more targeted, our users) have moved on?
>
> Some useful data points here:
>
> - Temurin Java 8 support is through the end of 2026 [1]
> - Protobuf Java 8 support is through 2027 Q1 [2]
> - Oracle Java 8 Extended Support is through 2030 Q4 [3]
> - Spark will continue to support Java 8 through 2030 [4]
> - Flink Java 8 support is alive, but deprecated [5]
>
> I think we are too early to drop Java 8 support, so we need to keep
> testing it.
>
> Thanks,
> Danny
>
> [1] https://adoptium.net/support/
> [2]
> https://cloud.google.com/java/docs/supported-java-versions#keeping_production_systems_current
> [3] https://endoflife.date/oracle-jdk
> [4]
> https://community.cloudera.com/t5/Community-Articles/Spark-and-Java-versions-Supportability-Matrix/ta-p/383669
> [5]
> https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/deployment/java_compatibility/
>
>
>
> On Mon, Jun 24, 2024 at 8:00 PM Robert Bradshaw via dev <
> dev@beam.apache.org> wrote:
>
>> On Mon, Jun 24, 2024 at 9:59 AM Kenneth Knowles <k...@apache.org> wrote:
>> >
>> > Step 1 and 2 sound great. (I tried a first step with
>> https://github.com/apache/beam/pull/29992 but didn't have bandwidth)
>> >
>> > This will make it easier for people to get started with beam without
>> having to deal with ancient version compatibility and installing old Java,
>> etc. Even as a minor point, many of our build plugins are out of date
>> because they have moved on to more modern Java versions.
>>
>> +1
>>
>> > Questions:
>> >
>> >  - Could Beam move to requiring latest Java to build and just relying
>> on "--release" flag or "--target" flag to build the artifacts we release?
>>
>> I probably wouldn't track the very latest, but whatever is generally
>> available on relatively modern systems (and +1 to just using --target
>> for artifacts).
>>
>> > (we need to be sure we don't rely on pieces of the standard library
>> that are missing in JRE8)
>>
>> This would need to be rigorously tested. How to ensure sufficient
>> coverage? (This is where compiling against old SDKs may have an
>> advantage. Or would using --source and --target be sufficient? Or will
>> we still run into issues with our dependencies dropping support for
>> old versions anyway?)
>>
>> >  - Can we release multi-release jars to provide updated versions for
>> different JDK versions?
>>
>> As long as we choose to maintain backwards compatibility with version
>> X, is there any advantage to providing separate artifacts for version
>> Y>X? Seems like it would mostly just complicate things.
>>
>> I also think a bigger open question is how long we will maintain
>> support for Java 8 (11, etc.) Is there a good measure for when the
>> ecosystem (or, more targeted, our users) have moved on?
>>
>> > Kenn
>> >
>> > On Mon, Jun 24, 2024 at 9:44 AM Yi Hu via dev <dev@beam.apache.org>
>> wrote:
>> >>
>> >> Dear Beam developers,
>> >>
>> >> As Java8 has gone through end-of-public-update, many Beam dependencies
>> have already deprecated Java8 (see [1]), and dropping Java8 supports are
>> planned.
>> >>
>> >> Beam hasn't deprecated Java8, moreover, currently Beam CI is using
>> Java8 to test and release Beam. Referring to other Apache projects, I
>> hereby suggest a 3-step process for dropping Java 8 support:
>> >>
>> >> 1. Switch CI to Java11, while retain the byte code compatibility to
>> Java8 for Beam releases. Tracked in  [1].
>> >>
>> >>     This won't affect Beam developers and users currently on Java8,
>> and can be done immediately
>> >>
>> >> 2. Require Java11+ to build Beam, deprecate Java8 support [2].
>> >>
>> >>     This still won't affect Beam users currently on Java8, but for
>> Beam developers build custom Beam artifacts, they will need Java11+
>> >>
>> >> 3. Drop Java8 support
>> >>
>> >>     This will affect Beam users. Targeted in a medium-long future
>> date, when Beam's major dependencies already dropped Java8 support
>> >>
>> >> There are a few details for further decision
>> >>
>> >> * Java8 has ended premier support in March 2022, the next LTS, Java11
>> also ended premier support in Sept 2023. Should we bump the default Java
>> version to 17 for CI at once (while keeping Java8/11 bytecode compatibility
>> for the build)?
>> >>
>> >> * Timeline of deprecating Java8.
>> >>   I am volunteering to work on [1] which is targeted to Beam 2.58.0;
>> naturally (2) would be Beam 2.59.0 or 2.60.0.
>> >>
>> >> Please provide your thoughts on the general process, and highlight
>> >> particular areas of concern.
>> >>
>> >> [1] https://github.com/apache/beam/issues/31677
>> >>
>> >> [2]
>> https://www.oracle.com/java/technologies/java-se-support-roadmap.html
>> >>
>> >> Regards,
>> >> Yi
>> >>
>> >> --
>> >>
>> >> Yi Hu, (he/him/his)
>> >>
>> >> Software Engineer
>> >>
>> >>
>>
>

Reply via email to