Repository navigation
e2fsprogs (GPL-2.0) required as macOS host dependency — request for configurable path and permissive alternatives #2308
Description
Activity
- addedstate:triage-neededOpened without agent diagnostics and needs triageOpened without agent diagnostics and needs triage
on Jul 16, 2026 I think the report may be conflating macOS host dependencies with files inherited by the Linux guest image.
- On macOS,
e2fsprogsis an external host dependency used to create ext4 images; it is not bundled in OpenShell's source or official macOS release artifacts. - The Linux
mke2fs,debugfs, andmkfs.ext4files in the default rootfs are inherited from the Community bootstrap image's Ubuntu parent, which also includes the package's copyright metadata and GPL-2 license text. - The VM driver does not copy the host tools or libraries into the rootfs. A compatible custom
bootstrap_imagewithoute2fsprogsproduces a rootfs without them. - The reported
.dylibnames match Homebrew's host-side dependency closure, but I found no.dylibfiles in the Linux rootfs artifacts I inspected. If they were observed insiderootfs.ext4, please provide the raw scanner output and image digest.
- On macOS,
- removedstate:triage-neededOpened without agent diagnostics and needs triageOpened without agent diagnostics and needs triage
on Jul 17, 2026 - changed the title
[-]# GPL-2.0 licensed binaries bundled in sandbox rootfs — can be replaced with permissively-licensed alternatives[/-][+]GPL-2.0 licensed binaries bundled in sandbox rootfs — can be replaced with permissively-licensed alternatives[/+]on Jul 17, 2026 - changed the title
[-]GPL-2.0 licensed binaries bundled in sandbox rootfs — can be replaced with permissively-licensed alternatives[/-][+]e2fsprogs (GPL-2.0) required as macOS host dependency — request for configurable path and permissive alternatives[/+]on Jul 22, 2026 Thanks @drew for the thorough response — you're correct that the original report conflated macOS host dependencies with Linux rootfs contents. After a deeper investigation into both codebases, here's a more precise breakdown.
Correction:
.dylibfiles are macOS host-side, not inside the Linux rootfsThe
.dylibentries listed in the issue are macOS dynamic libraries from Homebrew's e2fsprogs formula. They do not exist inside the Linux guest rootfs (Linux uses.so). you are right — the Linux-sidemke2fs/debugfsin the rootfs are inherited from the Ubuntu base image and ship with standard Debian/Ubuntu copyright metadata.Why we bundle e2fsprogs on the macOS host
The OpenShell VM driver (
openshell-driver-vm) requiresmke2fs,mkfs.ext4, anddebugfsat runtime on the macOS host to:- Create ext4 disk images from
rootfs.tar— format_ext4_image_from_dir() in [crates/openshell-driver-vm/src/rootfs.rs](https://github.com/NVIDIA/OpenShell/blob/main/crates/openshell-driver-vm/src/rootfs.rs) invokesmke2fs/mkfs.ext4 - Inject files into the ext4 image (TLS certs, JWT keys, init scripts) — write_rootfs_image_file() and set_rootfs_image_file_mode() invoke
debugfs
Hardcoded Homebrew paths in OpenShell source
The driver's tool resolution function hardcodes Homebrew prefixes for both Apple Silicon and Intel Macs:
// crates/openshell-driver-vm/src/rootfs.rs fn e2fs_tool_candidates(tool: &str) -> Vec<PathBuf> { let mut candidates = vec![PathBuf::from(tool)]; for root in ["/opt/homebrew/opt/e2fsprogs", "/usr/local/opt/e2fsprogs"] { candidates.push(Path::new(root).join("sbin").join(tool)); candidates.push(Path::new(root).join("bin").join(tool)); } candidates }
This means the driver searches in this order:
$PATHlookup (bare tool name — e.g.mke2fs)/opt/homebrew/opt/e2fsprogs/{sbin,bin}/(Apple Silicon Homebrew)/usr/local/opt/e2fsprogs/{sbin,bin}/(Intel Homebrew)
If the tool is not found anywhere, rootfs provisioning fails with:
failed to create ext4 rootfs image: ... Install e2fsprogs (mke2fs/mkfs.ext4) and retrymacOS ships no ext4 utilities natively, and for enterprise distribution we cannot assume end users have Homebrew installed. So our installer bundles precompiled e2fsprogs binaries from Homebrew into a private prefix at
/usr/local/share/arc/e2fsprogs/{bin,sbin,lib}/— never into Homebrew's own paths. At runtime, we prepend this path toPATHwhen spawning the gateway, so candidate Point#1 above resolves to our bundled copy.The bundled files and their licenses:
File License bin/mke2fs,sbin/mke2fsGPL-2.0 bin/debugfs,sbin/debugfsGPL-2.0 bin/mkfs.ext4,sbin/mkfs.ext4symlink → mke2fs lib/libext2fs.*.dylibLGPL-2.0 lib/libe2p.*.dylibLGPL-2.0 lib/libblkid.*.dylibLGPL-2.1 lib/libcom_err.*.dylibMIT-derived lib/libss.*.dylibMIT-derived lib/libuuid.*.dylibBSD-3-Clause lib/libintl.*.dylibLGPL-2.1 (gettext) Dylib references are rewritten via
install_name_toolto load from the bundledlib/directory, and all binaries are re-signed ad-hoc in the postinstall script to ensure consistent code signing.Questions for the OpenShell team
-
Environment variable override: Would you consider adding an
OPENSHELL_E2FSPROGS_DIR(or similar) environment variable to let integrators specify a custom e2fsprogs prefix? This would let us point the driver directly at our bundled path without relying on$PATHinjection. -
Permissive alternatives: Are there plans to replace the
mke2fs/debugfsdependency with a Rust-native or permissively-licensed ext4 implementation? This would eliminate the GPL-2.0 bundling requirement entirely for downstream distributors. -
Compliance guidance: For distributors who must bundle these GPL-2.0 binaries — is including the GPL-2.0 license text alongside the binaries plus a source-code URL (pointing to the e2fsprogs upstream git) sufficient, or does NVIDIA recommend a specific compliance approach?
- Create ext4 disk images from
Permissive alternatives: Are there plans to replace the mke2fs/debugfs dependency with a Rust-native or permissively-licensed ext4 implementation?
No concrete plans, but I have an idea to prebuild sparse ext4 templates in CI using e2fsprogs. Then we can ship the compressed filesystem artifacts and remove the host dep. Let me give this approach a try and see if it works.
This issue has had no activity for 14 days and is now marked stale. It may be closed in 7 days if there is no further activity. Comment or remove the state:stale label to keep it open.
- addedstate:staleInactive item at risk of automatic closure.Inactive item at risk of automatic closure.
on Aug 28, 2026
Problem Statement
e2fsprogs (GPL-2.0) required as macOS host dependency — request for configurable path and permissive alternatives
Summary
The OpenShell sandbox rootfs (
sandbox-bootstrap-rootfs-ext4-v3-openshell-*) bundles e2fsprogs binaries and libraries, some of which are licensed under GPL-2.0. We need clarification on:Bundled Files
Analysis of the rootfs shows 13 filesystem entries from e2fsprogs:
bin/mke2fsbin/debugfsbin/mkfs.ext4sbin/mke2fssbin/debugfssbin/mkfs.ext4lib/libext2fs.2.1.dyliblib/libe2p.2.1.dyliblib/libblkid.2.0.dyliblib/libcom_err.1.1.dyliblib/libss.1.0.dyliblib/libuuid.1.1.dyliblib/libintl.8.dylibEnvironment
sandbox-bootstrap-rootfs-ext4-v3-openshell-0.0.74Impact
This is blocking enterprise distribution of products built on OpenShell until compliance approach is clarified.
References
Proposed Design
Questions
Purpose: What functionality in OpenShell requires
mke2fsanddebugfs? Are they used at runtime or only during rootfs build?Removal: Can these binaries be excluded from the distributed rootfs if they're only needed at build time?
Compliance approach: If these must be distributed, what is NVIDIA's recommended compliance approach?
Alternatives: Are there plans to replace GPL-2.0 tools with permissively-licensed alternatives (e.g., for ext4 operations)?
Alternatives Considered
GPL-2.0 Compliance Requirements
When distributing GPL-2.0 binaries, the following obligations apply:
Agent Investigation
No response
Checklist