Zerosquare (./3906) :
fork() n'est pas un élément indispensable, c'est un choix qui a été fait par UNIX il y a longtemps, et j'ai toujours ça trouvé bizarre d'avoir implémenté fork() bien avant les threads, qui sont quelque chose de conceptuellement plus simple.
C'est parce que fork() est indispensable pour lancer un processus dans l'API POSIX, vu comment fonctionnent exec*().
Bien sûr, on aurait pu implémenter spawn*() à la place de fork() et exec*(), mais à ma connaissance, ces fonctions n'ont été introduites que plus tard et sont implémentées dans la libc en fonction des syscalls fork() + exec*().