Hi Erik,

Thank you for the feedback. Yes, I think I agree with you, changing the
compilation to "interim" would resolve the reproducibility, and also would
be beneficial from the "secure dev" perspective having the classes built
with the "latest&greatest" compiler. I will create a bug & PR, and perform
some testing.

Cheers
Andrew


On Wed, Sep 20, 2023 at 10:50 PM <erik.joels...@oracle.com> wrote:

> Hello Andrew,
>
> The bootcycle-images target is AFAIK just a test. It's certainly not meant
> to be the authoritative way of building the JDK. Using JDK N-1 as bootjdk
> is the official way of producing a JDK of version JDK N. For convenience,
> and because it should work, we also allow JDK N. Vendors should definitely
> not be encouraged to use bootcycle builds to produce their JDK binaries.
>
> Switching the compiler to interim would help with the reproducibility
> issue. I would support that change. I don't think we can reasonably do
> something about the jar tool.
>
> /Erik
> On 9/20/23 08:12, Andrew Leonard wrote:
>
> Hi Magnus,
>
> So yes, jrt-fs.jar can be different between a normal build and a bootcycle
> build, which is where I sort of came in here... For example, building say
> jdk-21 using a jdk-20 bootjdk, you will find that there is an extra inner
> class in the standard build of jrt-fs.jar, due to the fact that the jdk-21
> compiler optimized the inner class generation for enum's somewhere, such
> that jdk/internal/jrtfs/JrtFileAttributeView$1.class only exists in a
> jdk-20 compiled jrt-fs.jar!
>
> I did experiment, and you can simply switch jrt-fs.jar to be
> COMPILER="interim", however when it comes to the jar's construction via
> "jar", it obviously uses the bootjdk "jar" command since the
> "interim-compiler" is just a compiler....
>
> In summary, I suspect this is just eluding to what the real purpose of
> "bootcycle-images" is, which I think is essentially a "test", and I suspect
> most vendors will either just do a standard "product-images" build, or
> perform their own bootcycle by doing two builds...
>
> Cheers
> Andrew
>
>
>
> On Wed, Sep 20, 2023 at 2:44 PM Magnus Ihse Bursie <
> magnus.ihse.bur...@oracle.com> wrote:
>
>> On 2023-09-20 09:38, Andrew Leonard wrote:
>>
>> Thanks Alan,
>>
>> So different gcc, glibc, Xcode,.. agree, they need to be the same for
>> identical bits.
>> However, at the moment using the same toolchains, if you do a standard
>> product build,
>> and then a bootcycle build, of the same source, jrt-fs.jar will differ.
>> I'll do some investigation of the make files to see if a "Build JDK"
>> rebuild of jrt-fs.jar is
>> feasible.
>>
>> I would not in general assume that a normal build and a bootcycle build
>> produce identical results. A bootcycle build will build the product using a
>> newer version of the JDK (viz. the one you just build from the sources),
>> and as such, changes to javac can result in different class file outputs,
>> etc. That being said, for large time periods of the JDK source code, a
>> normal build and a bootcycle build can certainly result in the same output,
>> since no changes have been made in the product that affects how .class
>> files are generated. But that is not guaranteed, nor is a difference
>> between normal and bootcycle build a sign of trouble or a defect.
>>
>> If jrt-fs.jar is consistently different between a bootcycle build and a
>> normal build, that sounds a bit odd, though. Especially since it should be
>> built with `--release 8` (or something like that) to ensure it is usable on
>> older Java; and that output ought not to really change as the JDK develops.
>>
>> (Also, questions about the build process is preferably handled on the
>> build-dev list)
>>
>> /Magnus
>>
>>
>>
>> Cheers
>> Andrew
>>
>>
>> On Tue, Sep 19, 2023 at 5:42 PM Alan Bateman <alan.bate...@oracle.com>
>> wrote:
>>
>>> On 18/09/2023 14:51, Andrew Leonard wrote:
>>> > Thanks for the clarification Alan.
>>> >
>>> > To ensure the reproducibility of the whole JDK image regardless of the
>>> > specific bootjdk used, would it make sense once the "Build JDK" has
>>> > been built, we re-build jrt-fs.jar again using the "Build JDK" ? Thus
>>> > jrt-fs.jar will be consistent with the rest of the image in terms of
>>> > what it is compiled with.
>>> >
>>>
>>> The boot JDK will be JDK N-1, or the newly built JDK in the case of boot
>>> cycle builds. It seems a bit of a stretch to have builds using different
>>> tool chains to produce identical bits but maybe you mean something else.
>>>
>>> In any case, for jrt-fs.jar the important thing is that they are
>>> compiled to --release 8 (that might rev at some points) so that
>>> IDEs/tools can open a target run-time image as a file system and access
>>> the classes/resources.
>>>
>>> -Alan.
>>>
>>>

Reply via email to