Excuse my ignorance but how does OS development even work? Being a mostly web developer, it just seems to arcane to change an OS - like, pre-application layer.
Not unlike web development, you're working against a contract (in this case, CPU instructions/features, storage formats, bus formats) defined by some megacorporate legacy. You also have support from pieces of embedded firmware running inside storage devices or other peripherals.