Correct. My mistake.
spawn and detach are called on a single process - there
is no root.
attach is collective because it involves a communicator.
One more tricky detail that may come up:
The text says that detach "synchronizes" with
MPI_Init() in the children. It does not say
"collective" because it is not a standard MPI
collective operation (no communicator).
The specific meaning of this probably has to be:
1. MPI_Init() will not return in *any* child until
MPI_Child_detach (or attach) is called on the parent
2. MPI_child_detach will not return in the parent
until at least one (but maybe all) of the children
have called MPI_Init().
On the other hand, attach() is collective with MPI_Init() in
the usual sense.