[Nix-dev] Make wrappers be binaries instead of shell scripts?

Thomas Tuegel ttuegel at gmail.com
Tue Nov 18 15:02:29 CET 2014


On Tue, Nov 18, 2014 at 7:32 AM, Wout Mertens <wout.mertens at gmail.com> wrote:
> Hi all,
>
> I'm wondering if it wouldn't be better to make the application wrapper
> scripts generated by makeWrapper be binaries that do the environment
> massaging and config in binary code before exec() ing the wrapped program.
>
> The advantages would be that the wrapper itself loads very fast since all
> the shell init and shell parsing is skipped. You also get precise control
> over the execv() call or other desired factors.

I was discussing this on #nixos yesterday in light of a long standing
bug in our wrapper for Hoogle. Hoogle requires its arguments in a very
specific order, so it has a custom wrapper which had a bug because I
didn't fully understand the vagaries of $@ versus "$@" in bash. My
point being, I think precision is the stronger argument here.

> The disadvantages are that you can't read what a wrapper does and the
> wrapper file is bigger (about 4KB in my tests for a simple execv()).

The middle ground here would be to use something like execline [1]
which avoids the overhead of loading a traditional shell, but still
reads a human-inspectable script.

> Thoughts?
>
> Wout.
>
> _______________________________________________
> nix-dev mailing list
> nix-dev at lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>

[1] http://skarnet.org/software/execline/

-- 
Thomas Tuegel


More information about the nix-dev mailing list