The biggest Roadblock? I think it is when you find out how much gaps there are in the specifications and how many bugs there are in the various implementation.
Seriously, even if you would have all the Specs for all the components (i.e. USB, DMA, IRQ, your CPU...) you will find that a) some things are not specified (i.e. what happens if you send a certain sequence to your USB Device) and b) some things are just bugged and you need to work around them (i.e. the dozens of Bugs in the CPU that are detailed in the CPU Errata that both Intel and AMD publish)
I don't know how many workarounds for bugs there in a modern operating system, but since Linux and *BSD is open source, their drivers tell you much, i.e. this one. And expect to get some seriously negative side-effects like this one.
So yeah, If you try to write an OS, be prepared to curse a lot at hardware manufacturers and start to lose your faith in the quality of modern PCs :-)