Popen class:
https://github.com/bitcoin/bitcoin/blob/0de63b8b46eff5cda85b4950062703324ba65a80/src/util/subprocess.hpp#L1009-L1020
Some of them are either not fully implemented (shell, missing an implementation on Windows), implemented in an ugly way (e.g. using “Impoverished, meager, needy, truly needy version of type erasure” for preexec_func according to the author’s own words) or simply unlikely to be ever needed for our external signer use-case (defer_spawn). Instead of maintaining incomplete and/or unneeded code, I’d suggest to get rid of it and only keep support for options if there is a strong reason for it.