Drop i686 builds of jdk8,11,17 and latest (18) rpms from f37 onwards
Summary
java-1.8.0-openjdk, java-11-openjdk, java-17-openjdk and java-latest-openjdk packages will no longer build i686 subpackages
Owner
- Name: Jiri Vanek
- Email: <jvanek@redhat.com>
- Product: java and java stack
- Responsible WG: java-sig (java and java-maint)(which no longer exists)
Current status
- Targeted release: Fedora 37
- Last updated: 2022-07-01
- devel thread
- FESCo issue: #2772
- Tracker bug: #2083750
- Release notes #835
Expected schedule
- during march, drop i686 builds from all jdks in fedora rawhide
Detailed Description
Fedora currently ships:
- java-1.8.0-openjdk (LTS)
- java-11-openjdk (LTS)
- java-17-openjdk (LTS)
- java-latest-openjdk (STS, jdk18).
All those builds on all architectures except jdk8, where arm32 with jit is built by different package. Unluckily, the i686 bit builds of jdk are rotten in upstream. The recent breakage of i686 JIT just before branching nearly killed jdk17 as system jdk feature. The rotting have main visibility with newer GCCs. If GCC bump, and it does, it always triggers new issues in i686 JIT, and there is less and less people to somehow workaround them. Unluckily, there is probably no longer anyone willing to really fix them
Although there is https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval , this proposal have nothign to do with it, not even inspiration. People about OpenJDK learned about after this jdk one was announced.
Benefit to Fedora
The i686 builds are rotten in usptream, and to patch them localy had become pain. We may be introducing very bugy i686 jdk. Better then to do so, we would rather not ship that at all. This will untie hands of both JDK and GCC developers, who will no longer need to dive into nasty legacy code.
Scope
Change owners
- After recursive dependency scan was done, i was discovered that the change affects moreover whole system
- initial recursive scan pkg requiring or build requiring java and friends (https://github.com/judovana/FedoraSystemJdkBump/blob/1f126a2d7a4235593b1575467f420b185e5ecb13/scritps/listPkgs/recursiveGlue.sh#L54) pulled in automake and few others, which n second recursive round pulled in moreover whole system
- I do no have record of this search as it was useless
- Second run was run without automake. Still second round took in automake and thus third and fourth recursion run into morevoer whole system.
- those results are already parse able. I even generated the chart, but that was pretty flat pointng to automake and autoconf
- Reuslts: https://jvanek.fedorapeople.org/i686Deps/withAutconf.tar.gz
- third run was run again with autoconf and automake, however all build time requires for noarch results were omitted, as those have no real impact in real usage
- unluckily during recursion, automake and autoconf were hit again on level 3 and four, so later whole system got pulled in
- results: https://jvanek.fedorapeople.org/i686Deps/withNoarcBrOff.tar.gz
- final sane scan was done with all build time requires for noarch packages ommited, together with big blacklist of already known trouble makers: https://github.com/judovana/FedoraSystemJdkBump/blob/1f126a2d7a4235593b1575467f420b185e5ecb13/scritps/listPkgs/recursiveGlue.sh#L142
- results https://jvanek.fedorapeople.org/i686Deps/withNoarcBrOffWithBlacklist.tar.gz
- those results are already sane (70 000 edges in unreadable chart)
- initial recursive scan pkg requiring or build requiring java and friends (https://github.com/judovana/FedoraSystemJdkBump/blob/1f126a2d7a4235593b1575467f420b185e5ecb13/scritps/listPkgs/recursiveGlue.sh#L54) pulled in automake and few others, which n second recursive round pulled in moreover whole system
Workflow
- new macro
%{java_arches}
which will be of value : aarch64 ppc64le s390x x86_64- will be declared
- Once done,
- All most crucial affected pkg - the blacklist + few others, eg R,graphviz (suggestions welcomed, bottom of sorted by dependent children list) will get filled bugzilla -listing - eg:
cairo is transitively depending on java, please ensure you drop java support on i686 Dear maintainer, we are going to drop i686 java packages in f37 - https://fedoraproject.org/wiki/Changes/Drop_i686_JDKs Your library is transitively affected by this change: java-devel <- graphviz <- gcc <- bash <- fontconfig <- cairo java-devel <- graphviz <- gcc <- coreutils <- fontconfig <- cairo java-devel <- graphviz <- gcc <- freetype <- fontconfig <- cairo java-11-openjdk-devel <- subversion <- git <- gettext <- fontconfig <- cairo java-devel <- graphviz <- gcc <- glibc <- fontconfig <- cairo java-devel <- graphviz <- gcc <- gperf <- fontconfig <- cairo java-devel <- graphviz <- gcc <- grep <- fontconfig <- cairo java-devel <- graphviz <- gcc <- libtool <- fontconfig <- cairo java-devel <- graphviz <- gcc <- libxml2 <- fontconfig <- cairo java-devel <- graphviz <- gcc <- make <- fontconfig <- cairo java-devel <- graphviz <- gcc <- bash <- freetype <- cairo java-devel <- graphviz <- doxygen <- gcc <- freetype <- cairo java-devel <- graphviz <- gcc <- gcc <- freetype <- cairo java-devel <- libwebp <- graphviz <- gcc <- freetype <- cairo R-java-devel <- R-devel <- graphviz <- gcc <- freetype <- cairo java-devel <- graphviz <- gcc <- glibc <- freetype <- cairo Please ensure, you drop i686 java support before branching. You can use new ExclusiveArch: %{java_arches} macro for your convenience
(only glibc will not have its 15000 depnedent pkg listed),
native libreoffice depends on to be removed i686 java packages Dear maintainer, we are going to drop i686 java packages in f37 - https://fedoraproject.org/wiki/Changes/Drop_i686_JDKs libreoffice is dependnign on it and is native, please adapt your package so it builds without java support on i686 You can use new ExclusiveArch: %{java_arches} macro for your convenience
- all noarch direct java, amven ant... dependencies will -listing - get auto injected
ExclusiveArch: %{java_arches} noarch
if not present, or appended by%{java_arches} noarch
if ExclusiveArch already there - all bugs will block this feature main bug
- all noarch direct java, amven ant... dependencies will -listing - get auto injected
- if all goes ok, we will simply stop building i686 java pacakges in rawhide
- I'm not sure if there is any sense in creating copr for this, as there is no proper i686 there...
Other developers
- may notice the multilib i686 java missing.
- it is up to them to drop i686 builds or to povide workaround (if possible)
- all the bugreports should contain precisse instructions what to do:
If you are using %{ix86} or i686 ExclusiveArch, in the java depending subpkg, you ahve to drop it. You should declare ExclusiveArch: %{java_arches} noarch in your noarch java depending subpkgs You should declare ExclusiveArch: %{java_arches} in your archdull java depending pkgs Note that you really have to ifarch the depndece out, so you do not randomly fail because of BR not satisfied if your builder wil be i686, which can happen. See examples: https://src.fedoraproject.org/rpms/graphviz/pull-request/9 https://src.fedoraproject.org/rpms/maven/c/520942645bfd1e4721dacd536a6ccbf80495a8ae?branch=rawhide todo automake once https://bugzilla.redhat.com/show_bug.cgi?id=2102298 is done
Other
- Release engineering: #10686
- mass rebuild will NOT be required for this change
- Trademark approval: N/A (not needed for this Change)
- Bug assignees will need to verify the impact of i686
Upgrade/compatibility impact
- The upgrade on multilib systems will lead to autoremoval of i686 javastack
- which should be minimum if above bugzillas are properly handled
How To Test
install i686 java will result to not packages found
User Experience
User experience on multilib systems will be bad. Bad reasonable.
Dependencies
There are is unknown number of multilib java consumers. I expect some of them may rise voice, but that will have to handled one by one.
Contingency Plan
- Contingency mechanism: return i686 java packages
- Contingency date: (not provided)
Documentation
Will be needed...
Release Notes
None yet...
final listings
crucial dependences transitively depndnding on java(s)
alsa-lib alsa-lib-devel atk autoconf automake bash boost-devel cairo cargo cmake coreutils coreutils-single desktop-file-utils doxygen findutils fontconfig freetype gawk gcc gcc-c++ gdk-pixbuf2 gettext ghc-base ghc-base-devel ghc-compiler git glib2 glib2-devel glibc gmp gnupg2 go-rpm-macros graphviz gtk2 gtk2-devel gtk3 gtk3-devel gtk-doc harfbuzz hicolor-icon-theme kf5-kconfigwidgets kf5-kcoreaddons kf5-kio-core-libs kf5-kio-widgets-libs kf5-kxmlgui libappstream-glib libcurl libcurl-minimal libglvnd-glx libjpeg-turbo libstdc++ libtool libX11 libX11-devel libXext libXext-devel make mesa-libGLU meson ninja-build ocaml ocaml-runtime openssl-devel openssl-libs pango perl-Carp perl-constant perl-Exporter perl-generators perl-interpreter perl-libs perl-PathTools perl-Scalar-List-Utils php-common pkgconf-pkg-config python3 python3-devel python3-pytest python3-pyyaml python3-setuptools qt qt5-qtbase qt5-qtbase-devel qt5-qtbase-gui qt5-qtdeclarative qt-x11 R-core R-devel rubygems rubypick rust-packaging rust-web-sys-devel sed shadow-utils systemd systemd-libs tesseract texlive-base texlive-kpathsea texlive-latex vala zlib zlib-devel
direct noarch java dependencies
ant apache-commons-beanutils apache-commons-cli apache-commons-codec apache-commons-collections apache-commons-compress apache-commons-io apache-commons-jxpath apache-commons-lang3 apache-commons-logging apache-commons-net apache-commons-parent apache-parent apache-resource-bundles apiguardian aqute-bnd assertj-core atinject bcel beust-jcommander bsf byte-buddy cdi-api cglib classpathless-compiler disruptor easymock felix-parent felix-utils fusesource-pom google-guice guava hamcrest httpcomponents-client httpcomponents-core httpcomponents-project jakarta-activation jakarta-annotations jakarta-oro jakarta-servlet java_cup javapackages-bootstrap jctools jdepend jdom2 jdom jflex jsch jsr-305 junit5 junit jzlib log4j maven-antrun-plugin maven-archiver maven-artifact-transfer maven-assembly-plugin maven-common-artifact-filters maven-compiler-plugin maven-dependency-analyzer maven-dependency-plugin maven-dependency-tree maven-enforcer maven-file-management maven-filtering maven-jar-plugin maven maven-parent maven-plugin-build-helper maven-plugin-bundle maven-plugin-testing maven-plugin-tools maven-remote-resources-plugin maven-resolver maven-resources-plugin maven-shared-incremental maven-shared-io maven-shared-utils maven-source-plugin maven-surefire maven-verifier maven-wagon mockito modello mojo-parent munge-maven-plugin objectweb-asm objenesis opentest4j osgi-annotation osgi-compendium osgi-core plexus-archiver plexus-build-api plexus-cipher plexus-classworlds plexus-compiler plexus-components-pom plexus-containers plexus-interpolation plexus-io plexus-languages plexus-pom plexus-resources plexus-sec-dispatcher plexus-utils qdox regexp sisu-mojos sisu slf4j testng univocity-parsers velocity vim-syntastic xalan-j2 xbean xerces-j2 xml-commons-apis xml-commons-resolver xmlunit xmvn xz-java
direct arch-full java dependencies
abrt-java-connector ant-antunit antlr32 antlr3 antlr4-project antlr antlr-maven-plugin antlrworks aopalliance apache-commons-collections4 apache-commons-digester apache-commons-exec apache-commons-fileupload apache-commons-math apache-commons-modeler apache-commons-pool apache-ivy apache-sshd apron arduino-listSerialPortsC args4j astyle AusweisApp2 auto automake BareBonesBrowserLaunch batik beansbinding bigloo bolzplatz2006 bouncycastle brazil brltty bsh buildnumber-maven-plugin byteman cambozola canl-java capstone CardManager ceph CFR chromium classloader-leak-test-framework clojure clojure-core-specs-alpha clojure-maven-plugin clojure-spec-alpha cocoalib codehaus-parent collectd colossus console-image-viewer cortado cryptlib crypto-policies csound cvc4 decentxml DecodeIR diffoscope directory-maven-plugin dirgra ditaa dl_poly dogtag-pki dom4j ecj eclipse-swt ed25519-java enjarify erlang erlang-corba exec-maven-plugin fasterxml-oss-parent fernflower filedrop fishbowl flute fop forge-parent freecol freemarker freerouting freewrl frysk gdal gdl genders gnulib google-gson graphviz hawtjni hdf5 hdf healpix hibernate-jpa-2.0-api hibernate-jpa-2.1-api hid4java hyperestraier icecat icu4j imagej IPAddress jackson-annotations jackson-bom jackson-core jackson-databind jackson-dataformats-binary jackson-dataformats-text jackson-jaxrs-providers jackson-modules-base jackson-parent jacoco jacop jakarta-el jakarta-interceptors jakarta-json jakarta-mail jakarta-saaj jakarta-server-pages jakarta-xml-ws janino jansi1 jansi jansi-native jargs java-11-openjdk java-17-openjdk java-1.8.0-openjdk javacc javacc-maven-plugin java-diff-utils java-dirq javaewah java-gnome java-jd-decompiler java-mersenne-twister javapackages-tools javaparser javapoet java-runtime-decompiler java-scrypt javassist jaxb-api jaxb jaxb-dtd-parser jaxb-fi jaxb-istack-commons jaxb-stax-ex jaxen jblas jboss-jaxrs-2.0-api jboss-logging jboss-logging-tools jboss-parent jchardet jcip-annotations jcodings jcommon jcommon-serializer jcuber jdeparser jdependency jericho-html jetty jffi jFormatString jfreechart jgit jglobus jgoodies-common jgoodies-forms jgoodies-looks jgrapht jigawatts jline2 jline jmock jmol jna jneuroml-core jni-inchi jnr-constants jnr-ffi jnr-netdb jnr-posix jnr-x86asm jol jolokia-jvm-agent joni jopt-simple jorbis jpanoramamaker jpcap jpype jsch-agent-proxy json_simple jss jssc jtidy juniversalchardet kawa kernel-tools laf-plugin lancer ldapjdk libbase libbluray libfonts libformula libgda libidn liblayout libloader libphidget libreoffice librepository libserializer libsvm libvirt-java libwebp link-grammar mapserver mariadb-java-client Mars maven2 maven-archetype maven-clean-plugin maven-doxia maven-doxia-sitetools maven-invoker maven-invoker-plugin maven-mapping maven-native maven-patch-plugin maven-reporting-api maven-reporting-impl maven-scm maven-script-interpreter maven-shade-plugin maven-verifier-plugin mecab-java miglayout mojo-executor mp mxparser mysql-connector-java naga nailgun nekohtml nom-tam-fits ocaml-atd octave ongres-scram ongres-stringprep openas2 opencv openjdk-asmtools openjfx8 openjfx openmpi openni openstack-java-sdk OpenStego options pcfi pcl pdfbox pdftk-java pentaho-libxml pentaho-reporting-flow-engine picocli plantuml pl plexus-active-collections plexus-component-api plexus-i18n plexus-velocity plplot pomchecker portlet-2.0-api portmidi postgresql-jdbc ppl procyon proguard prometheus-jmx-exporter prometheus-simpleclient-java protobuf py4j python-javabridge python-javaobj python-jep python-jnius qdbm rachota R reflections replacer resteasy rhino rstudio rsyntaxtextarea rundoc sac sat4j sblim-cim-client2 sblim-cim-client scala scalacheck scalpel scannotation sdljava seqan2 seqan sequence-library serp shaman Singular snakeyaml snip spec-version-maven-plugin sphinx spice-parent sqljet stringtemplate4 stringtemplate string-template-maven-plugin subversion svnkit swing-layout system-rules systemtap taggle tagsoup t-digest test-interface texlive tomcat tomcatjss tomcat-native tomcat-taglibs-parent treelayout trilead-ssh2 truth tuxguitar tzdata uom-parent vecmath1.2 voms-api-java voms-clients-java vtk weld-parent will-crash writer2latex ws-commons-util wsdl4j xjparse xmlgraphics-commons xml-maven-plugin xmlpull xmlstreambuffer xmltool xmpcore xmvn-connector-ivy xstream yuicompressor z3 zbar