Aug 5, 2020

What is a "GPL condom" and why NVidia's latest updates to Linux kernel has become such a big controversy

The biggest drama unfolding on Linux subreddit yesterday was this below post about some updates to the linux kernel source which seems to have irritated some people.


So, what exactly is a "GPL condom" and what this fuss is all about? To answer that question, one needs to understand what exactly the GPL software license is. Unlike other FOSS licenses like MIT, BSD or Apache, GPL is a copyleft license which means that it comes with a pre-condition: This software must not be mixed along with a proprietary or non-GPL licensed software.


Now, as much as "un-freedom friendly" as it sounds, it really isn't. The makers of the GPL license (Free Software Foundation (FSF), founded by Dr. Richard Stallman) have deliberately kept it so as to persuade the proprietary software vendors to "open up" their source codes in order to start using the GPLed licensed software. This, in turn, benefits the free software community as a whole because more and more software comes under the umbrella of GPL. Thus GPL is a free software license with a mission towards what they call as collective or commons.

Since other FOSS licenses like MIT and Apache aren't interested in such a mission or ideology, they don't have such pre-conditions and such licensed software can be mixed and matched with others, even proprietary code. As a practical example, the Android code is licensed under Apache and not GPL. This allows Google (and other vendors who distribute apps through the Play Store) the flexibility to include proprietary or non-free apps that work alongside Android OS. This would have been extremely difficult to achieve if Android were GPL licensed and may have required the use of a glue layer or "condom" which brings us to the next point!

We are having this discussion because linux is GPL licensed and in an ideal world envisaged by Richard Stallman, none of the linux components (including device drivers) will be proprietary or non-free. However, we are not living in that ideal world (yet) and some software vendors like NVidia still hold on to the proprietary or non-free route. Now, if linux decides to reject NVidia drivers completely for not being FOSS, that would alienate a good portion of desktop linux users because just too many computers have NVidia graphics cards that need device driver software.

As a result, the "fix" or solution typically made in such cases is to use "GPL condom" which is essentially a shim or a glue layer that sits between non-free and GPLed code and ensures a clear separation. This glue layer is always GPL licensed but has a clear separation that can be used to interface with non-GPL code. You can envisage this glue layer like the DMZ area of a company firewall which sits between the red (external) and green (internal) zones, or even the "No Man's Land" which is typically a few hundred meters of common boundary that separates the borders of two nations (especially those in a conflicted zone).

Now, the use of such a glue layer should be restricted to bare essentials like device drivers and not a lot of things because that would defeat the whole purpose of GPL, right? Another problem here is that GPL license doesn't clearly define what "derivative work" means with regards to its restriction on non-free code. Does only static linking to a non-free library be called a derivative work, or does dynamic linking at runtime counts too? Unanswered questions naturally have a tendency to create conflicts and controversies and this one isn't quite different.

In this case, it was apparently a Facebook developer who offered this NVidia device driver update to the linux kernel project, and the project leader Greg Kroah-Hartman seems to have made an objection to the abuse/overuse pertaining to this glue layer in case of NVidia drivers. The result was another proposed patch by Christoph Hellwig (as the thread title suggests) which seeks to limit the use of this glue layer for NVidia.

However, after going through the reddit thread, it seems this issue is a bit more complex than just involving "free software purity" or this glue layer. Apparently, Microsoft's recent use of WSL (Windows Subsystem for Linux) is no different than inclusion of NVidia drivers in linux, both cannot be achieved without the use of this glue layer. Yet, there wasn't any such opposition towards WSL's use of the glue layer, and some people are wondering whether its because of Microsoft being a member of Linux Foundation and the biggest patron.

For a free software enthusiast, Microsoft is as much of an opponent as NVidia is, then why this favoritism towards just one opponent? That's a question many people seem to be asking about this issue. In any case, we hope things will become clearer in the coming days and we get a better idea. Its a very likely scenario that NVidia's patches will be accepted because many users with NVidia cards happen to use linux (especially gaming enthusiasts) and not having these drivers work will definitely alienate them from linux.

4 comments:

Unknown said...

I think there should be push make, and possible law suits, against both companies. Linux is GPL 3. I don't expect software to be free, but I do expect drivers to be free because I am paying you for a device and not software.

arun sai said...

We don't need WSL and nvidia. nvidia users can just stay on windows.

Jan said...

Um, Linux is *not* GPLv3. And most likely will never be. Kernel is GPLv2 *only* for historical (and some ideological) reasons.

MichaƂ said...

nvidia patches won't be accepted. nvidia is proprietary trash company and has to die.

Post a Comment