> This is a clear violation of the Free Software license that Linux is made available under.
This is your opinion.
My opinion is that it is a clear violation of the GPL if a program provides two sets of interfaces, one set to be used by other GPL programs and one set with crippled performance for non-GPL programs.
This is a restriction on use that has nothing to do with GPL, which says: "This License explicitly affirms your unlimited permission to run the unmodified Program.".
Crippling the performance for the users who choose to use the GPL program together with a non-GPL program is definitely incompatible with "unlimited permission to run".
Whoever has written the original GPL program has no right to impose limits on the users of the program. If they want to impose limits, they must choose a different license, not GPL.
The restrictions imposed by GPL are based on copyright, i.e. they refer to transferring copies of the covered work, but not to how it should be used.
The GPL does not prevent users from running the Linux kernel in any manner they choose.
What it does disallow is for users to write code which is "based on" Linux code, and then distribute that code to other users on terms which are incompatible with the GPL.
You can run whatever mix of GPLd and non-GPLd code you want. You can even edit your Linux sources in a way that removes the GPL license checks for modules and build your own kernel, and run it, and no-one can legally stop you - not even Linus himself.
But you're not allowed to distribute work-based-on-GPLd-code-that-isn't-licensed-under-the-GPL to anyone else. And neither is Nvidia.
Unfortunately, suing Nvidia over this would cost millions, if not tens of millions, if not hundreds of millions, of dollars. So creating a technological barrier to fuck with them and their bullshit business model instead is a much more achievable goal.
Writing a program "based on" an API, i.e. which invokes the provided functions, is not a derivative work.
If this theory would be accepted almost all the existing programs that have been written since the first electronic computers would be derivative works and no software companies would have ever existed, because they could never have claimed copyright protection.
NVIDIA has never distributed any derivative of the Linux kernel in their GPU drivers. They distribute their own kernel modules, which are loaded by the end user and this is perfectly compatible with the GPL.
Some kernel developers try to cripple the NVIDIA modules by preventing them to find the symbol addresses that must be used, but this is a use restriction imposed by these developers on the Linux users and which has nothing to do with what is written in the GPL.
Indeed, the LGPL should never have been needed, because LGPL is the correct variant of GPL and the standard GPL should have been identical to what LGPL is now.
Even with its illogical theory about the coverage of "combined" works, not even the GPL covers the programs that use an interface provided by a GPL program, but which are distributed only separately from it, like a shared library or a kernel module.
So the NVIDIA kernel modules have never been incompatible with the GPL.
The fight against non-GPL kernel modules has nothing to do with the GPL, but it is strictly the creation of certain kernel developers.
With static linking you take someone elses code and put it into your own artifact and then distribute that to users. This means that you need a license to distribute their code. Not just that, because of the way static linking works, you need a license to distribute modified version of the code.
With dynamic linking you never distribute someone else's code so you don't need a license to distribute it.
> Crippling the performance for the users who choose to use the GPL program together with a non-GPL program is definitely incompatible with "unlimited permission to run".
How so? It says "run the unmodified Program". The checks the Linux kernel does are part of the unmodified program. If that unmodified program doesn't meet a particular user's needs, they can go find some other program. The GPL does not impose any requirement that the unmodified Program must meet all of the needs of all users. Nor does it impose any requirement that the unmodified Program must treat all other programs equally. Nor does it impose any requirement that the unmodified Program cannot have any restrictions on use that are not explicitly imposed by the GPL.
This is your opinion.
My opinion is that it is a clear violation of the GPL if a program provides two sets of interfaces, one set to be used by other GPL programs and one set with crippled performance for non-GPL programs.
This is a restriction on use that has nothing to do with GPL, which says: "This License explicitly affirms your unlimited permission to run the unmodified Program.".
Crippling the performance for the users who choose to use the GPL program together with a non-GPL program is definitely incompatible with "unlimited permission to run".
Whoever has written the original GPL program has no right to impose limits on the users of the program. If they want to impose limits, they must choose a different license, not GPL.
The restrictions imposed by GPL are based on copyright, i.e. they refer to transferring copies of the covered work, but not to how it should be used.