In many cases it is easier to do operating system development on a virtual machine.  The virtual machine as a whole can be run under a debugger, making it way easier to track down problems than if you were running your code on bare metal.

 * /UserModeLinux
 * ["/Qemu"]
 * [/SimpleScalar]