The decision of whether to choose to write a kernel-level device
driver or a user-level device driver depends on several factors.
One of the main ones from a practical point of view is speed:
kernel-level device drivers get to run faster because they are not
preemptable, unlike user-level applications.

Another factor is ease of development. It is in general easier to
write a user-level driver because (a) one wrong move does not
result in a crashed machine, (b) you have access to user libraries
(such as the C library), and (c) debugging is easier.