How much device driver programming have you done? It doesn't sound like you've done any, or know what you're talking about.
>Its true that the kernel maintainers (Torvalds & gang) maintain some drivers with the kernel, but not all.
Most drivers are part of the kernel. Any that aren't are "out-of-tree", and are either in the process of being put in the tree (most of these are in the "staging" area), or are not for some dumb reason and their maintainers have to waste time maintaining them separately. In practice, in a normal Linux distro, ALL drivers which a normal user uses for his normal desktop/laptop hardware are part of the kernel, except the Nvidia and ATI proprietary ones (IF the user chooses to use those).
>And what do you mean "tightly tied to the kernel"?
Device drivers call exported functions that are part of the kernel. Those functions have particular arguments. If the interface changes in the kernel, then any drivers which make use of those interfaces must also change. In a fixed API which some detractors call for, these interfaces are fixed and never change. In Linux, the maintainers don't believe in this because it limits flexibility and makes improvements later much harder (you end up creating new interfaces, but also keeping around the old ones for backwards compatibility, leading to code bloat). The way it is now, if they decide they want to add an additional function argument for some piece of hardware, it's no big deal, they just add it in, then modify all the drivers which call that function to add that argument. You can't do that with a fixed API, you have to create a whole new API (e.g., "function_call_V2(a, b, c,
>Oh, and don't get me started on GNU Hurd...
HURD is a microkernel, which is an entirely different architecture than Linux which is a monolithic kernel.