since the operating system may decide to flush the buffers of each process in an unpredictable order.
The operating system is unaware of each process's buffer and cannot make such decisions. The buffers are completely internal to each process's C library (or other runtime library) and the OS has no control of when they are flushed, or whether they exist at all – indeed the entire point of such buffers is that no write syscalls are made to the OS (i.e. the OS is deliberately not made aware of buffered data) until the buffer is flushed.
So if you don't fflush() or setlinebuf(), there is no operating system policy; the order of the prints is approximately the order in which each process fills its buffer to the limit (if they all print multiple lines) or the order in which each process exits (flushing its buffers on exit).