In MINIX, afaik, you ship some drivers with the kernel in the same file. But those drivers runs in user space and separate from each other. The issue is not related with shipping.
IMO, loading the drivers at runtime is the easiest part of microkernels. It is really very very very tiny step. There are a lot more things to do, like doing IPC between operating system components, managing memory, scheduling, protection of the system & driver process running in the user space.
Finally, loadable kernel modules does not give you any security and reliability. Those modules still share the same address space with the kernel and each other.
IMO, loading the drivers at runtime is the easiest part of microkernels. It is really very very very tiny step. There are a lot more things to do, like doing IPC between operating system components, managing memory, scheduling, protection of the system & driver process running in the user space.
Finally, loadable kernel modules does not give you any security and reliability. Those modules still share the same address space with the kernel and each other.