My biggest issue with all of this kernel development is that new features for chipsets/processors/devices etc are being made all the time. So a kernel that now supports a certain feature will usually have that feature simply added on to the current kernel feature set, and therefor a lot of the time features will be tacked on to a kernel without being properly implemented inside the kernel itself. Modules get around this issue a little bit by allowing themselves to be loaded whenever, so they don't mess up the kernel too much. Modules however also add the problem that their new features are even less properly implemented into the kernel, which can cause problems. Therefor modules are inherently unstable.
It's an endless cycle, because as soon as parts of the kernel are rewritten, new features appear yet again. I also want to mention that yes, some features are implemented properly from the ground up, yet some are not.
From this we get a picture of a kernel's features like this:
Code:
\---------/
\ /
\ /
\ /
\ /
\ /
\/
instead of this (which it should be):
Code:
/\
/ \
/ \
/ \
/ \
/ \
/ \
/-----------\
Edit: Formatting fail, but you get the idea.
The best solution to to freeze development of new features and develop a kernel based on those features, and those features only, but also allowing room for new features.
Very impractical I know, so I'll get started on a time machine.
-JL