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

  1. 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.
  2. 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.
  3. Read docs/reference/linux-glibc-compatibility.md for the full diagnosis workflow before re-running the gate.
  4. 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

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


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/48640576f7837f18. Report an issue: GitHub.