When to use kernelspace and when to use userspace?
Userspace whenever possible, kernelspace where necessary.

When might it be necessary to use kernelspace? When there are hard latency requirements or the existing driver architecture is inadequate.

Why is it preferred to use userspace? It's considerably easier to debug, safer if it crashes, more portable to other systems and easier to install.