fix(local): statically link libstdc++ in Linux orbit binary
## Problem The released orbit Linux binary requires **GLIBC ≥ 2.34** and **GLIBCXX ≥ 3.4.30** (GCC 12+ libstdc++). It fails to run on RHEL/UBI 8 (GLIBC 2.28) and even on UBI 9 minimal (GLIBCXX 3.4.29 — GCC 11). The C++ ABI gap is the real blocker, not glibc — it comes from `duckdb-client/bundled`, where DuckDB is compiled from C++ and dynamically linked against the build host's libstdc++ (Debian Bookworm, GCC 12). This blocks `orbit local` in Duo Workflow workload containers. The default image (`registry.gitlab.com/gitlab-org/duo-workflow/default-docker-image/workflow-generic-image:v0.0.6`) is RHEL 8 based, and the hardened UBI 9 image also fails today: ```text $ docker run --rm -v /tmp/orbit-test:/work \ registry.gitlab.com/gitlab-org/duo-workflow/default-docker-image/workflow-generic-image:v0.0.6 \ /work/orbit --version /work/orbit: /lib64/libc.so.6: version `GLIBC_2.34' not found /work/orbit: /lib64/libgcc_s.so.1: version `GCC_12.0.0' not found /work/orbit: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.30' not found /work/orbit: /lib64/libstdc++.so.6: version `CXXABI_1.3.13' not found ``` Full research and verification: https://gitlab.com/gitlab-org/orbit/knowledge-graph/-/snippets/5994579 ## Proposal Mirror the Windows build's static-linking flags to the Linux build. The Windows job in `.gitlab/ci/release-local.yml` already sets: ```yaml RUSTFLAGS: "-C link-arg=-static-libgcc -C link-arg=-static-libstdc++" ``` Adding the same `RUSTFLAGS` to `.local-cli-build-linux` statically links libstdc++ and libgcc into the binary, eliminating the host libstdc++/libgcc dependency. Glibc is still linked dynamically, but the GLIBCXX/CXXABI/GCC gap disappears. After this change, orbit runs on **any glibc ≥ 2.34 system** regardless of libstdc++ vintage — UBI 9 minimal, Bookworm, Ubuntu 22.04+, etc. ```diff .local-cli-build-linux: extends: - .job-template - .sccache-template - .local-cli-release-rules stage: build needs: [] variables: PLATFORM: linux + RUSTFLAGS: "-C link-arg=-static-libgcc -C link-arg=-static-libstdc++" script: - ./scripts/build-local-cli.sh ``` ## Scope - One-line change in `.gitlab/ci/release-local.yml`. - Binary size increases ~2-3 MB. - No behavior change, no source-code change, no new target triple. ## Acceptance criteria - `ldd target/x86_64-unknown-linux-gnu/release/orbit` shows no `libstdc++.so.6` or `libgcc_s.so.1` dependency. - Binary runs on UBI 9 minimal (`registry.access.redhat.com/ubi9-minimal`) without `GLIBCXX_3.4.30 not found` errors. - `local-cli-build-linux-amd64` and `local-cli-build-linux-arm64` jobs pass on CI. ## Follow-up For environments below glibc 2.34 (RHEL 8, Ubuntu 20.04, air-gapped/scratch containers), a fully static musl binary is the long-term answer — tracked separately in #769 so this immediate fix can land independently. <!-- This issue captures the immediate, low-risk fix. The musl follow-up is the gold-standard "runs anywhere" solution but introduces real porting work for bundled DuckDB. -->
issue