Ping - shouldn't we fix this issue before JDK 9 Feature Complete?

Could you please also comment on my remarks regarding the relation of
java.lang.Package.getSpecificationVersion() to JEP and 223 and and my
question why the Version class is not in a standard java package.

Thank you and best regards,
Volker


On Thu, Apr 7, 2016 at 12:11 PM, Volker Simonis
<volker.simo...@gmail.com> wrote:
> On Wed, Apr 6, 2016 at 8:28 PM, Iris Clark <iris.cl...@oracle.com> wrote:
>> Hi, Volker.
>>
>> Sorry for the delay.  I agree that the old implementation isn't quite 
>> correct.  I can't see us potentially having a JCP MR for a security or patch 
>> release (9.0.0.X and 9.0.X respectively).
>>
>> I could see a MR for an very unusual minor release (9.X).  If we had an MR 
>> there's no guarantee that we'd need to change the java.specification.version 
>> system property.   However, in the event that we did need to change the 
>> java.specification.version, it should match that release's $MAJOR.$MINOR, 
>> even if it meant that we had a sequence of specification version numbers 
>> with gaps.
>>
>> As an example, let's say that JDK 9 is released via umbrella JSR with 
>> java.specification.value of "9".  The system property would remain at "9" 
>> for all releases regardless of type until we choose to have a MR.  Should 
>> that MR occur while we're working on minor release 9.3.X and there is a need 
>> to change the value of java.specification.value, it would become "9.3" and 
>> would remain so in every release until the next MR.
>>
>> While we haven't changed the system property recently, I think that we need 
>> to future-proof ourselves a little bit for MRs as described above.
>>
>> Assuming that we change the syntax of java.specification.version to 
>> $MAJOR.$MINOR (zeros truncated, value dependent on JCP) then we need to make 
>> a similar change to the syntax of java.vm.specification.version.  [ Note 
>> that in the current implementation, I believe that the values of 
>> java.specification.version and java.vm.specification.version are tied to 
>> each other. ]
>>
>> Changing the syntax of java{.vm}?specification.version requires a CCC which 
>> I will file once we have agreement on the necessary changes.
>>
>
> Hi Iris,
>
> thanks for your comments. I don't think that using $MAJOR.$MINOR for
> java.specification.version is a good solution. As far as I understand,
>  JEP 223 (i.e. the new version scheme) is an Oracle/OpenJDK
> implementation detail. There is no JSR for this and it won't be
> enforced trough a JCK/TCK test (please correct me if I'm wrong). The
> new versioning schema references the JCP in that is says that the
> $MAJOR number corresponds to the "Java SE Platform Specification"
> number as specified by the JCP in the corresponding JSR. But not vice
> versa - i.e. there's no JSR referencing JEP 223.
>
> JEP 223 also says that the $MINOR number will be increased if this is
> mandated by a Maintenance Release of the relevant Platform
> Specification (by the JCP). But as you correctly noticed, in reality,
> $MINOR is expected to be increased frequently compared to the number
> of Java SE Maintenance Releases (if there will be any at all). So if
> the JCP should decide to publish a Maintenance Release, why should it
> name if after the then actual $MINOR update release number of the
> Oracle/OpenJDK. I think a natural choice for such a MR would be "9.1",
> no difference at which update release version Oracle/OpenJDK will be
> at that time.
>
> So I think it would be best to decouple java.specification.version
> from the Java versioning schema. We can start with
> java.specification.version == $MAJOR. If there should be a MR
> sometimes in the future, we can just set java.specification.version to
> the version number of that MR, whatever that will be. That's exactly
> what this change is about.
>
> Regarding the value of java.vm.specification.version I'm not sure what
> it actually means at all. Until Java 1.6,
> java.vm.specification.version has always been "1.0", while
> java.specification.version has changed from 1.4, to 1.5 and 1.6
> (notice that java.specification.version has never been changed to
> 1.4.2, it was 1.4 for Java 1.4.0 as well as for 1.4.2). Starting with
> Java 7, java.vm.specification.version is the same like
> java.specification.version (i.e. 1.7 and 1.8) but I'm not sure if that
> is mandated by JCP and if it will be possible that these numbers will
> diverge for a Java release. I.e. will it be possible to have a new
> Java version (say Java 10) where the VM specification (and thus
> java.vm.specification.version) will remain unchanged (say "9")? From
> my understanding, that should be possible. Especially for a MR, it
> seems highly probable to me that the java.specification.version will
> be increased, but the VM specification (and thus
> java.vm.specification.version) will remain unchanged.
>
> So again, I think we shouldn't tie java.vm.specification.version to
> java.specification.version and simply start with
> java.vm.specification.version == $MAJOR. The current implementation
> already does this correctly. While the java.specification.version
> property comes from VERSION_SPECIFICATION in
> common/autoconf/spec.gmk.in and it is being set in
> jdk/src/java.base/share/native/libjava/System.c the
> java.vm.specification.version property is set being in
> hotspot/src/share/vm/runtime/arguments.cpp directly to the major Java
> version number. Because of this difference, there are currently no
> problems with the java.vm.specification.version property caused by the
> new versioning schema.
>
> As a side note: while I wrote all this down, I realized that we have
> java.lang.Package.getSpecificationVersion() in the class library which
> returns the specification version of a specific package. But this API
> is not mentioned anywhere in JEP 223. Shouldn't the output of
> java.lang.Package.getSpecificationVersion() be aligned with JEP 223
> and java.vm.specification.version as well?
>
> And a final question. Why did we put jdk.Version into the jdk package?
> As far as I know, jdk is not a standard Java package and thus not
> enforced by the Java standard (please correct me if I'm wrong).
> Shouldn't the Version class be in a standard Java package such that
> it's implementation will be mandatory for all Java implementations?
>
> Regards,
> Volker
>
>> Regards,
>> Iris
>>
>> -----Original Message-----
>> From: Volker Simonis [mailto:volker.simo...@gmail.com]
>> Sent: Tuesday, April 05, 2016 10:26 AM
>> To: Java Core Libs
>> Cc: verona-...@openjdk.java.net
>> Subject: Re: RFR(XXS): 8149519: Investigate implementation of 
>> java.specification.version
>>
>> Hi,
>>
>> can somebody please review this trivial change?
>>
>> Regards,
>> Volker
>>
>>
>> On Mon, Apr 4, 2016 at 6:47 PM, Volker Simonis <volker.simo...@gmail.com> 
>> wrote:
>>> Hi,
>>>
>>> can I please have a review for this small fix:
>>>
>>> http://cr.openjdk.java.net/~simonis/webrevs/2016/8149519
>>> https://bugs.openjdk.java.net/browse/JDK-8149519
>>>
>>> Currently the value of the java.specification.version property comes
>>> from VERSION_SPECIFICATION in common/autoconf/spec.gmk.in. It is
>>> currently set to VERSION_NUMBER which is the same value which is also
>>> used for the java.version property.
>>>
>>> This is a bad idea, because VERSION_NUMBER is a dot separated sequence
>>> of numbers (e.g. 9.0.1) which is expected to change frequently (i.e.
>>> for every build and/or update version). If we are configuring with
>>> "--with-version-patch=1" for example, VERSION_NUMBER and java.version
>>> will be "9.0.0.1". But it makes no sense that VERSION_SPECIFICATION
>>> and java.specification.version have the same, dotted value. And it
>>> breaks a lot of legacy applications which parse
>>> java.specification.version as a float number. That code would still
>>> work if java.specification.version would be a concrete number (e.g.
>>> '9' or '10').
>>>
>>> I suggest to set VERSION_SPECIFICATION to VERSION_MAJOR in
>>> common/autoconf/spec.gmk.in. This should be the "right value" until we
>>> get a specification change during a major release which hasn't
>>> happened for quite some time now.
>>>
>>> Regards,
>>> Volker

Reply via email to