stablyai/orca · critical
[verify-linux-glibc-floor] ${offenders.length} bundled nativ
Error message
[verify-linux-glibc-floor] ${offenders.length} bundled native binar${offenders.length === 1 ? 'y' : 'ies'} will not load on ${FLOOR_LABEL}, so the app will crash on startup there:
${detail}
See docs/reference/linux-glibc-compatibility.md — rebuild the offending module against an older toolchain or pin the relocated symbols (as config/patches/node-pty@1.1.0.patch does). What it means
The most severe outcome: one or more bundled native binaries require a glibc (GLIBC_/GLIBCXX_/CXXABI_) symbol version newer than the Ubuntu 20.04 floor, or import a relocated symbol whose provider isn't in DT_NEEDED. Such a binary will fail to load — and crash the app on startup — on the floor OS. This gate exists precisely because v1.4.150 shipped a node-pty that needed GLIBC_2.34 and crashed on glibc 2.31. The message lists each offender with the symbols/libraries it needs and points at the compatibility doc and the node-pty patch as the fix template.
Source
Thrown at config/scripts/verify-linux-glibc-floor.cjs:363
if (offenders.length > 0) {
const detail = offenders
.map(({ filePath, floorViolations, providerViolations }) => {
const reasons = []
if (floorViolations.length > 0) {
const nodes = [...new Set(floorViolations.map((v) => v.name))].sort()
const libraries = [...new Set(floorViolations.map((v) => v.library).filter(Boolean))]
reasons.push(
`needs ${nodes.join(', ')}${libraries.length > 0 ? ` (from ${libraries.join(', ')})` : ''}`
)
}
for (const { symbol, library } of providerViolations) {
reasons.push(`imports ${symbol} but ${library} is not in DT_NEEDED`)
}
return ` ${relative(rootDir, filePath) || filePath} ${reasons.join('; ')}`
})
.join('\n')
throw new Error(
`[verify-linux-glibc-floor] ${offenders.length} bundled native binar${offenders.length === 1 ? 'y' : 'ies'} ` +
`will not load on ${FLOOR_LABEL}, so the app will crash on startup there:\n${detail}\n` +
'See docs/reference/linux-glibc-compatibility.md — rebuild the offending module against an older ' +
'toolchain or pin the relocated symbols (as config/patches/node-pty@1.1.0.patch does).'
)
}
console.log(
`[verify-linux-glibc-floor] OK — ${binaries.length} bundled native binaries all load on ${FLOOR_LABEL}`
)
}
module.exports = {
MIN_GLIBC,
VERSION_FLOORS,
FLOOR_LABEL,
RELOCATED_SYMBOL_PROVIDERS,
parseGlibcVersion,View on GitHub (pinned to 1136503c6a)
Solutions
- Rebuild the offending native module against the floor toolchain (Ubuntu 20.04 / glibc 2.31) so its symbol versions stay at or below the floor.
- If the symbol was relocated (e.g. openpty/forkpty moved from libutil to libc in glibc 2.34), apply a patch like config/patches/node-pty@1.1.0.patch to pin the provider into DT_NEEDED.
- Read docs/reference/linux-glibc-compatibility.md for the full diagnosis workflow before re-running the gate.
- Do not lower MIN_GLIBC or exempt the binary unless it loads lazily and never at launch (the sherpa-onnx speech exemption is the precedent).
Defensive patterns
Strategy: validation
Prevention
- Build native modules on the floor OS (Ubuntu 20.04) so symbol versions never exceed glibc 2.31 / GLIBCXX_3.4.28.
- Pin runner images by digest, not by rolling tag, to detect silent glibc bumps.
- Apply patches like config/patches/node-pty@1.1.0.patch for relocated-symbol issues rather than exempting.
- Run verify-linux-glibc-floor in every Linux release CI job.
When it happens
Trigger: offenders.length > 0 after iterating all bundled binaries through findFloorViolations and findMissingProviderDeps, at line 346/363. Triggered when a native dependency was built against a newer toolchain (newer glibc/libstdc++ headers) than Ubuntu 20.04 provides, or when symbols like openpty/forkpty were relocated into libc without adding the provider to DT_NEEDED.
Common situations: A GitHub Actions runner image silently bumped its glibc; a prebuilt manylinux wheel/native module compiled on a newer distro; rebuilding node-pty on Ubuntu 22.04 instead of 20.04.
Related errors
- [verify-linux-glibc-floor] could not run objdump on ${filePa
- [verify-linux-glibc-floor] objdump ${flag} failed for ${file
- [verify-linux-glibc-floor] objdump not found. Install binuti
- Unsupported packaged node-pty Windows architecture: ${archit
- Unsupported packaged runtime architecture: ${String(electron
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/48640576f7837f18.
Report an issue: GitHub.