How much performance overhead does the microkernel design impose? Or is it actually the opposite these days (there's got to be a reason people keep moving network stacks into userspace for performance...)?
People are moving network stacks into userspace to be closer to the application, which improves the performance. Similarly, you could move application code to the kernel, which is what unikernels achieve. :)