The fact that 99.9+ invocations of fork() are immediately followed by exec() shows that the abstraction is a mistake.
Unix would have been better if execution thread and address space had been separate abstractions.
Unix would have been better if execution thread and address space had been separate abstractions.
Additionally, it can also be used in languages that don't have good support for threading (e.g. PHP) to implement parallel processing with shared memory.
However, I'd say that Redis use case is probably the only legit use case (today) of fork without execing, where benefits are huge, and there is no good replacement.
That said, processes should not share virtual address spaces by default. Sharing memory between processes should be an explicit choice.
(Or should 99.9% of calls to spawn() be followed by new_address_space()? )
The researchers can write their own single address space os if they are so inclined.