<div dir="ltr"><div>Hi Magnus,</div><div><br></div><div>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!</div><div><br></div><div>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....</div><div><br></div><div>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...</div><div><br></div><div>Cheers</div><div>Andrew</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 20, 2023 at 2:44 PM Magnus Ihse Bursie <<a href="mailto:magnus.ihse.bursie@oracle.com">magnus.ihse.bursie@oracle.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

  
  <div>
    <p>On 2023-09-20 09:38, Andrew Leonard wrote:</p>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div>Thanks Alan,</div>
        <div><br>
        </div>
        <div>So different gcc, glibc, Xcode,.. agree, they need to be
          the same for identical bits.</div>
        <div>However, at the moment using the same toolchains, if you do
          a standard product build,</div>
        <div>and then a bootcycle build, of the same source, jrt-fs.jar
          will differ.</div>
        <div>I'll do some investigation of the make files to see if a
          "Build JDK" rebuild of jrt-fs.jar is</div>
        <div>feasible.</div>
      </div>
    </blockquote>
    <p>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.</p>
    <p>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.</p>
    <p>(Also, questions about the build process is preferably handled on
      the build-dev list)</p>
    <p>/Magnus<br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>Cheers</div>
        <div>Andrew</div>
        <div><br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Tue, Sep 19, 2023 at
          5:42 PM Alan Bateman <<a href="mailto:Alan.Bateman@oracle.com" target="_blank">Alan.Bateman@oracle.com</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On
          18/09/2023 14:51, Andrew Leonard wrote:<br>
          > Thanks for the clarification Alan.<br>
          ><br>
          > To ensure the reproducibility of the whole JDK image
          regardless of the <br>
          > specific bootjdk used, would it make sense once the
          "Build JDK" has <br>
          > been built, we re-build jrt-fs.jar again using the "Build
          JDK" ? Thus <br>
          > jrt-fs.jar will be consistent with the rest of the image
          in terms of <br>
          > what it is compiled with.<br>
          ><br>
          <br>
          The boot JDK will be JDK N-1, or the newly built JDK in the
          case of boot <br>
          cycle builds. It seems a bit of a stretch to have builds using
          different <br>
          tool chains to produce identical bits but maybe you mean
          something else.<br>
          <br>
          In any case, for jrt-fs.jar the important thing is that they
          are <br>
          compiled to --release 8 (that might rev at some points) so
          that <br>
          IDEs/tools can open a target run-time image as a file system
          and access <br>
          the classes/resources.<br>
          <br>
          -Alan.<br>
          <br>
        </blockquote>
      </div>
    </blockquote>
  </div>

</blockquote></div>