On 4/5/18 10:57 AM, Erik Joelsson wrote:
On 2018-04-05 09:15, Jonathan Gibbons wrote:
I think one aspect of this discussion that is important and has been overlooked is that there is no clear statement (specification?) anywhere of the requirements for building OpenJDK. Since forever, the unwritten rule has been N-1 [*] and that assumption has become pervasive. And, as we have seen in this discussion, there are many consequences to changing that assumption.

I agree that this should be well defined. This practice is currently documented in the build documentation in doc/building.md. (See the relevant text quoted below.) It is also enforced by configure, with no workaround short of editing the script.
I think that the decision to change the policy about the boot JDK is too important to hide in an edit in an Oracle-only build configuration file.

The intention of my second suggested patch was basically to keep allowing JDK 9 in configure for a while but being pretty sure it would stop working eventually. I don't like doing it that way. It's much better with a clear fail early error in configure, but the first suggested patch, that did just that, met such hard resistance and not a single positive review.

That seems bad, because you're kicking the bucket down the road in a way that will cause obscure failures because of parts of the system assuming a boot JDK of 10. I think it is better to  have the "boot JDK policy" discussion, and to arrive at a decision, and to then follow through on that decision, updating docs, scripts and source code accordingly.

If the policy is going to change from "use JDK N-1", that new policy needs to be documented.

If the policy is going to be that "use JDK N-1; you're on your own if you want to use JDK 9 as a boot JDK" then editing the configure script is surely going to be the least of the worries.

-- Jon

To be clear, I'm not advocating here for any specific value of N-1, N-2, etc,  I'm just saying the policy should be recorded in a more public place than make/conf/jib-profiles.js, and should implicitly apply to all folk wanting to build OpenJDK in the standard way, and not be just about "building JDK 11 at Oracle".

Is the building doc a good enough place? If not, please suggest something better.

```
Paradoxically, building OpenJDK requires a pre-existing JDK. This is called the
"boot JDK". The boot JDK does not have to be OpenJDK, though. If you are
porting OpenJDK to a new platform, chances are that there already exists
another JDK for that platform that is usable as boot JDK.

The rule of thumb is that the boot JDK for building JDK major version *N*
should be a JDK of major version *N-1*, so for building JDK 9 a JDK 8 would be suitable as boot JDK. However, OpenJDK should be able to "build itself", so an up-to-date build of the current OpenJDK source is an acceptable alternative. If
you are following the *N-1* rule, make sure you've got the latest update
version, since JDK 8 GA might not be able to build JDK 9 on all platforms.

Early in the release cycle, version *N-1* may not yet have been released. In that case, the preferred boot JDK will be version *N-2* until version *N-1*
is available.
```

/Erik


Reply via email to