I think the C code replacing the ML code for Unix.execute does not quite do what the ML code used to. Specifically the execve call here https://github.com/polyml/polyml/blob/master/libpolyml/unix_specific.cpp#L20... does not pass the cmd as the first argument, whereas the ML version did. This is a user-visible change in the API that was probably unintended.