跳到主要内容

JEP 381: Remove the Solaris and SPARC Ports

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 with the express intent to remove them in a future release.

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)
    • The jdk.net.SocketFlow socket option in the jdk.net module (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

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.