why not model the run_address on execv? This is execv: int execv(const char *path, char *const argv[]);
So run_address become, instead: int run_address(void (*f)(void *argv), char *const argv[], void *stack);
both argv and stack can be NULL.
This leaves us with a great deal of flexibility and an interface that looks like a threat startup.
ron