state of openjdk-zlib on s390x
Jaikiran Pai
jaikiran.pai at oracle.com
Wed Nov 5 13:29:06 UTC 2025
Hello Eddy,
On 04/11/25 1:19 pm, Eduard Stefes wrote:
> ...
> # the problem
>
> due to the differences of the hardware implementation, some tests in
> the openjdk JREG tests fail(tracked here[1][2])
>
> - java/util/zip/CloseInflaterDeflaterTest.java
> fails due to dfltcc's flushing behaviour. The test should check if
> the openjdk wrapper around the jni and native library will
> successfully detect writes to closed output streams. This was
> created because there where bugs with and race conditions in the
> write/close/flush.
I had a look at https://bugs.openjdk.org/browse/JDK-8339216. That JBS
issue lacks the actual failure/exception that happens for that test.
Would it be possible to attach the .jtr file from a test execution where
it fails? Depending on what the failure is, I think it could be
addressed in that test.
> - tools/jlink/JLinkReproducibleTest.java:
> - tools/jar/modularJar/JarToolModuleDescriptorReproducibilityTest.java:
> This tests fail due to two calls to dfltcc will not generate the
> same compressed data for the same input data. I want to
> emphasize that RFC 1950 and 1951 do not guarantee the same output
> for two deflate/zlib data streams if feed the same input data.
I will have to read up the RFCs in detail, but these reproducibility
tests have intentionally be written to catch issues like these. We want
the ZIP/JAR artifacts generated for the JDK to be reproducible. We have
been fixing bugs in the JDK, wherever possible, to make these artifacts
reproducible.
> ## reproducible compression
>
> I don't know how much openjdk relies on reproducible data compression.
> I assume it is preferable if its possible to create the same .jar twice
> and get the same binary data. The zlib dfltcc implementation could be
> controlled via an env variable to disable the hardware compression[5].
> Also usually dftcc will only be used for certain compression levels and
> this can also be changed via env variables[6].
I am not familiar with that zlib code linked in [5] and [6]. But if you
or anyone else is familiar with it, then instead of this being a
environment variable evaluated at runtime on the host where the JDK
runs, maybe it could be implemented as a build time macro(?) in that
project? That would then allow you to pass a specific value during build
time of that project and control this behaviour? You would then still
have to do the work of "bundling" this zlib with the vendor specific JDK
that you build, but at least for that, the OpenJDK build has the
necessary infrastructure, see "--with-zlib" option in the build docs of
OpenJDK.
> # Finally
>
> I hope i did not overwhelm you all with this email. As I don't have a
> bugs.openjdk.org account, I thought the mailing list is the best place
> to discuss this mater.
These mailing lists are indeed the right place to discuss this level of
details. We are aware that recently there's been more than one variant
of "zlib" being distributed by OS vendors, and we have noticed
differences in the generated output from those implementations. These
differences may (and will very likely) keep increasing over time. I
think we will have to address each of these issues on a case-by-case
basis for now.
-Jaikiran
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20251105/9be6af88/attachment-0001.htm>
More information about the core-libs-dev
mailing list