JDK-8241787 : JEP 381: Remove the Solaris and SPARC Ports
  • Type: JEP
  • Component: hotspot
  • Priority: P4
  • Status: Closed
  • Resolution: Delivered
  • Fix Versions: 15
  • Submitted: 2020-03-28
  • Updated: 2021-08-28
  • Resolved: 2020-06-19
Related Reports
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Description
Summary
-------

Remove the source code and build support for the Solaris/SPARC, Solaris/x64, and Linux/SPARC ports. These ports were [deprecated for removal in JDK 14][jep362] with the express intent to remove them in a future release.

[jep362]: https://openjdk.java.net/jeps/362

Goals
-----

* Remove all source code specific to the Solaris operating system
* Remove all source code specific to the SPARC architecture
* Update documentation and source code comments for future releases

Non-Goals
---------

It is not a goal of this JEP to change the status of the affected ports in any prior release. The earliest release to which this JEP could be targeted is JDK 15.

Motivation
----------

Many projects and features currently in development such as Valhalla, Loom, and Panama require significant changes to CPU-architecture and operating-system specific code. Dropping support for the Solaris and SPARC ports will enable contributors in the OpenJDK Community to accelerate the development of new features that will move the platform forward.

Description
-----------

We will remove or adjust all of the Solaris- and SPARC-related code, build-system logic, and documentation.

* Remove directories:
    * `src/hotspot/cpu/sparc`
    * `src/hotspot/os/solaris`
    * `src/hotspot/os_cpu/solaris`
    * `src/hotspot/os_cpu/linux_sparc`
    * `src/hotspot/os_cpu/solaris_x86`
    * `src/java.base/solaris`
    * `src/java.desktop/solaris`
    * `src/jdk.attach/solaris`
    * `src/jdk.crypto.cryptoki/solaris`
    * `src/jdk.crypto.ucrypto/solaris`
    * `src/jdk.management/solaris`
    * `src/jdk.net/solaris`
* Remove or adjust C/C++ code guarded by the following preprocessor definitions and macros:
    * `SPARC`, `__sparc__`, `__sparc`, `__sparcv9`
    * `SOLARIS`, `__solaris__`
    * `SPARC_ONLY`, `NOT_SPARC`
    * `SOLARIS_ONLY`, `NOT_SOLARIS`
    * `SOLARIS_MUTATOR_LIBTHREAD`
    * `SPARC_WORKS`
* Remove or adjust Java code that checks for Solaris or SunOS, for example:
    * `System.getProperty(“os.name”).contains(“Solaris”)`
    * `System.getProperty(“os.name”).startsWith("SunOS")`
* Remove Solaris-specific features:
    * The `OracleUcrypto` provider in the `jdk.crypto.ucrypto` module ([8234870](https://bugs.openjdk.java.net/browse/JDK-8234870))
    * The `jdk.net.SocketFlow` [socket option][SocketFlow] in the `jdk.net` module ([8234871](https://bugs.openjdk.java.net/browse/JDK-8234871))
* Remove or adjust build system (automake, etc.) logic related to Solaris, SPARC, or Oracle Studio; specifically, the following variables and values:
    * `OPENJDK_{BUILD,TARGET}_OS` = `Solaris`
    * `OPENJDK_{BUILD,TARGET}_CPU_ARCH` = `sparc`
    * `TOOLCHAIN_TYPE` = `solstudio`
    * `is{Build,Target}Os` = `solaris`
    * `is{Build,Target}Cpu` = `sparcv9`
* Remove or adjust tests only relevant to, or only executed on, Solaris or SPARC, for example:
    * `jtreg` tests using
        * `@requires os.family == "solaris"`
        * `@requires os.arch == "sparc"`
        * `@requires os.arch == "sparcv9"`
        * `@requires (vm.simpleArch == "sparcv9")`
        * The `Platform.isSolaris()` or `Platform.isSparc()` test library methods, and the methods themselves
* Clean up problem lists to remove any references to solaris or SPARC
* Adjust comments in the source code referring to Solaris or SPARC, with care
    * In many cases the comments can simply be removed, but some references to Solaris and SPARC may still be relevant even after the ports are removed
* Remove the Solaris devkit creator scripts (under `make/devkit`)
* Remove any Solaris- or SPARC-specific logic in the JIB configuration file

[SocketFlow]: https://docs.oracle.com/en/java/javase/14/docs/api/jdk.net/jdk/net/SocketFlow.html

Testing
-------

Standard testing on other platforms will ensure the correctness of changes to common and shared files.

Risks and Assumptions
---------------------

Removing support for Solaris or SPARC could affect other in-tree ports in the very unlikely case that they rely on Solaris or SPARC source code.