> I was under the impression that Linux has a specific exemption to the GPL for those regardless of how they're linked, as long as they don't require any modifications to the kernel itself.
It's more complicated than that. Linux is using a standard GPL2 without exemptions. There are some vendors that look at the actual definitions of how code that's "derived" from the kernel is what needs to be open sourced, so most of their driver is a closed source blob that includes no headers from the kernel and who's source tree has existed longer than their Linux port. Then they open source a bridge layer as gpl2. They then bank on the idea that no judge or jury is going to rule that the closed source blob "derives from" the kernel.
Went back and read some of the old lkml posts from Linus, and it seems most of the kernel is GPLv2 with some version of the "GCC Runtime Library Exception". I assume the "syscall exception" he repeatedly refers to is related, but it's never quite clear what the exact mechanism is. Linus himself seems to take it case-by-case what constitutes a "derived work" from the kernel, or at least did so 20 years ago. It might have become clearer since then, or maybe not.
It's more complicated than that. Linux is using a standard GPL2 without exemptions. There are some vendors that look at the actual definitions of how code that's "derived" from the kernel is what needs to be open sourced, so most of their driver is a closed source blob that includes no headers from the kernel and who's source tree has existed longer than their Linux port. Then they open source a bridge layer as gpl2. They then bank on the idea that no judge or jury is going to rule that the closed source blob "derives from" the kernel.