Why fork() then exec()

Why does Unix separate process creation into fork() and exec() instead of having a single 'create new process with this program' call?

A

exec() can only be called from a child process, so fork() must come first

B

Historical accident; modern systems would combine them if redesigned

C

Allows the parent to manipulate the child's file descriptors, environment, and other state between fork and exec

D

fork() is faster than a combined call because it uses copy-on-write