Arch Linux Cargo build: sandboxed V8 default archive missing and source fallback lacks ICU data
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
What version of Codex CLI is running?
Source build, codex-cli 0.0.0; base commit 455318c202.
What subscription do you have?
Not relevant to this source-build failure; subscription details not supplied.
Which model were you using?
Not applicable; compilation fails before model use.
What platform is your computer?
Arch Linux, x86_64-unknown-linux-gnu. Current host: Linux 7.2.3-arch1-2 x86_64 GNU/Linux.
What terminal emulator and version are you using (if applicable)?
Not supplied; failure occurs in the compiler/build system.
Codex doctor report
Not collected; this report concerns source compilation.
What issue are you seeing?
Plain Cargo builds on Arch Linux reach the sandbox-enabled v8 150.4.0 dependency, fail to download the default sandbox prebuilt, and encounter missing third_party/icu/common/icudtl.dat when retried with V8_FROM_SOURCE=1.
Reported path: cargo install → codex-code-mode-runtime → v8_enable_sandbox → v8 150.4.0 build.rs → default prebuilt download 404 → explicit source-build retry → GN/Ninja requires the missing ICU blob for gen/third_party/icu/icudtl_dat.S.
What steps can reproduce the bug?
- Use the pinned crates.io v8 150.4.0 dependency and Codex's sandbox-enabled code-mode-runtime on x86_64 GNU Linux.
- Attempt a plain Cargo installation/build of a target consuming code-mode-runtime, without Codex-specific V8 archive/binding overrides.
- After the default prebuilt download fails, retry with V8_FROM_SOURCE enabled using the extracted crates.io package without manually supplied ICU data.
- Observe the reported missing ICU input in the source build.
These steps describe the supplied failure report. The failure and candidate fixes were not executed again for this issue.
What is the expected behavior?
The documented local Cargo path should obtain a matching sandbox-enabled archive/binding pair, or provide a complete, reproducible source-build path and instructions for required inputs while retaining the sandbox security feature.
Additional information
Root-cause analysis
- Codex code-mode-runtime Cargo.toml:26 enables v8_enable_sandbox; workspace Cargo.toml:511 pins v8 to 150.4.0. The security change was introduced by 2e32d95894, Enable sandboxed V8 for code mode.
- rusty_v8 build.rs includes pointer-compression/sandbox suffixes in default artifact names. The v150.4.0 upstream release has no matching Linux sandbox archive in its inspected asset list. Enabling sandbox does not automatically select a source build; V8_FROM_SOURCE is an explicit alternative.
- The inspected crates.io v8-150.4.0/Cargo.toml explicitly excludes third_party/icu/common/icudtl.dat and icudtb.dat. Its vendored ICU BUILD.gn selects common/icudtl.dat on this target and passes it to make_data_assembly. The inspected build.rs contains no ICU-data fetch step.
- The rusty_v8 tag pins its ICU submodule to ee5f27adc28bd3f15b2c293f726d14d2e336cbd5; a recursive source checkout provides the source location for that data.
Together these explain the default-download failure and the reported incomplete-package source fallback. The reason for the package's exclusion (including any registry size-limit rationale) was not independently established and is not asserted here.
Fix methods to consider (not build-tested for this report)
- Use Codex's documented matching sandbox archive and bindings. third_party/v8/README.md documents RUSTY_V8_ARCHIVE and RUSTY_V8_SRC_BINDING_PATH. The Codex rusty-v8-v150.4.0 release currently contains librusty_v8_ptrcomp_sandbox_release_x86_64-unknown-linux-gnu.a.gz, its checksum asset, and src_binding_ptrcomp_sandbox_release_x86_64-unknown-linux-gnu.rs. Wire or document this path for local Cargo builds, using matching version, target, feature set, bindings, and integrity verification.
- Use a recursive rusty_v8 v150.4.0 source checkout with the pinned ICU submodule for a source build.
- Supply the missing ICU data from that exact submodule revision to the extracted crate before a source build. This is a manual package repair, is not reproducible by Cargo alone, and can be lost when the registry source directory is removed or re-extracted. Its sufficiency for a full build remains unverified.
- Disabling v8_enable_sandbox would change the security boundary introduced by #36374 and should not be treated as the default remedy; it would require an explicit maintainer decision.
The existence of Codex's own release assets means the broad claim that sandbox builds are universally source-only, or that no environment override can help, would be incorrect. This report is specifically about default local Cargo artifact selection and the crates.io source fallback. No shell script is included and no source build, download-and-install remedy, or sandbox-disabling change was executed for this report.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with codex-rs/code-mode-runtime/Cargo.toml, codex-rs/Cargo.toml, and third_party/v8/README.md, then reproduce the plain Cargo build on Arch Linux. Compare the pinned V8 version, sandbox feature, archive, bindings, and ICU inputs. Done means the documented local build obtains matching verified artifacts or has a complete reproducible source-build path without disabling sandboxing.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- arch-linux, rust
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100