JEP 501: Deprecate the 32-bit x86 Port for Removal
Перевод 32-битного порта x86 в статус Deprecated for Removal (устаревший, будет удалён)
| Ответственный | Aleksey Shipilev |
| Тип | Feature |
| Область | Implementation |
| Статус | Closed / Delivered |
| Выпуск | 24 |
| Компонент | hotspot / other |
| Обсуждение | hotspot dash dev at openjdk dot org |
| Трудоёмкость | S |
| Длительность | S |
| Связан с | JEP 449: Deprecate the Windows 32-bit x86 Port for Removal |
| JEP 479: Remove the Windows 32-bit x86 Port | |
| JEP 503: Remove the 32-bit x86 Port | |
| Рецензенты | Coleen Phillimore, Magnus Ihse Bursie, Vladimir Kozlov |
| Одобрен | Vladimir Kozlov |
| Создан | 2024/08/13 09:08 |
| Обновлён | 2025/02/19 23:38 |
| Задача | 8338285 |
Аннотация
Перевести 32-битный порт x86 в статус Deprecated (устаревший) с намерением удалить его в одном из будущих выпусков. Тем самым в статус Deprecated переводится порт для Linux на 32-битной x86, единственный 32-битный порт x86, который остался в JDK. Фактически это также переводит в статус Deprecated все оставшиеся производные (downstream) 32-битные порты x86. После удаления 32-битного порта x86 единственным способом запускать программы на Java на 32-битных процессорах x86 останется архитектурно-независимый порт Zero.
Цели
-
Избавить новые возможности, которым нужна платформенно-зависимая поддержка, от необходимости реализовывать резервные варианты для 32-битной x86.
-
Пометить порт и связанные с ним возможности, специфичные для этого порта, как Deprecated for Removal в соответствующей документации, скриптах конфигурации и тестовых заданиях.
Что не является целью
- Перевод в статус Deprecated каких-либо других 32-битных портов не является целью.
Мотивация
Как отмечалось в недавнем обсуждении с участием текущего сопровождающего 32-битного порта x86 и заинтересованных сторон, затраты на сопровождение этого порта перевешивают пользу от него. Поддержание паритета с новыми возможностями, такими как Loom, Foreign Function & Memory API (FFM), Vector API, позднее раскрытие барьеров GC и т. д., оборачивается значительными альтернативными издержками. Перевод порта в статус Deprecated и его последующее удаление позволят разработчикам OpenJDK ускорить разработку новых возможностей и улучшений.
Перевод этого порта в статус Deprecated в JDK 24 позволит нам удалить его в JDK 25.
Описание
Попытка сконфигурировать сборку для 32-битной x86 выдаст:
$ 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
$
Параметр конфигурации сборки --enable-deprecated-ports=yes подавит ошибку, и конфигурация продолжится:
$ 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.
$
Не будет никаких гарантий, что порт будет собираться, не говоря уже о том, что он будет работать.
Чтобы не блокировать разработку в основной ветке, мы уже отключили сборки для Linux на 32-битной x86 в GitHub Actions, определённых в репозитории исходного кода JDK (8338286). В рамках этого перевода в статус Deprecated мы полностью удалим эти задания сборки.
Риски и допущения
-
В отрасли нет острой потребности в 32-битной x86 для современных JDK — мы исходим из того, что мир x86 окончательно перешёл на 64 бита. Новое оборудование x86, поддерживающее только 32 бита, больше не выпускается. Оставшиеся развёртывания на 32-битной x86 — это наследие прошлого. Поддержка в отрасли сократилась в соответствии с этой реальностью. Поддержка Windows 10, последней операционной системы Windows с поддержкой 32-битного режима, прекратится (End of Life) в октябре 2025 года, а порт для Windows на 32-битной x86 уже удалён из JDK (JEP 479). Debian планирует прекратить поддержку 32-битной x86 в ближайшем будущем.
-
У выпусков, которые всё ещё поддерживают 32-битную x86, достаточный запас для безопасного переноса изменений — отсутствие порта для Linux на 32-битной x86 в основной ветке означает, что перенос изменений (backport) из основной ветки в активно поддерживаемые LTS-выпуски станет сложнее, поскольку их придётся согласовывать с портом для Linux на 32-битной x86, который в этих выпусках остаётся. Мы исходим из того, что большинство старых стеков приложений на Linux на 32-битной x86 всё ещё работают на JDK 8, куда мы переносим изменения нечасто, и это снижает риск. Сопровождающим порта для Linux на 32-битной x86 в более новых LTS-выпусках всё равно потребуется дополнительная работа, чтобы их сборки работали.
-
Сопровождение других 32-битных портов существенно не пострадает — порт для Linux на 32-битной x86 служит средством поддерживать корректность кода для 32-битных платформ, что косвенно помогает сопровождению других 32-битных портов, прежде всего ARM32. Мы исходим из того, что сможем и дальше без особого труда сопровождать порт ARM32.
-
Резервные механизмы можно тестировать отдельно — мы исходим из того, что существующие резервные механизмы, такие как планировщик 1:1 в Loom и резервный компоновщик (fallback linker) в FFM, можно тестировать отдельно, без необходимости сопровождать весь порт для Linux на 32-битной x86.
Альтернативы
Альтернативой было бы продолжить поддержку 32-битной x86. Для этого нужны активные сопровождающие, способные обеспечить устойчивую и производительную реализацию Virtual Threads (виртуальные потоки), а также будущих JEP, чтобы JDK на 32-битной x86 и дальше отвечал ожиданиям разработчиков на Java. Потенциальных сопровождающих, готовых взять на себя эту роль, нет.