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?

  • 2
    The short version is that the GPL's 'viral' quality can only act on derivative works of the code under license, and a userland calling a kernel doesn't make it a derivative work of the kernel.
    – Tom Hunt
    Commented Oct 23, 2015 at 17:06
  • I see, the kernel and the other software on top of it have separate licenses, and the GPL allows this.
    – Fiksdal
    Commented Oct 23, 2015 at 17:14
  • I'd like to also add, that to my understanding, there's a pretty big difference between GPL v2 and GPL v3 and Linus has continued to use the GPL v2 which is more permissive than the latter. Here is a bit of information on this. The top two answers seem to be pretty good.
    – KGIII
    Commented Oct 23, 2015 at 19:21

1 Answer 1


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.

  • 1
    no. it's because programs merely running on a kernel (and making use of the kernel's syscalls) are not derivatives of the kernel. The Android userland code merely runs on the Linux kernel.
    – cas
    Commented Oct 23, 2015 at 22:55
  • 1
    @Fiksdal Linux kernel is licensed under the GPL, not a permissive license. You can run Android, and the other permissive software, on Linux the same way you can use Nvidia's proprietary driver on your regular PC.
    – Oxwivi
    Commented Oct 24, 2015 at 2:32
  • 1
    @Fiksdal Or a better example would be, Android runs proprietary and permissive binaries on Linux the same way it can run Steam and Google Chrome.
    – Oxwivi
    Commented Oct 24, 2015 at 2:44
  • 1
    @Fiksdal, yes, it literally is separate. Consider this: the same kernel can run either Ubuntu or other regular Linux distributions on top of it. Linux kernel is just that, a kernel. It's meant to be able to run all sorts of programs on top of it.
    – Oxwivi
    Commented Oct 24, 2015 at 6:34
  • 1
    @Fiksdal I've edited the answer, check it out.
    – Oxwivi
    Commented Oct 24, 2015 at 6:50

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .