CINXE.COM
JEP 501: Deprecate the 32-bit x86 Port for Removal
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii" /><meta http-equiv="Content-Type" content="text/html; charset=us-ascii" /><title>JEP 501: Deprecate the 32-bit x86 Port for Removal</title><link rel="shortcut icon" href="/images/nanoduke.ico" /><link rel="stylesheet" type="text/css" href="/page.css" /><script type="text/javascript" src="/page.js"><noscript></noscript></script><script src="https://cdn.usefathom.com/script.js" data-site="KCYJJPZX" defer="yes"></script><style type="text/css" xml:space="preserve"> TABLE { border-collapse: collapse; padding: 0px; margin: 1em 0 1em 2em; } TR:first-child TH, TR:first-child TD { padding-top: 0; } TH, TD { padding: 0px; padding-top: .5ex; vertical-align: baseline; text-align: left; } TD + TD, TH + TH { padding-left: 1em; } TD:first-child, TH:first-child, TD.jep { text-align: right; } TABLE.head TD:first-child { font-style: italic; padding-left: 2em; white-space: nowrap; } PRE { padding-left: 2em; margin: 1ex 0; font-size: inherit; } TABLE PRE { padding-left: 0; margin: 0; } TABLE.jeps TD:first-child + TD, TABLE.jeps TD:first-child + TD + TD { padding-left: .5em; } TABLE.jeps TD:first-child, TABLE.jeps TD:first-child + TD, TABLE.jeps TD:first-child + TD + TD { font-size: smaller; } TABLE.jeps TD.cl { font-size: smaller; padding-right: 0; text-align: right; } TABLE.jeps TD.cm { font-size: smaller; padding-left: .1em; padding-right: .1em; } TABLE.jeps TD.cr { font-size: smaller; padding-left: 0; } TABLE.jeps TD.z { padding-left: 0; padding-right: 0; } TABLE.head TD { padding-top: 0; } </style></head><body><div id="main"><h1>JEP 501: Deprecate the 32-bit x86 Port for Removal</h1><table class="head"><tr><td>Owner</td><td>Aleksey Shipilev</td></tr><tr><td>Type</td><td>Feature</td></tr><tr><td>Scope</td><td>Implementation</td></tr><tr><td>Status</td><td>Integrated</td></tr><tr><td>Release</td><td>24</td></tr><tr><td>Component</td><td>hotspot / other</td></tr><tr><td>Discussion</td><td>hotspot dash dev at openjdk dot org</td></tr><tr><td>Effort</td><td>S</td></tr><tr><td>Duration</td><td>S</td></tr><tr><td>Relates to</td><td><a href="449">JEP 449: Deprecate the Windows 32-bit x86 Port for Removal</a></td></tr><tr><td></td><td><a href="8345168">JEP draft: JEP Draft: Remove the 32-bit x86 Port</a></td></tr><tr><td></td><td><a href="479">JEP 479: Remove the Windows 32-bit x86 Port</a></td></tr><tr><td>Reviewed by</td><td>Coleen Phillimore, Magnus Ihse Bursie, Vladimir Kozlov</td></tr><tr><td>Endorsed by</td><td>Vladimir Kozlov</td></tr><tr><td>Created</td><td>2024/08/13 09:08</td></tr><tr><td>Updated</td><td>2024/11/28 10:00</td></tr><tr><td>Issue</td><td><a href="https://bugs.openjdk.org/browse/JDK-8338285">8338285</a></td></tr></table><div class="markdown"><h2 id="Summary">Summary</h2> <p>Deprecate the 32-bit x86 port, with the intent to remove it in a future release. This will thereby deprecate the Linux 32-bit x86 port, which is the only 32-bit x86 port remaining in the JDK. It will also, effectively, deprecate any remaining downstream 32-bit x86 ports. After the 32-bit x86 port is removed, the architecture-agnostic Zero port will be the only way to run Java programs on 32-bit x86 processors.</p> <h2 id="Goals">Goals</h2> <ul> <li> <p>Unblock new features that require platform-specific support from having to implement 32-bit x86 fallbacks.</p> </li> <li> <p>Mark the port, and related port-specific features, as deprecated for removal in the relevant documentation, configuration scripts, and test jobs.</p> </li> </ul> <h2 id="Non-Goals">Non-Goals</h2> <ul> <li>It is not a goal to deprecate any other 32-bit port.</li> </ul> <h2 id="Motivation">Motivation</h2> <p>As noted in a <a href="https://mail.openjdk.org/pipermail/jdk-dev/2024-July/009223.html">recent discussion</a> involving the current 32-bit x86 maintainer and interested parties, the cost of maintaining this port outweighs the benefits. Maintaining parity with new features, such as Loom, the Foreign Function & Memory API (FFM), the Vector API, late GC barrier expansion, etc., is a major opportunity cost. Deprecating and eventually removing the port would allow OpenJDK developers to accelerate the development of new features and enhancements.</p> <p>Deprecating this port in JDK 24 will allow us to remove it in JDK 25.</p> <h2 id="Description">Description</h2> <p>An attempt to configure a 32-bit x86 build will produce:</p> <pre><code>$ bash ./configure ... checking compilation type... native configure: error: The 32-bit x86 port is deprecated and may be removed in a future release. \ Use --enable-deprecated-ports=yes to suppress this error. configure exiting with result code 1 $</code></pre> <p>The build configuration option <code>--enable-deprecated-ports=yes</code> will suppress the error and continue:</p> <pre><code>$ bash ./configure --enable-deprecated-ports=yes ... checking compilation type... native configure: WARNING: The 32-bit x86 port is deprecated and may be removed in a future release. ... Build performance summary: * Cores to use: 32 * Memory limit: 96601 MB The following warnings were produced. Repeated here for convenience: WARNING: The 32-bit x86 port is deprecated and may be removed in a future release. $</code></pre> <p>There will be no guarantee that the port will build, much less function.</p> <p>In order to unblock mainline development, we have already disabled Linux 32-bit x86 builds in the GitHub Actions defined in the JDK source repository (<a href="https://bugs.openjdk.org/browse/JDK-8338286">8338286</a>). We will completely remove these build jobs as part of this deprecation.</p> <h2 id="Risks-and-Assumptions">Risks and Assumptions</h2> <ul> <li> <p><em>There is no pressing industry need for 32-bit x86 with modern JDKs</em> — We assume that the x86 world has moved firmly to the 64-bit realm. No new 32-bit-only x86 hardware is being manufactured. The remaining 32-bit x86 deployments are legacies. Industry support has dwindled to match this reality. Windows 10, the last Windows operating system to support 32-bit operation, <a href="https://learn.microsoft.com/lifecycle/products/windows-10-home-and-pro">will reach End of Life in October 2025</a>, and the Windows 32-bit x86 port has already been removed from the JDK (<a href="https://openjdk.org/jeps/479">JEP 479</a>). Debian <a href="https://lists.debian.org/debian-devel-announce/2023/12/msg00003.html">plans to stop supporting 32-bit x86</a> in the near future.</p> </li> <li> <p><em>There is enough margin for backport safety with releases that still support 32-bit x86</em> — Not having the Linux 32-bit x86 port in the main line means that backports from the main line to actively supported LTS releases will be more complicated, since they will have to be reconciled with the Linux 32-bit x86 port still in those releases. We assume that the majority of older Linux 32-bit x86 application stacks are still on JDK 8, to which we do not backport often, which mitigates this risk. There will still be additional work for Linux 32-bit x86 maintainers in newer LTS releases to make sure their builds work.</p> </li> <li> <p><em>The maintenance of other 32-bit ports is not significantly affected</em> — Linux 32-bit x86 provides a vehicle for maintaining 32-bit cleanliness, which indirectly benefits the maintenance of other 32-bit ports, notably ARM32. We assume that we can continue to maintain the ARM32 port easily enough.</p> </li> <li> <p><em>Fallback options can be tested separately</em> — We assume that existing fallback mechanisms, such as Loom's 1:1 scheduler and FFM’s fallback linker, can be tested separately, without the burden of maintaining the whole Linux 32-bit x86 port.</p> </li> </ul> <h2 id="Alternatives">Alternatives</h2> <p>The alternative would be to continue to support 32-bit x86. This would require active maintainers who can provide a sustainable and performant implementation of virtual threads, as well as future JEPs, to ensure that the JDK on 32-bit x86 continues to meet the expectations of Java developers. There are no prospective maintainers who are willing to take that role.</p> </div></div><div id="sidebar"><div id="openjdk-sidebar-logo"><a href="/"><img alt="OpenJDK logo" src="/images/openjdk-small.png" /></a></div><div class="links"><div class="link"><a href="/install/">Installing</a></div><div class="link"><a href="/guide/#contributing-to-an-openjdk-project">Contributing</a></div><div class="link"><a href="/guide/#reviewing-and-sponsoring-a-change">Sponsoring</a></div><div class="link"><a href="/guide/">Developers' Guide</a></div><div class="link"><a href="/groups/vulnerability/report">Vulnerabilities</a></div><div class="link"><a href="https://jdk.java.net">JDK GA/EA Builds</a></div></div><div class="links"><div class="links"><a href="https://mail.openjdk.org">Mailing lists</a></div><div class="link"><a href="https://wiki.openjdk.org">Wiki</a> · <a href="/irc">IRC</a></div></div><div class="links"><div class="links"><a href="/bylaws">Bylaws</a> · <a href="/census">Census</a></div><div class="link"><a href="/legal/">Legal</a></div></div><div class="links"><div class="links"><a href="/workshop"><b>Workshop</b></a></div></div><div class="links"><div class="links"><a href="/jeps/0"><b>JEP Process</b></a></div></div><div class="links"><div class="about">Source code</div><div class="link"><a href="https://github.com/openjdk/">GitHub</a></div><div class="link"><a href="https://hg.openjdk.org">Mercurial</a></div></div><div class="links"><div class="about">Tools</div><div class="link"><a href="http://git-scm.org/">Git</a></div><div class="link"><a href="/jtreg/">jtreg harness</a></div></div><div class="links"><div class="about">Groups</div><div class="link"><a href="/groups/">(overview)</a></div><div class="link"><a href="/groups/adoption">Adoption</a></div><div class="link"><a href="/groups/build">Build</a></div><div class="link"><a href="/groups/client-libs">Client Libraries</a></div><div class="link"><a href="/groups/csr">Compatibility & Specification Review</a></div><div class="link"><a href="/groups/compiler">Compiler</a></div><div class="link"><a href="/groups/conformance">Conformance</a></div><div class="link"><a href="/groups/core-libs">Core Libraries</a></div><div class="link"><a href="/groups/gb">Governing Board</a></div><div class="link"><a href="/groups/hotspot">HotSpot</a></div><div class="link"><a href="/groups/ide-support">IDE Tooling & Support</a></div><div class="link"><a href="/groups/i18n">Internationalization</a></div><div class="link"><a href="/groups/jmx">JMX</a></div><div class="link"><a href="/groups/members">Members</a></div><div class="link"><a href="/groups/net">Networking</a></div><div class="link"><a href="/groups/porters">Porters</a></div><div class="link"><a href="/groups/quality">Quality</a></div><div class="link"><a href="/groups/security">Security</a></div><div class="link"><a href="/groups/serviceability">Serviceability</a></div><div class="link"><a href="/groups/vulnerability">Vulnerability</a></div><div class="link"><a href="/groups/web">Web</a></div></div><div class="links"><div class="about">Projects</div><div class="link">(<a href="/projects/">overview</a>, <a href="/projects/archive">archive</a>)</div><div class="link"><a href="/projects/amber">Amber</a></div><div class="link"><a href="/projects/babylon">Babylon</a></div><div class="link"><a href="/projects/crac">CRaC</a></div><div class="link"><a href="/projects/code-tools">Code Tools</a></div><div class="link"><a href="/projects/coin">Coin</a></div><div class="link"><a href="/projects/cvmi">Common VM Interface</a></div><div class="link"><a href="/projects/guide">Developers' Guide</a></div><div class="link"><a href="/projects/dio">Device I/O</a></div><div class="link"><a href="/projects/duke">Duke</a></div><div class="link"><a href="/projects/galahad">Galahad</a></div><div class="link"><a href="/projects/graal">Graal</a></div><div class="link"><a href="/projects/icedtea">IcedTea</a></div><div class="link"><a href="/projects/jdk7">JDK 7</a></div><div class="link"><a href="/projects/jdk8">JDK 8</a></div><div class="link"><a href="/projects/jdk8u">JDK 8 Updates</a></div><div class="link"><a href="/projects/jdk9">JDK 9</a></div><div class="link"><a href="/projects/jdk">JDK</a> (…, <a href="/projects/jdk/22">22</a>, <a href="/projects/jdk/23">23</a>, <a href="/projects/jdk/24">24</a>)</div><div class="link"><a href="/projects/jdk-updates">JDK Updates</a></div><div class="link"><a href="/projects/jigsaw">Jigsaw</a></div><div class="link"><a href="/projects/kona">Kona</a></div><div class="link"><a href="/projects/kulla">Kulla</a></div><div class="link"><a href="/projects/lanai">Lanai</a></div><div class="link"><a href="/projects/leyden">Leyden</a></div><div class="link"><a href="/projects/lilliput">Lilliput</a></div><div class="link"><a href="/projects/locale-enhancement">Locale Enhancement</a></div><div class="link"><a href="/projects/loom">Loom</a></div><div class="link"><a href="/projects/jmm">Memory Model Update</a></div><div class="link"><a href="/projects/metropolis">Metropolis</a></div><div class="link"><a href="/projects/jmc">Mission Control</a></div><div class="link"><a href="/projects/mlvm">Multi-Language VM</a></div><div class="link"><a href="/projects/nashorn">Nashorn</a></div><div class="link"><a href="/projects/nio">New I/O</a></div><div class="link"><a href="/projects/openjfx">OpenJFX</a></div><div class="link"><a href="/projects/panama">Panama</a></div><div class="link"><a href="/projects/penrose">Penrose</a></div><div class="link"><a href="/projects/aarch32-port">Port: AArch32</a></div><div class="link"><a href="/projects/aarch64-port">Port: AArch64</a></div><div class="link"><a href="/projects/bsd-port">Port: BSD</a></div><div class="link"><a href="/projects/haiku-port">Port: Haiku</a></div><div class="link"><a href="/projects/macosx-port">Port: Mac OS X</a></div><div class="link"><a href="/projects/mips-port">Port: MIPS</a></div><div class="link"><a href="/projects/mobile">Port: Mobile</a></div><div class="link"><a href="/projects/ppc-aix-port">Port: PowerPC/AIX</a></div><div class="link"><a href="/projects/riscv-port">Port: RISC-V</a></div><div class="link"><a href="/projects/s390x-port">Port: s390x</a></div><div class="link"><a href="/projects/sctp">SCTP</a></div><div class="link"><a href="/projects/shenandoah">Shenandoah</a></div><div class="link"><a href="/projects/skara">Skara</a></div><div class="link"><a href="/projects/sumatra">Sumatra</a></div><div class="link"><a href="/projects/tsan">Tsan</a></div><div class="link"><a href="/projects/valhalla">Valhalla</a></div><div class="link"><a href="/projects/verona">Verona</a></div><div class="link"><a href="/projects/visualvm">VisualVM</a></div><div class="link"><a href="/projects/wakefield">Wakefield</a></div><div class="link"><a href="/projects/zero">Zero</a></div><div class="link"><a href="/projects/zgc">ZGC</a></div></div><div class="buttons"><a href="https://oracle.com"><img alt="Oracle logo" src="/images/oracle.png" /></a></div></div><div id="footer"> © 2024 Oracle Corporation and/or its affiliates <br /><a href="/legal/tou/">Terms of Use</a> · License: <a href="/legal/gplv2+ce.html">GPLv2</a> · <a href="https://www.oracle.com/us/legal/privacy/">Privacy</a> · <a href="https://openjdk.org/legal/openjdk-trademark-notice.html">Trademarks</a></div><script type="text/javascript" src="/ZNBVQquKRCmTkFz_W96h/9wuJJcNVt9p4/MClz/FjZHVw1/zC0Q"></script></body></html>