Why are we doing this nonsense?
We want to be able to run builds in a sandbox such that they can only see the paths they are intended to depend on, to improve reproducibility.
With builds with a very large number of dependencies, there's a very large number of paths added to the sandbox, and it breaks things inside libsandbox.
Either it hits some sandbox length limit (sandbox-exec: pattern serialization length 66460 exceeds maximum (65535), Nix issue #4119, worked around: Nix PR 12570), or it hits an assert (this report; also Nix issue #2311).
The other options for sandboxing on macOS are not viable; we acknowledge sandbox-exec and sandbox_init_with_parameters are deprecated; App Sandbox is inapplicable because we aren't an app.
Our use case is closer to a browser, and all the browsers use libsandbox internally.
We could possibly use SystemExtension or a particularly diabolical use of Virtualization.framework, but the former API requires notarization which is close to a no-go for our use case as open source software: it is nearly impossible to develop the software on one's own computer, and it would require us to ship a binary blob (and have the build processes to produce one in infrastructure completely dissimilar to what we use today); it also requires a bunch of engineering time.
Today, we can pretend that code signing/notarization doesn't exist and that we are writing an old-school Unix daemon, because we are one.
The latter is absolutely diabolical and hard to implement.
See this saga about the bug we are facing: Nix issue #4119, Nix issue #2311, etc.
What is going wrong
I can't attach the file fail.sb as it is too large (you can view the failing test case at Lix's gerrit, CL 2870) and run this:
$ sandbox-exec -D _GLOBAL_TMP_DIR=/tmp -f fail.sb /bin/sh
Assertion failed: (diff <= INSTR_JUMP_NE_MAX_LENGTH), function push_jne_instr, file serialize.c, line 240.
zsh: abort sandbox-exec -D _GLOBAL_TMP_DIR=/tmp -f fail.sb /bin/sh
Or a stacktrace:
stacktrace.txt
Credits
Full credits to Jade Lovelace (Lix) for writing the above text and filing a bug.
This is submitted under FB16964888
Selecting any option will automatically load the page