I have written and maintained several large and very non-standard Windows kernel drivers on my own through the years. They worked with minimal effort (if any) across NT4, W2K and WXP (I switched to Linux development before Vista was out). This stability was an immense help to me.
I would never have had enough time to do it if I had to track incompatible kernel changes every few months. Plus, of course the changes are never clearly documented and the only way to find them is by observing broken compilation or worse broken behavior. Or read LWN, of course.
This is madness! It takes a full time job just to track the kernel, let alone have time to do other constructive stuff. This is not a sustainable development model and I think that reality has proven me right. Nobody can afford to waste these kind of resources on Linux and ... nobody is.
No software vendor (Redhad, Novell, etc) tests _all_ or even _most_ of the drivers which are included in the kernel for every new release. Most smaller hardware vendors in turn can't afford to employ kernel developers just for this so they don't test their own products either.
Compare this to Windows where a company can hire a one time consultant to write a driver and can be reasonably sure that the driver will continue to work for the foreseeable future without _any_ maintenance.
The argument for including stuff in the mainline kernel is of course completely ridiculous:
- One, it would be extremely hard, probably impossible, to include a driver for custom hardware which is not widely available.
- Two, including it in the kernel doesn't guarantee anything more than successful compilation in future versions. As I said, nobody tests the drivers before a kernel release.
In the end it is much easier to write a new Linux kernel driver, but I suspect that in the long term it is more expensive than Windows to maintain.