Bob,

I think we are creating a property mess and still doesn't not cover all
cases.

So IMHO, it's better to create something like

  os.arch.platform_string

and put there a string like

x86_64-pc-linux-gnu or armv7-linux-gnueabi-vfp

to solve immediate needs, then think about
good API to query capabilities for JDK9

-Dmitry


On 2013-01-09 00:29, Bob Vandette wrote:
> My team is in the process of proposing and implementing some System property 
> changes for JDK8 to help
> identify specific processor characteristics and operating system platforms 
> that might be needed in the future.  
> The immediate need is for the detection of arm hard-float ABI but the other 
> properties are being added in
> case we need them while the window is open.
> 
> 
> OS.ARCH ADDITIONS
> -----------------------------
> 
> Embedded processors support a variety of CPU configurations that are not all 
> binary compatible.  If a developer needs to provide native binaries for one 
> or more of these configurations, they need a way of querying the platform 
> constraints in order to load the appropriate JNI shared library.
>  
> Here's a specific example of this issue:
>  
> There are three predominate binaries that we support Java for Linux ARM 
> platforms on.
>  
> 1. Full soft-floatABI (No floating point instructions)
>  
> 2. VFP with softfp ABI (floating arguments are not passed in floating point 
> registers)
>  
> 3. VFP with hard float ABI (floating pointer arguments passes in registers)
>  
> The first two (1,2) options are binary compatible at the ABI level. The only 
> difference is the use of VFP instructions and if you are running on a 
> processor that can execute them.
>  
> The third option is a new ABI and is incompatible with the older ABIs unless 
> you are running on a system that supports multi-arch.
>  
> Developers are requesting a way to identify which ABI Java is currently using 
> in order to select a compatible native library when using JNI.
>  
> 
> 
> Solution
> I propose adding a few new System properties that can be used to provide 
> additional
> information beyond the basic os.arch values for ARM as well as other processor
> architectures. These properties will all be optional. Although these 
> properties are
> under the os name space, this was done to be consistent with the os.arch and 
> other
> pre-existing properties. The new properties being define here define the mode 
> in which the processor is being used by the running Java process rather than 
> defining the capabilities of the OS. These are obviously related but the OS 
> for example might be capable of running both 32 and 64 bit programs but the 
> value returned for os.arch.datamodel will return 32 if the running process is 
> a 32 bit Java process.
>  
> os.arch.endian
> ---------------------
>  
> This property if available will return either "big" or "little" depending on 
> which endian mode the processor is executing in.
>  
> os.arch.variant
> ---------------------
>  
> This property, if available, is a free form description of the specific 
> processor architecture. See examples below.
>  
> os.arch.fpu
> ----------------
>  
> This property, if available, describes the specific floating point execution 
> unit that is being used by the Java process. If floating point instructions 
> are emulated, this property will return "none".
>  
> os.arch.abi
> ----------------
>  
> This property, if available, describes if the floating point calling 
> convention is hardfloat or softfloat.
>  
> os.arch.datamodel
> ---------------------------
>  
> This property, if available, reports that the running process is executing in 
> either 32 bit or 64 bit mode.
>  
> The "release" file located in the top level JRE directory should also be 
> enhanced to include these new properties as OS_ARCH_ENDIAN, OS_ARCH_VARIANT, 
> OS_ARCH_FPU, OS_ARCH_ABI and OS_ARCH_DATAMODEL.
>  
> EXAMPLES
> ------------------
>  
> Here are some options for ARM processors (os.arch == arm)
>  
> os.arch.endian { big, little}
> os.arch.variant {cortex-a8, cortex-a9, armv5, armv6, armv7}
> os.arch.fpu {vfp, neon, none}
> os.arch.abi {softfloat, hardfloat}
> os.arch.datamodel {32, 64}
>  
> Here are some options for PowerPC (os.arch == ppc)
>  
> os.arch.endian { big, little}
> os.arch.variant {e500v2, e500mc, e600}
> os.arch.fpu {booke, altivec, spe, none }
> os.arch.abi {softfloat, hardfloat}
> os.arch.datamodel {32, 64}
> 
> * although existing properties exist for datamodel and endian in the sun.* 
> namespace, they are duplicated here
> for consistency and to make it easier for developers to find.
> 
> 
> OS.VARIANT ADDITIONS
> ------------------------------
> 
> The current os.name System property does not provide sufficient information 
> for identifying the specific platform that the Java runtime is running on.  
> New platforms that are derived from existing platforms but have unique 
> requirements may require special support.  If someone were to port JDK8 to 
> the Apple iOS platform, they could use much of the Mac OS X implemenation.  
> This platform shares most of the same underlying operating system interfaces 
> based on Darwin but some of the APIs are subsetted.  A similar issue would 
> arise in an attempt to support Java applications on Android operating systems 
> which is a unique implementation of Linux.
> 
>  
> Interface summary
> exported      external        property        os.variant, os.variant.version
>  
> Solution
> I propose we add a new System property (os.variant) that will provide the 
> specific OS implementation.
>  
> Since Android is really a specific variant of Linux, os.name will report 
> Linux while os.variant will report Android.
>  
> In addition, we will add an os.variant.version that will report the specific 
> version. In the Android example, os.version will report the underlying Linux 
> version, but os.variant.version will report the Android specific version 
> (2.6, 4.1 for example).
>  
> For Apple, I propose to maintain the current Mac OS X value for os.name but 
> use iPhone OS for the os.variant and the specific iPhone OS version for 
> os.variant.version.
>  
> These os.variant property will also be added to the "release" file located in 
> the top level JRE directory as OS_VARIANT.
>  
> Specification
> A new os.variant String property will be optionally available in a running 
> Java process to identify which Operating System Platform the Java process is 
> running on.
>  
> A new os.variant.version String property will be available in a running Java 
> process to identify the specific version of the Operating System Platform 
> that the Java processes is currently executing on.  This property is also 
> optional.
>  
> Examples of Operating System Platforms would be:
>  
> Android
> iPhone OS
> Ubuntu
> Debian
> Raspbian
> 
> 


-- 
Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* Give Rabbit time, and he'll always get the answer

Reply via email to