Been there, done that. The biggest obstacle, for me at least, was device drivers. Coding the OS core is the "fun part", however it is useless without being able to do I/O (disk, keyboard, video, network, at least). Today, if I again had the time and will to engage into such project, I'd probably target Xen VM instead of the raw hardware -- if for nothing else, then because it hides many ugly idiosyncrasies of x86 as well as hardware. Xen presents a nice uniform, hardware-independent view of I/O devices, and still gives you enough freedom to play with the "interesting" OS parts (mm, process management, synchronization, interrupts, etc).