Re: 22 million lines of code
It actually isn't.
Not all of the code is used for a particular instance - For example, none of the ARM code, or 68000, or Power, or IBM 370, or the Z code is used when you are X86 based.
But they ARE available if you want. The kernel you get is actually smaller than Windows. The only things that get added are driver and filesystem modules for your specific use.
Thus, no bloat.
Now when it comes to distributions, you have a different source of bloat, and it isn't the kernel.