A few weeks ago, I was in Virginia taking the Windows Internals and Software Drivers seminar put on by (you guessed it) OSR. It turns out we train our own engineers in the same way that we train others, and I’m really glad I was able to go.
Software architecture is a funny thing. I’m not sure if it’s difficult to get right because it’s so complex, or if it’s complex because it’s so difficult to get right. Regardless, as a system evolves over years or decades additional complexity is introduced while the original design and implementation restrictions may become lost to time. Eventually some poor soul comes along and is expected to make sense of a giant pile of innovation layered on top of legacy.
In the case of Windows, we have almost 30 years’ worth of “stuff” compiled into one massive operating system. ntddk.h, the main include file for standard kernel mode drivers, is over 15,000 lines long. And that’s likely just one of the headers you will need to take a peek in when trying to develop something useful. I can’t begin to imagine how much paper would take to print out every MSDN page documenting every DDI (Editor’s Note: For Windows 2000 the DDK reference manual was ~3500 pages). That’s a ton of code to sort through, especially if you’re not quite sure what you’re looking at.
Once you step out of the code and into the architecture and design documents things tend to make a bit more sense. It’s even better if you can get someone who knows the architecture to explain it, because documentation can’t rephrase things for every possible audience or answer new questions.
After you’re armed with a decent understanding of the architecture and design, a lot of things become trivial (because they really are). If you were ever wondering what use a whole week of an Internals seminar would be, the best way I can put it is that I’m “starting to see the forest through the trees”. Definitely looking forward to applying all this information to the projects that I’m working on.