bwrap --help — which succeeds wherever the binary is installed and says
nothing at all about whether the kernel will hand out the namespaces bwrap
needs. Where it will not, bwrap was present, was chosen, started, and failed
after the spawn had already returned success. The plugin produced nothing and
reported nothing.
That is precisely the asynchronous silence 0.13.0’s interpreter check was
written to eliminate, one layer up: the command is bwrap … deno …, so as far
as Cordial could see, the process started.
Where this bites
Any host the kernel refuses the namespace on:- Debian and derivatives with
kernel.unprivileged_userns_clone=0 - hosts with
user.max_user_namespaces=0 - an AppArmor or SELinux policy that denies it
- inside another container, which is how it was found
How it was found, and the evidence
0.13.1 madedeno a hard dependency of the Arch package. That gave the
archlinux:base-devel container an interpreter for the first time, so a test
that had been skipping there for want of one finally ran — and failed. The
container’s own log, verbatim, three times immediately before it:
The fix
The check is now a real sandbox over the same namespace and mount work the live command does, rather than--help. It is cached, because the answer cannot
change under a running client and the probe costs a process.
Where it fails, the layer falls back to Deno’s zero permissions and the
broker — which is what a Flatpak install has had all along, and what every
install had before the bwrap layer existed. It is a downgrade and it is
reported as one: the line printed at spawn now reads Deno permissions + broker (no OS sandbox available on this install) instead of claiming a bwrap that was
not working.
Controls both ways. On this host, bwrap --help and the real probe both
succeed and the workspace suite passes with the sandbox chosen. In the Arch
container, --help succeeded and the probe is refused — which is the case that
was being got wrong, on a real machine, with its message quoted above. A test
pins the two answers agreeing in both directions, so it is a live assertion on a
host with a working bwrap and on one without.
0.13.1 shipped as a Flatpak and nothing else
The test above runs inside the job that builds the Arch package, so that job failed, and the step that attaches every native package to the release is one step that waits for all four. The.deb, .rpm and AppImage all built
correctly and were attached to nothing.
So the 0.13.1 release page carries a Flatpak alone. If you install by any
other route, this release is the one to take — it is 0.13.1 plus the fix above,
and its notes are worth reading, since 0.13.1 is where plugins became able to
run at all.
What is still broken
Everything 0.13.1 listed, unchanged: the startup freeze when signed in, the black canvas inside an experience, text in a box disappearing when you click off it, the editor lagging a text box Roblox is animating, the web-view dialog’s clicks and cursor, and the TaskScheduler crash — diagnosed and instrumented in 0.13.1, not fixed.gamepadType’s ordinals are still unestablished.
And 0.13.1’s three unobserved fixes are still unobserved: the / flash, the
consent prompt, and the plugin Download row in Settings. Nothing here changed
any of them.