Need reviewers and comments: 6989472: Provide simple jdk identification information in the install image
David Schlosnagle
schlosna at gmail.com
Tue Nov 30 06:13:50 UTC 2010
On Mon, Nov 29, 2010 at 5:44 PM, Kelly O'Hair <kelly.ohair at oracle.com> wrote:
>
> Need reviewers and comments:
> 6989472: Provide simple jdk identification information in the install image
> http://cr.openjdk.java.net/~ohair/openjdk7/jdk_release/webrev/
>
> With JDK6 Updates we purposely resisted many rebranding changes that could impacted
> customers, however at one point we had accidently changed the Windows DLL/EXE
> COMPANY value thinking that no one would be looking at it.
> We were wrong and this change cause Eclipse failures, so we are looking for a solution, see:
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=321390
> So we went back and change JDK6 Updates back the way it was, and learned a valuable lesson.
>
> But we have and will change JDK7 in this regard, so we wanted a better way for an app to
> know what it had it's hands on without using platform specific information in the binary files.
>
> The above change creates a small text file called "jdk.release" at the top of the install image
> with some basic values that could help direct any app using the jdk in constructing a command
> line or even being assured that this jdk install image will even work on your existing system.
> In the Eclipse case it was looking for "Sun", but I suspect it really wanted to know if the VM was
> "Hotspot" because I think it was trying to set a Hotspot specific PermGen option.
> In any case I think this jdk.release file should provide the necessary answers in the future.
>
> The make variable COMPANY_NAME determines the vendor name during a build,
> so a Linux 64bit build from a make command line like:
> make COMPANY_NAME="Test Company Name"
> should result in a jdk.release file that looks something like:
>
> os.name = Linux
> os.version = 2.6
> os.arch = amd64
> java.vendor = Test Company Name
> java.version = 1.7.0-internal
> java.vm.vendor = Test Company Name
> java.vm.name = Hotspot(TM)
> java.vm.version = 20.0-b02
>
> A formal Oracle jdk7 EA build on Linux 64bit should look something like:
>
> os.name = Linux
> os.version = 2.6
> os.arch = amd64
> java.vendor = Oracle Corporation
> java.version = 1.7.0-ea
> java.vm.vendor = Oracle Corporation
> java.vm.name = Hotspot(TM)
> java.vm.version = 20.0-b02
>
> Comments are welcome. Although, polite constructive comments are probably more what I'd like to see. ;^)
>
> -kto
>
Kelly,
Having been on the other side of the fence writing JVM independent
launchers and startup scripts, I can attest to the value of having a
standardized method of identifying a given JDK/JRE, so I don't want to
be negative and discourage you from pushing OpenJDK forward.
Unfortunately, if the intention is to truly allow identification of
any JDK/JRE and its underlying JVM so that the proper JVM specific
launcher arguments can be set, I'd think this file would need to
become part of the Java SE specification so that all vendors conform
to the same well-known file location, file format, and minimum
property set (similar to the minimum runtime system property set
defined by java.lang.System.getProperties() [1] [2]), or by
standardizing the output of the recently added -XshowSettings flag [3]
[4]. Are there any plans to include such standardizations in JSR 336
for Java SE 7?
The most valuable property that Eclipse and others are looking for is
java.vm.name, and this isn't a static compile time constant property
causing this catch-22. Instead it is dependent on the underlying
runtime JVM (e.g. server, client, jrockit, etc.) which in turn is
determined by the launcher arguments. Hardcoding java.vm.name to
"HotSpot(TM)" seems a little dirty and inconsistent to me. The vendor
specific jvm.cfg defines the available JVMs for a given architecture,
but even that file states that the file and format are unsupported and
will go away in the future. I'm also curious how the java.vm.name
value will change as more of JRockit is incorporated into OpenJDK.
Other properties such as os.* are also runtime system specific rather
than static compile time properties so these could be misinterpreted.
I'm assuming the format of the file would be the typical
java.util.Properties format, so I'd prefer naming the file
jdk.properties or something to that effect. I'm also including a few
snippets below of java.lang.System.getProperties() from various
environments that seemed potentially interesting for use in a
cross-platform JVM launcher. One interesting difference is that
OpenJDK does not include "HotSpot(TM)" in the java.vm.name string. Is
this due to trademark restrictions for OpenJDK?
Fortunately, the removal of Perm Gen in HotSpot improves the situation
as it is one less critical non-standard VM argument to specify!
- Dave
References:
[1] http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties()
[2] http://download.oracle.com/docs/cd/E15289_01/doc.40/e15062/sysprop.htm#i999740
[3] http://markmail.org/message/mqluo6kj3d2haizg
[4] http://hg.openjdk.java.net/jdk7/tl-gate/jdk/rev/32f3094b2c73
** OpenJDK 7 jdk7/jdk7 from November 29, 2010 on Ubuntu 10.04 Linux x86 **
java.runtime.name = OpenJDK Runtime Environment
java.runtime.version = 1.7.0-internal-david_2010_11_29_22_09-b00
java.specification.name = Java Platform API Specification
java.specification.vendor = Sun Microsystems Inc.
java.specification.version = 1.7
java.vendor = Sun Microsystems Inc.
java.vendor.url = http://java.sun.com/
java.vendor.url.bug = http://java.sun.com/cgi-bin/bugreport.cgi
java.version = 1.7.0-internal
java.vm.info = mixed mode
java.vm.name = OpenJDK Server VM
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Sun Microsystems Inc.
java.vm.specification.version = 1.0
java.vm.vendor = Sun Microsystems Inc.
java.vm.version = 20.0-b03
os.arch = i386
os.name = Linux
os.version = 2.6.32-23-generic
** OpenJDK 7 bsd-port from November 13, 2010 on Mac OS X 10.6.5 **
java.runtime.name = OpenJDK Runtime Environment
java.runtime.version = 1.7.0-internal-david_2010_11_16_20_46-b00
java.specification.name = Java Platform API Specification
java.specification.vendor = Oracle Corporation
java.specification.version = 1.7
java.vendor = Oracle Corporation
java.vendor.url = http://java.oracle.com/
java.vendor.url.bug = http://java.sun.com/cgi-bin/bugreport.cgi
java.version = 1.7.0-internal
java.vm.info = mixed mode
java.vm.name = OpenJDK 64-Bit Server VM
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Oracle Corporation
java.vm.specification.version = 1.0
java.vm.vendor = Oracle Corporation
java.vm.version = 20.0-b02
os.arch = amd64
os.name = Darwin
os.version = 10.5.0
** Apple JDK 1.6.0_22 on Mac OS X 10.6.5 **
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = 1.6.0_22-b04-307-10M3261
java.specification.name = Java Platform API Specification
java.specification.vendor = Sun Microsystems Inc.
java.specification.version = 1.6
java.vendor = Apple Inc.
java.vendor.url = http://www.apple.com/
java.vendor.url.bug = http://bugreport.apple.com/
java.version = 1.6.0_22
java.vm.info = mixed mode
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Sun Microsystems Inc.
java.vm.specification.version = 1.0
java.vm.vendor = Apple Inc.
java.vm.version = 17.1-b03-307
os.arch = x86_64
os.name = Mac OS X
os.version = 10.6.5
** Oracle JDK 1.6.0_22 on Windows XP SP3 **
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = 1.6.0_22-b04
java.specification.name = Java Platform API Specification
java.specification.vendor = Sun Microsystems Inc.
java.specification.version = 1.6
java.vendor = Sun Microsystems Inc.
java.vendor.url = http://java.sun.com/
java.vendor.url.bug = http://java.sun.com/cgi-bin/bugreport.cgi
java.version = 1.6.0_22
java.vm.info = mixed mode, sharing
java.vm.name = Java HotSpot(TM) Client VM
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Sun Microsystems Inc.
java.vm.specification.version = 1.0
java.vm.vendor = Sun Microsystems Inc.
java.vm.version = 17.1-b03
os.arch = x86
os.name = Windows XP
os.version = 5.1
** Sun/Oracle JDK 1.6.0_20 on Solaris 10 **
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = 1.6.0_20-b02
java.specification.name = Java Platform API Specification
java.specification.vendor = Sun Microsystems Inc.
java.specification.version = 1.6
java.vendor = Sun Microsystems Inc.
java.vendor.url = http://java.sun.com/
java.vendor.url.bug = http://java.sun.com/cgi-bin/bugreport.cgi
java.version = 1.6.0_20
java.vm.info = mixed mode
java.vm.name = Java HotSpot(TM) Server VM
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Sun Microsystems Inc.
java.vm.specification.version = 1.0
java.vm.vendor = Sun Microsystems Inc.
java.vm.version = 16.3-b01
os.arch = sparc
os.name = SunOS
os.version = 5.10
** BEA JRockit 1.6.0_14 R27.6.5 on Windows XP SP3 **
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = 1.6.0_14-b08
java.specification.name = Java Platform API Specification
java.specification.vendor = Sun Microsystems Inc.
java.specification.version = 1.6
java.vendor = BEA Systems, Inc.
java.vendor.url = http://www.bea.com/
java.vendor.url.bug = http://edocs.bea.com/jrockit/go2troubleshooting.html
java.version = 1.6.0_14
java.vm.info = compiled mode
java.vm.name = BEA JRockit(R)
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Sun Microsystems Inc.
java.vm.specification.version = 1.0
java.vm.vendor = BEA Systems, Inc.
java.vm.vendor.url = http://www.bea.com/
java.vm.vendor.url.bug = http://edocs.bea.com/jrockit/go2troubleshooting.html
java.vm.version = R27.6.5-32_o-121899-1.6.0_14-20091001-2107-windows-ia32
os.arch = x86
os.name = Windows XP
os.version = 5.1
** Oracle JRockit 1.6.0_20 R28.0.1 on Windows XP SP3 **
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = 1.6.0_20-b02
java.specification.name = Java Platform API Specification
java.specification.vendor = Sun Microsystems Inc.
java.specification.version = 1.6
java.vendor = Oracle Corporation
java.vendor.url = http://www.oracle.com/
java.vendor.url.bug =
http://download.oracle.com/docs/cd/E15289_01/go2troubleshooting.html
java.version = 1.6.0_20
java.vm.info = compiled mode
java.vm.name = Oracle JRockit(R)
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Sun Microsystems Inc.
java.vm.specification.version = 1.0
java.vm.vendor = Oracle Corporation
java.vm.vendor.url = http://www.oracle.com/
java.vm.vendor.url.bug =
http://download.oracle.com/docs/cd/E15289_01/go2troubleshooting.html
java.vm.version = R28.0.1-21-133393-1.6.0_20-20100512-2132-windows-ia32
os.arch = x86
os.name = Windows XP
os.version = 5.1
** IBM J9 1.6.0 SR7 on AIX 6.1 **
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = pap6460sr7-20091215_02 (SR7)
java.specification.name = Java Platform API Specification
java.specification.vendor = Sun Microsystems Inc.
java.specification.version = 1.6
java.vendor = IBM Corporation
java.vendor.url = http://www.ibm.com/
java.version = 1.6.0
java.vm.info = JRE 1.6.0 IBM J9 2.4 AIX ppc64-64
jvmap6460sr7-20091214_49398 (JIT enabled, AOT enabled)\
J9VM - 20091214_049398\
JIT - r9_20091123_13891\
GC - 20091111_AA
java.vm.name = IBM J9 VM
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Sun Microsystems Inc.
java.vm.specification.version = 1.0
java.vm.vendor = IBM Corporation
java.vm.version = 2.4
os.arch = ppc64
os.name = AIX
os.version = 6.1
More information about the build-dev
mailing list