Repository navigation
NumPy wheels bundle LGPL-2.1+ libquadmath and GCC-exception runtime: owner decision and Fortran-free replacement path #2136
Description
Summary
For numpy 2.5.3, the official wheels that fast-mlsirm users receive through Requires-Dist: numpy>=1.24 bundle GCC runtime components:
- Linux x86_64 and macOS < 14: the wheels bundle and dynamically load libquadmath, which is LGPL-2.1-or-later with no runtime exception. It loads at
import numpythrough this DT_NEEDED chain:_multiarray_umath → libscipy_openblas64_ → libgfortran → libquadmath. - Every supported platform except macOS ≥ 14 (Accelerate): the wheels carry libgfortran, and on some platforms libgcc_s/libstdc++. These are GPL-3.0-or-later WITH GCC-exception-3.1.
fast-mlsirm does not redistribute any of these libraries, but they are part of its runtime dependency closure. Under the release license policy, GPL/LGPL/AGPL dependencies are replaced, never auto-approved, and dropping NumPy is not an option.
The evidence is in docs/security/license-evidence-0.11.5.md, section 6. It gives per-platform wheel contents, readelf/otool output, and the GCC libquadmath/COPYING.LIB and source headers.
User license boundary, 2026-09-26
Standard glibc CPython/manylinux Linux support stays. The user excluded operating-system-provided basic components such as glibc from this license-policy test. This does not exempt GPL/LGPL/AGPL code bundled or vendored in wheel/sdist/Rust artifacts or obtained as build, development, or optional dependencies. libgcc_s, libstdc++, libgfortran, and libquadmath each require evidence of actual provider, bundle status, source license and any exception; no automatic system-library or GCC-runtime-exception approval. The earlier all-runtime glibc conflict and musl migration requirement are withdrawn.
The Fortran-free NumPy 2.5.2 cp312 Linux candidate c6fbea22… removes gfortran/quadmath links but still has external libgcc_s/libstdc++; its OpenBLAS/LAPACK NOTICE is staged, not embedded. s1 supplies libgcc_s through Ubuntu libgcc-s1 and libstdc++ through libstdc++6, but release builders and consumers are not yet classified. A read-only clang++ -### using libc++/compiler-rt/libunwind selects LLVM runtime inputs while retaining GCC search paths; actual artifacts must prove the closure. The coordinator clarified that OS-supplied, unbundled libgcc_s/libstdc++ links of Ubuntu clang/cargo do not alone bar a local build. Prior local parity is not release proof.
Next: use the verified NumPy/OpenBLAS/#2157 source bytes and isolated targets for one s1 cp312 pair with pinned build dependencies. Inspect actual wheel/ELF/NOTICE, consumer library provider, ABI and numeric results; keep full LLVM exploration paused unless this candidate needs it. If it qualifies, verify the 12-wheel matrix (Linux x86_64/aarch64, macOS universal2, Windows x86_64; each cp312/313/314), sdist and both Rust crates. Windows #2155, exact-head required hosted checks, eligible independent approval and downstream immutable-artifact consumption remain HOLD. Plan/evidence: /Users/seonghobae/.local/orca-watchdog/reports/fmls-a3-glibc-boundary-release-plan-20260926.md, SHA-256 064aea83…. A single isolated s1 cp312 candidate-pair build is now authorized for validation; 12-wheel expansion, merge and release are not.
Replacement path (keeps NumPy and all functionality)
-
(a) Upstream request (cheap, starts now): ask NumPy / scipy-openblas to ship Fortran-free x86_64 OpenBLAS.
-
(b) Fortran-free OpenBLAS in NumPy wheels built for our four platforms (manylinux x86_64/aarch64, win_amd64; macOS stays on Accelerate for ≥ 14). Two build options:
C_LAPACK=1, which uses the BSD C-translated LAPACK and needs no gfortran, so there is no libgfortran or libquadmath;- the LLVM flang runtime (Apache-2.0 WITH LLVM-exception). The official numpy 2.5.3 win_arm64 wheel already uses the flang 20.1.8 runtime, which shows the toolchain supports it.
This needs a wheel build and hosting pipeline, provenance, and NumPy test-suite parity. It is a separate project, and the owner needs to approve it before it starts.
-
Not acceptable: removing NumPy, or relying on a numpy version pin (no Linux x86_64 wheel without libquadmath is known).
Found while auditing the 0.11.5 release license evidence.
Activity
docs(security): link license follow-ups #2136 #2137 #2138
seonghobae commentedon Sep 23, 2026
Feasibility report: Fortran-free OpenBLAS (C_LAPACK) NumPy for Linux x86_64
I verified one candidate: numpy 2.5.3 built from the PyPI sdist against OpenBLAS 0.3.34 with
NOFORTRAN=1, which forcesC_LAPACK=1(the BSD C-translated LAPACK). The build otherwise mirrors the official scipy-openblas64 x86_64 configuration.I chose it over the flang-runtime path for three reasons:
The flang path and a no-BLAS (
lapack_lite) path remain candidates, not verified.Scope of this report: Linux x86_64, CPython 3.12 only, on host s1. No dependency swap or PR has been made.
Verdict
Feasible for the LGPL problem. It does not by itself clear the GCC-runtime-exception question.
NEEDthe OS-providedlibstdc++.so.6andlibgcc_s.so.1(GPL-3.0+ WITH GCC-exception-3.1). These are not bundled in either wheel. Removing them would take a clang/libc++ (compiler-rt, libunwind) build of NumPy itself, which is unverified. This is still owner decision 1 above.Evidence (host s1.cluster.seonghobae.me, dir
/data/orca/workspaces/fmls-2136-numpy-s1)Inputs
df2d5874ff183595a4ba404edd04f6bd9b5505c1d7708573f6a6c17489a67563cd7e129868320cc2d033afa920e31202dfe0b8066a5b66661900ccc0f197dfedb7e18c623bb5c95acb3b3328861272816ba199fb531921c5d6d0b675f1fde9e3e3d0667352f91ad851141a99eb326a6bbb4142db898e4f68bff8665247f0e951tools/build_steps.sh(flags mirrored)ec73326c6aaa33dc4a15224d78453ae0561ff010124a7608a44c1ed24343c795Build environment
quay.io/pypa/manylinux_2_28_x86_64@sha256:ae21cd1c8220f773f9b5934f3b845d677494d4cd4b8981c1e416f654e8afa74e(imagesha256:705368385f1b…).SOURCE_DATE_EPOCH=1790068752.OpenBLAS flags:
BUFFERSIZE=20 DYNAMIC_ARCH=1 DYNAMIC_LIST="PRESCOTT NEHALEM SANDYBRIDGE HASWELL SKYLAKEX" TARGET=PRESCOTT USE_OPENMP=0 NUM_THREADS=64 BINARY=64 INTERFACE64=1 SYMBOLSUFFIX=64_ LIBNAMESUFFIX=64_ SYMBOLPREFIX=scipy_ LIBNAMEPREFIX=scipy_ FIXED_LIBNAME=1 NOFORTRAN=1 FC=/nonexistent-fortran-compilernumpy options:
-Duse-ilp64=true -Dallow-noblas=false, the same as the official cibuildwheel config.Proof the path is Fortran-free
FCat a path that does not exist, so any Fortran invocation would fail the build. The build succeeded, and the make log has 0 occurrences ofgfortranor the fake FC.Makefile.systemL396-399 hasifeq ($(NOFORTRAN), 1)thenC_LAPACK = 1andoverride FEXTRALIB =.lapack-netlib/SRC/{dgesdd,dsyevd,dgesv}.c), and those C sources have 0 references toquadmathor__float128.extralib=-lm -lpthread. The official scipy-openblas64.pchasextralib=-lm -lpthread -lgfortran -lquadmath.Link chain
Stock wheel:
_multiarray_umath→libscipy_openblas64_-f48b354e.so(432e1c17…) →libgfortran-83c28eba…so.5.0.0(a6a36832…) →libquadmath-2284e583…so.0.0.0(6bc30690…).Candidate wheel:
numpy.libs/contains onlylibscipy_openblas64_-940c6557.so(2f8c8605…46a0), which NEEDs onlylibm libpthread libc ld-linux._multiarray_umathNEEDs that library pluslibstdc++.so.6 libm libgcc_s.so.1 libc ld-linux. The systemlibstdc++andlibgcc_sdependency is the same as stock._umath_linalgNEEDs the OpenBLAS library pluslibm libc..sofiles in the wheel there are 0 NEEDED entries for gfortran, quadmath, gomp or flang.LD_DEBUG=libs python -c 'import numpy'loads bundled OpenBLAS, glibc libs,libgcc_sandlibstdc++. It loads no libquadmath and no libgfortran.Licenses
OpenBLAS-0.3.34/LICENSE(BSD-3-Clause,190b5a9c…).lapack-netlib/LICENSE(modified BSD,97853924…).LICENSE.txt(BSD-3,1be1df33…).numpy-2.5.3.dist-info/licenses/LICENSE.txthas only numpy's own 25 lines. The stock wheel's copy (756 lines) appends the OpenBLAS (L40), LAPACK (L76) and GCC runtime (L131+) notices from numpy CI'stools/wheels/LICENSE_linux.txt, which is not in the sdist. A distributable candidate must add the OpenBLAS and LAPACK notices (without the GCC section).Build-time GPL tools (not shipped): GCC 14 and patchelf 0.19.1, which auditwheel uses to set the grafted library's soname/RUNPATH. Neither is in the runtime closure. Avoiding patchelf would mean hand-setting
$ORIGINRUNPATH and retagging (unverified).Build determinism
OpenBLAS: two independent builds at different paths gave an identical
libscipy_openblas64_.so(940c6557fc88fb9f30124e3b37d79f8c1abec07c1b8b93ead0407f336ba8f476).numpy, built through
pip wheel numpy-2.5.3.tar.gz: not reproducible./tmp/pip-req-build-*directory, and Cython embeds that path (…/numpy/__init__.cython-30.pxd)._multiarray_umath,random/*and RECORD by 27–37 bytes per file.__config__.py.numpy, built from a fixed extracted source path and fixed build dir: reproducible.
6bc8b84585bb7be9bea8c0f20849706a33356d08d35f3fed764d526a589475e3).numpy-2.5.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl=e8e0a0c6f175571a439eb8a7c7801b4e52c264f6750bead7885243257405528b. This is the tested candidate artifact.Two caveats:
Install control (verified on s1)
A plain
numpy>=1.24cannot control this; the default install path still delivers libquadmath. The verified mechanism is a hash-locked requirements file used with--no-indexand a controlled wheelhouse:numpy.libs=['libscipy_openblas64_-940c6557.so']Expected e8e0a0c6…,Got b7e18c62…); nothing installed (fail-closed)pip install fast-mlsirm==0.11.4from PyPInumpy.libs= libgfortran, libquadmath, libscipy_openblas64 (forbidden wheel)So the candidate only protects users and CI that install through the controlled path: the hashes in
requirements/ci.txtplus a hosted wheelhouse, and a documented product install. PyPI users runningpip install fast-mlsirmare not protected, and no package metadata can change that.The candidate wheel also has the same filename as the PyPI wheel. A local version label (e.g.
2.5.3+fortranfree) is worth considering to avoid cache and filename confusion (not tested).Regression (s1, CPython 3.12, fast-mlsirm 0.11.4 PyPI wheel
1e65070f…,OPENBLAS_NUM_THREADS=4for timings)Numerical agreement with stock (
regress.py):simulateoutput (Y,theta; usesmultivariate_normal)fit_reference(theta/alpha/b/xi/zeta/objective)fit(theta/alpha/b/xi/zeta/objective)matmul,solvesvd(singular values),eigh(eigenvalues)multivariate_normaldrawsPerformance (best of N, seconds, stock → candidate):
The two rust-fit timings are within noise on a shared host. Both builds select the same runtime OpenBLAS kernel on s1 (
openblas_get_corename=Nehalem).NumPy's own test suite (
pytest --pyargs numpy -m "not slow" -n 4):mesonis not installed for the f2py, configtool and mem_policy tests. Alllinalgtests pass in both.fast-mlsirm v0.11.4 test suite against the installed wheel (
-o pythonpath=.,-n 4,--timeout=600 --timeout-method=thread; run 4 below):128b819ad14fbde8c75efd36d8b0fffcacbd2cbda95056aa6f5859e1c4aa61eff0e8e109c7a58198304bf01c94199d723e52f1579cdaef6b21fc5b7960dc1375The failing tests are identical in both environments:
tests/test_bifactor_grm.py::test_issue_1976_dense_q_never_tolerance_met_at_start_slopestests/test_cov_c_fitstats.py::test_dif_analysis_accepts_boolean_mask(RuntimeError: dif_analysis requires converged parameters ... status=max_iter_reached)This is parity of failure, not a PASS: the candidate is not worse than stock on this suite, and it must not be read as "the candidate works". The two failures are pre-existing in the 0.11.4 test suite run against the installed wheel and are not caused by the candidate.
NumPy's own suite, its 132 errors and 3 failures explained (identical in both environments):
f2py/testsand 8 are_core/tests/test_mem_policysetup. All of them areFileNotFoundError: 'meson': these tests compile extension modules at setup, and meson is not installed in the test venv.test_configtool:numpy-configis not on PATH because the venv python was invoked without activating the venv.Those 135 tests were not exercised in either environment, so this also establishes parity of failure over the tests that did run (46441 passed). It is not a PASS.
Run log (all on s1,
/data/orca/workspaces/fmls-2136-numpy-s1/results/):tests.sh, sequential cand → stock, no per-test timeout.tests.sh) by explicit PID. Output:fmls-suite-cand.txt(no summary line).fmls-suite-stock-par.txt: stock run started in parallel to check for a shared tail. It reached the same 92% position, and I stopped it by explicit PID.fmls-suite-{cand,stock}-t-signal-aborted.txt: rerun withpytest-timeout2.x,--timeout=600, signal method.fmls-suite-{cand,stock}-t.txt:--timeout=600 --timeout-method=thread, started02:25:02KST. Completed.OPENBLAS_NUM_THREADS=1 RAYON_NUM_THREADS=2.Environment changes made for these runs (in my own venvs only):
pytest-xdistandpytest-timeoutintovenv-candandvenv-stock.py-spyinto a separatetoolsvenv. It was not usable (ptrace is denied).Resource note: the cand and stock runs in parallel used about 10.4 of s1's 12 CPUs (nice 10), and s1 load reached ~35–40. The worker CPU is in the Rust threads, not llvmpipe: the llvmpipe threads were idle at 0%.
RAYON_NUM_THREADS=2did not cap all thread pools; there were up to 106 threads per worker.Still unverified
0.3.34.106.0, a post-0.3.34 openblas-libs commit, while the candidate used the v0.3.34 release tarball. I could not resolve the exact upstream commit because of a GitHub API rate limit. A production build should pin the same commit.libstdc++/libgcc_s(GCC-exception) dependency of NumPy's own C++ code is acceptable. This candidate does not remove it.pytest-timeoutwas installed into both venvs after runs 1–2, so runs 3–4 are not the same environment as runs 1–2. The NumPy-suite results come from runs 1–2 and the fast-mlsirm-suite result comes from run 4.🤖 Generated with Claude Code
seonghobae commentedon Sep 24, 2026
Independent verification update (read-only), status: HOLD
Scope: this checks the existing s1 Linux x86_64 cp312 candidate from #issuecomment-5801609907 against its preserved bytes and logs. Nothing was rebuilt and no suite was rerun. The findings below are independently verified; claims taken from the earlier comment are not re-asserted here unless they were re-checked.
Newly verified
scipy-openblas64 0.3.34.106.0, which the official numpy 2.5.3 wheels vendor, isMacPython/openblas-libstagv0.3.34.106.0=78fc0eaf6de71d92fd98f74f7e5bfa356a2f83e3.OpenBLASsubmodule is446c436e10450c348169808f1a6b3fae0925c9f7. That isv0.3.34(e0166008be8e466242aa76b2ff75ce3f0fbf574a) plus 106 commits: 262 files, +37,998/−3,249.v0.3.34release tarball (cd7e1298…), so its source is not the official wheel's source. A replacement build must pin446c436e, or justify the delta.e8e0a0c6f175571a439eb8a7c7801b4e52c264f6750bead7885243257405528b: 20.sofiles, 0 NEEDED entries matching gfortran/quadmath/gomp/flang.b7e18c62…has 2: libgfortran and libquadmath.libstdc++.so.6andlibgcc_s.so.1(2 each), which are GPL-3.0-or-later WITH GCC-exception-3.1. Under the project policy the GCC runtime exception is not acceptable, so the candidate is still HOLD. It removes LGPL libquadmath and libgfortran, but not this dependency.dist-info/licenses/LICENSE.txtis 30 lines (sha1be1df33…), with no OpenBLAS or LAPACK notice.4860083c…). The earlier comment said 25/756; thewc -lcounts here are authoritative.dist-info/sboms/is absent).extralib=-lm -lpthread._coref05458cb…in both envs,PYTHONHASHSEED=0,OPENBLAS_NUM_THREADS=1):tests/test_rust_parity.py -vv: candidate 64 passed / 0 failed / 0 skipped and stock the same, with identical case IDs.hash(), so they vary per process unlessPYTHONHASHSEEDis fixed.regress.pyproducer re-run (bounded, logged, originals untouched, both exit 0):mvnarray matches its own environment exactly. So attribution ofcand.npzandstock.npzto their environments is supported, though not byte-proven.ed4f167a…, the one vendored by numpy win_amd64):wheels-x64-1(id 9039665676) from run31317225529, job93254323637, at78fc0eaf. The PyPI attestation was verified withgh attestation verify(exit 0).-static -static-libgcc -lgfortran … --defsym quadmath_snprintf=snprintf.output.mapprinted "no 'libquadmath' used". So libquadmath is absent per the CI link-map gate, and libgfortran and libgcc are statically linked per the actual link command.Still missing before any replacement of official NumPy wheels
pyproject.tomldeclaresrequires-python = ">=3.12"); manylinux aarch64; macOS < 14 x86_64/arm64 (≥ 14 uses Accelerate); win_amd64. Windows currently has static libgfortran, so it needs a NOFORTRAN or flang-runtime build. No musllinux candidate exists either.libstdc++/libgcc_sGCC-exception dependency of numpy's own C++ code. Removing it would need a libc++/compiler-rt/libunwind toolchain, which is unverified.mesoninstalled (135 tests were never exercised);446c436e;LICENSE.txt;+fortranfree);requirements/ci.txt.pip install fast-mlsirmusers stay unprotected.Smallest next hosted lane (proposal, nothing created)
A single
workflow_dispatch-only workflow in this repo that:446c436eand hash-pinned build dependencies, for linux x86_64 cp312 only;readelfNEEDED;numpy.linalgtests and fast-mlsirmtest_rust_parity.py, plusregress.pyagainst stock;actions/attest-build-provenance;The issue has no assignee. The repository's only collaborator is its admin (the issue author), so an owner decision is still needed.
Evidence reports (worker-local):
fmls-2136-fortran-free-numpy-verification.md,fmls-2136-rust-parity-itemised.md,fmls-2153-windows-openblas-ci-evidence.md. No merge, release, exception acceptance or deployment.seonghobae commentedon Sep 25, 2026
A3 NumPy 2.5.2 Linux x86_64 cp312 single-wheel feasibility update (2026-09-25 16:03Z). Release and research adoption remain HOLD. This is not a 12-wheel matrix result.
d482d171c406ae88c5b19cad3b6a1c4c5209f886ab74bc44c2c865c23f52d860, OpenBLAS 0.3.34 sourcecd7e129868320cc2d033afa920e31202dfe0b8066a5b66661900ccc0f197dfed, recipe3cd142a5233321286540a09e974dbb9b2d8b8d9965a28fe166100f547187957d. Exit 0; repaired candidate wheel SHA-256c6fbea224227ebfcb80d694be15f74c72a06c901833f3f073df3405ade4e07a9, bundled OpenBLAS.so940c6557fc88fb9f30124e3b37d79f8c1abec07c1b8b93ead0407f336ba8f476. Outer/OpenBLAS/NumPy build logs:63fa69ac...,1e324075...,5925c0ff...respectively.auditwheel showreports minimum manylinux_2_27. No libgfortran/libquadmath file, DT_NEEDED, or undefined symbol in the 20 wheel ELF shared objects.9f21f7061f26cdc6f173c29a5a2754c68326d7b397c6bc75bfb4f7543ed21ba4; they are not yet inside the wheel. The six observed PEP 517 backend packages are version and wheel-hash pinned in a cp312 Linux build requirements file SHA-2562ae4e6719087e7d79efd01e3604ee15352f626b20c7b383040e0cc3a36b6cddc; offlinepip download --require-hasheswith dependency resolution passed (logf8b34c6c...). The completed build fetched these dynamically, so reproducibility has not been demonstrated._multiarray_umathand_pocketfft_umathrequire externallibgcc_s.so.1andlibstdc++.so.6; the exact Expose adjusted R squared and verify HC3 normal Wald contrasts #2157_corealso directly needslibgcc_s.so.1and GCC_Unwindsymbols. GCC describes libstdc++ and libgcc source as GPLv3 with the GCC Runtime Library Exception. That exception does not turn them into a non-GPL license under this project's exclusion rule. A pinned Clang/LLVM plus libc++/compiler-rt/libunwind route is a proposal only; the current builder image lacks the toolchain, and no replacement binary or parity evidence exists.e1fa5189d21a6321b60e6b2ce3b9eb73d1a1625f, OPEN/REVIEW_REQUIRED. Its tracked archive SHA-2564665f02a9d1164352316a4980ff3da81f6c6032a69eef91ef4405be229f3f049was built in isolated s1 with this NumPy candidate (editable build exit 0, log49c8a3c4..., native_coreSHA-256217133f5f3891923844c38fb8ab5091e33ba6dd91a4f2ddf88addbfa1ee28f26). Focusedtests/test_rust_regression_ols_hc_parity.pyexit 0, 10/10 passed; log SHA-25647795c308cde97f832311e2fd466ec7fa6ed739823a055040d620b739b4ca291. This is local representative HC3/contrast/adjusted-R² evidence, not hosted CI or a qualifying non-author approval.All local artifacts and complete hashes are retained on s1 under
/data/orca/workspaces/fmls-numpy252-linux-x86_64-candidate-20260925/audit_A/(followup-20260925.mdSHA-256bf1ecab441e01a6eb49ea634ae0053352093e955e0f2960ea84e155d13b79b2a). Next gate: one permitted-runtime Linux pair with embedded notices, locked builder, ELF/SBOM closure and exact-head numerical acceptance, then decide whether to expand the matrix. Windows remains with #2155 owner. No merge, rerun of required checks, or release occurred.seonghobae commentedon Sep 25, 2026
2026-09-26 A3 read-only toolchain preflight under the clarified user boundary:
/usr/lib/llvm-14/bin/clang(SHA-25631925065…) directly requireslibstdc++.so.6andlibgcc_s.so.1; itslibc++abi.so.1(SHA-2560539aa51…) also requireslibgcc_s.so.1./usr/bin/cargodirectly requireslibgcc_s.so.1. The completedpkg -S,sha256sum, andreadelf -dtranscript is/Users/seonghobae/.local/orca-watchdog/reports/fmls-a3-s1-toolchain-preflight-20260926.log, SHA-256003d4a5547a482f409a5f74d23acb3b0f967ec36adcb59409558c857e22f782d.libgcc_s.so.1is supplied here by Ubuntulibgcc-s1;libstdc++.so.6resolves to Ubuntulibstdc++6. This host observation is not an automatic policy exception and does not prove the 12 release builders' or consumers' providers. GNU libstdc++ is GPLv3 plus the GCC Runtime Library Exception (upstream terms); the user explicitly requires individual provider/bundle/license/exception classification.clang++ -###with-stdlib=libc++ --rtlib=compiler-rt --unwindlib=libunwind -fuse-ld=lldselects the intended LLVM libraries for a hypothetical output, but the command still includes GCC search directories. It produced no artifact. The installed s1 Clang/Cargo stack cannot be treated as a qualified GPL-free build/development closure. The next bounded gate is a pinned toolchain and build-dependency inventory before any second candidate build; then inspect actual NumPy and_coreELF/ABI/NOTICE closure.Standard glibc CPython/manylinux remains supported; only OS-provided basic components such as glibc are outside the license-policy test. A3 HOLD, no build or release from this preflight.
seonghobae commentedon Sep 25, 2026
Correction to my preceding toolchain preflight: the coordinator clarified the user policy boundary. Ubuntu-provided clang/cargo executable links to OS-supplied, unbundled libgcc_s/libstdc++ do not by themselves disqualify an isolated local build. Their observed ELF links remain evidence for classifying actual release artifacts and consumer providers; no automatic exception for bundled/vendor, project-acquired build/dev/optional dependencies, or non-OS external runtime libraries follows. I am proceeding with one isolated s1 cp312 NumPy 2.5.2 + #2157 e1fa518 candidate pair from verified source bytes. Full LLVM exploration is paused. NOTICE, artifact ELF/ABI/license and numeric results can fail; 12-wheel expansion, merge, release and research adoption remain HOLD.
seonghobae commentedon Sep 25, 2026
A3 single cp312 pair evidence at #2157 exact
e1fa5189d21a6321b60e6b2ce3b9eb73d1a1625f(s1, pinnedmanylinux_2_28image, network disabled):NOFORTRAN=1 C_LAPACK=1noticed wheel SHA256e3edaf4608013413d6aabe0f5bdbe3d3f15bb697b77de683d87bdd8b03a3c4d9;_corewheel SHA25646198f7ed6b3cbea30271e54f5eec294bb9609de534eb8d0084eb344fedb3ccc.7fffc74d02fca1300c73238193c58d09d9ae2e3a2e5d478c389f958aed80c991. Core build exit 0; auditwheel log SHA2560966c41987c0de9eff72abd6d9f42c8547333076f29a6f0651595ee83ad93918reportsmanylinux_2_28floor./lib64/libgcc_s.so.1(RPMlibgcc-8.5.0-28.el8_10.alma.1), not a bundled wheel file. Per the clarified OS boundary, that system link alone did not bar the local build.HOLD: full project-acquired build/dev/optional/Rust/sdist license closure, remaining 11 wheel legs, 2.17 compatibility decision, hosted required checks, valid non-author approval, Windows runtime evidence, merge, release, and research adoption. No policy exception or platform reduction is inferred.