|
|
|
|
|
by boricj
1119 days ago
|
|
It looks like one can easily call fork() in an unsafe block from Rust [1], assuming it's provided by the target's libc. OpenVMS for example does not provide fork(). What it does provide is vfork() by doing some internal book-keeping within the C run-time library and delaying the actual child process creation until exec() is called [2]. The POSIX specification eventually standardized posix_spawn() [3] as a partial alternative for fork() due to its numerous issues, some of which are detailed in the rationale section of its specification. Sadly, it appears its usage is not as widespread as it could be. I'm not blaming the WASIX project for providing POSIX semantics since running POSIX-compliant programs is an explicit design goal. What I do wish is that more people realize that POSIX isn't the pinnacle of operating system interface engineering or some sort of holy scripture that shall not be questioned. It's 1970s legacy from long defunct hardware and obsolete software (think PDP-11 and Version 7 Unix) that was written down as a specification in the 1980s. [1] https://docs.rs/libc/latest/libc/fn.fork.html [2] https://vmssoftware.com/docs/VSI_C_RTL_REF_MAN.pdf [3] https://pubs.opengroup.org/onlinepubs/9699919799/ |
|