Use nix
Breaking change: when a child exits because of a signal, the shell no longer takes an exit code of 128 + signal, only a simple 1.
The resulting executable is not slower, but has a 1% size increase. The signals are printed as text at output, though.