This backwards compatibility decision to separate threads from domains has been very useful and allows to gradually "port" existing code to 5.0: first just fixup C bindings to avoid naked pointers, and then code can safely run on OCaml 5 just as before.
And once a program (and all its dependencies) have removed dependence on global state they can opt-in to multicore by spawning additional domains.
And once a program (and all its dependencies) have removed dependence on global state they can opt-in to multicore by spawning additional domains.