If it compiles, ship it
The key concept is that linking GPL code with code licensed with an incompatible license results in program you cannot distribute. Back when the GPL was written, linking to a library meant creating a single binary file containing its own copy of some of the code from the library file. The binary would run fine even if you deleted the library file. Later, dynamic linking allowed programmers to create programs that contained no library code, but several programs could share the same library (one copy on disk and up to one in memory no matter how many programs linked to it). The general consensus is that this still constitutes linking as referenced by the GPL.
Before compiling, the kernel must be configured. Most of the configuration options select which parts of the kernel are missed out, which get compiled into a large file and which get compiled into individual modules. Kernel modules can be loaded at any time and connect to the bulk of the kernel (and to each other) in pretty much the same way that a user land dynamic library connects to an executable. According to Linus, loading a kernel module is not the same as linking as referenced by the GPL. Linus is the copyright holder for much of the kernel, and is entitled to decide what is and isn't allowed when distributing derived works of his project. He can certainly decide not to sue even if Stallman thinks he should.
Linus is not the only contributor. Other people have contributed portions of the kernel, and they retain copyright over their contributions. Contributions are only accepted if they are licensed under the GPL or a compatible licence, that way the entire kernel including all the contributions can be distributed as a whole without all the distributors having to reach separate licensing agreements with all the contributors.
Not all contributors agree with Linus's opinion about kernel modules not counting as linking. To allow for this contributors can mark symbols in their own code with EXPORT_SYMBOL (any module can get the value of the symbol), or EXPORT_SYMBOL_GPL (only GPL licensed modules can get the value of the symbol).
The idea is, if you create a non-GPL module (which you can distribute independently of the kernel), and try to load it into the kernel, the kernel will check every symbol reference and will fail to load the module if it tries to use a symbol defined in code written by someone with a strict interpretation of the GPL. (I think compilation will fail, so you cannot not accidently create a module other people cannot load). You can see more of the details here.
Stallman is welcome to limit how derived works of his projects are distributed. So is Linus, but Linus lets contributors select their own interpretation of the GPL without screaming at others that they have to see things his way.