11

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?

Fiksdal
  • 482
  • 1
  • 5
  • 17
  • 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 Oct 23 '15 at 17:06
  • I see, the kernel and the other software on top of it have separate licenses, and the GPL allows this. – Fiksdal Oct 23 '15 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](http://stackoverflow.com/questions/41460/what-are-the-differences-between-gpl-v2-and-gpl-v3-licenses) is a bit of information on this. The top two answers seem to be pretty good. – KGIII Oct 23 '15 at 19:21

1 Answers1

10

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.

Oxwivi
  • 2,232
  • 4
  • 23
  • 31
  • I see, thanks! So Android uses a permissive license. That would have been possible in the first place only because the Linux Kernel itself has a somewhat permissive license, right? – Fiksdal Oct 23 '15 at 17:35
  • 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 Oct 23 '15 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 Oct 24 '15 at 02: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 Oct 24 '15 at 02:44
  • Ok, so the kernel is considered separate to what is ran on top of it? – Fiksdal Oct 24 '15 at 04:00
  • 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 Oct 24 '15 at 06:34
  • 1
    @Fiksdal I've edited the answer, check it out. – Oxwivi Oct 24 '15 at 06:50
  • Thanks, that's helpful. If someone took the Linux Kernel, modified it somewhat, built a whole OS on top of it, and wanted to make the whole thing proprietary, would that violate the LK's license? – Fiksdal Oct 24 '15 at 10:09
  • 1
    @Fiksdal, yes. The only way to not violate it would be to do the same as Android vendors—release only the kernel modification and nothing else. – Oxwivi Oct 24 '15 at 12:15
  • OK, so if they edited the LK they have to release the source. Isn't most of the Android OS actually open source? Except for the proprietary components that vary from vendor to vendor. – Fiksdal Oct 24 '15 at 14:02
  • 1
    @Fiksdal All of Android is, as I mentioned, Apache Licensed which is open-source *and* permissive. So while Google might release the whole source code, the modifications made by vendors are generally proprietary because Apache License allows it. – Oxwivi Oct 24 '15 at 14:31
  • So drivers are considered userland? – jiggunjer Feb 13 '17 at 09:04
  • @jiggunjer, no, they run at the same privilege level as the core kernel itself. Since the drivers are basically modules, you can have drivers with source code not tied to Linux's. That allows for nonfree drivers like Nvidia's. – Oxwivi Mar 31 '17 at 19:34