Linux – How to semi-proprietary software be based on the Linux Kernel

androidlicenseslinux

If I understand correctly, the Linux Kernel is licensed under the GPL, which means that if anyone bases anything on it, they have to also license the entire derivative work under the GPL, making anyone free to modify and/or redistribute their derivative work.

For example, all Android releases are based on the LK. Does that not mean that the whole release and all its components also have to be released under the GPL?

For example, most Android releases ship with proprietary components. Does that not violate the GPL? Doesn't the whole derivative work need to be released under the GPL?

With Ubuntu, for example, you have to download MPEG codecs post-installation. I assume that this is because MPEG is proprietary, and that MPEG's license is therefore incompatible with the GPL, so they can't be included in the same release?

How do Android releases get around this?

Best Answer

First, you must be clear that Google's Android code and Linux kernel code are separate. Android itself is licensed under Apache License 2.0, which is permissive, and in Wikipedia's words:

The Apache License is permissive in that it does not require a derivative work of the software, or modifications to the original, to be distributed using the same license.

As such, none of Android modification by the vendors are normally made available.

Second, in case of Linux kernel, being licensed under GPLv2, the code is released to the public, either buried somewhere within the device (less likely) or available to download on some obscure page in the vendor's website dedicated to open-source codes in their products.

However, there is a major caveat to the Linux kernel code made publicly available—proprietary drivers and kernel modules of similar functionality. Linux kernel can load binary blobs distributed under proprietary license, and the source code of such blobs necessary to run your device is naturally not distributed. Bottom line being, even if you do manage to get your hands on the kernel source specific to your device, you won't necessarily be able to use it to compile your own functioning Linux-based OS.


Permissive, in context

What exactly do we mean by a permissive license? From your comments, I think you've taken it to mean the ability to run other permissively or proprietarily licensed software. But that is wrong.

Permissive in this context means, how permissible it is to let you do as you want with the source code.

GPL is not permissive in the sense that you're legally bound to publicize any modification you make to a GPL-licensed code. It does not permit you take everybody's contribution, make changes to it (regardless of making it better or worse) and hide it away. If you're going to distribute the binary, you've to distribute the source code as well. Since it does not permit you to make private changes it is therefore not permissive.

Apache License and the BSD licenses are examples of permissive licenses. Opposite of strictly non-permissive GPL, it lets you make any modification to the codes licensed under them and keep it to yourself, in other words, it is permissive. That is to say, you can take the Android code, even if you change it enough to make it unrecognizable, you're free to keep it yourself. And that is exactly what Android device vendors does.

Related Question