With the release of Ubuntu 16.04 ZFS became officially supported by Canonical. However, this raised issues over licensing — see this article and the links it contains. Here are my thoughts on the issue as a software engineer and Linux user. Unfortunately, I do not have much legal expertise, so my discussion will lack legal precision, but I will do my best to address the legal issues highlighted by other articles.

Preface

I first wrote this because the idea that using an API constitutes a derivative work does not seem logical to me. Since then, I’ve read more about the GPL and other people’s analysis of the ZFS situation. Unfortunately, the argument I make in this first section would void the GPL, which is not something I actually want to happen. However, I still believe my argument that interfaces are different from derivation is correct in a philosophical sense, just not a legal one as copyright is used in software today. My conclusion after hours of thinking about this issue is that software licenses need to be explicit about public API usage and linking. Unfortunately, Linux is GPLv2, GPLv3 is only marginally better, and LGPLv3 is too permissive for Linux’s philosophy.

A Desktop Computer Manufacturer

Let’s start with a physical analogy — your computer itself. If I buy an assembled desktop computer, the manufacturer will choose the motherboard, graphics card, power supply, etc. The motherboard is designed to allow various modules to attach to it to enhance functionality and provide services, and the user is able to change these modules.

Now, the desktop assembler might choose a fancy patented graphics card, but plugging that card into the motherboard doesn’t suddenly create a patent conflict. The two components are designed to work together through an interface. If after buying the computer, I decide I have some objection to the graphics card patent, I can just remove it and replace it with another one.

Now, if the desktop assembler decides to create a new Skinny Desktop product and they manufacture it by modifying or taking components from the graphics card and attaching it to the motherboard in a permanent and non-standard way, this changes things. It may violate the graphics card company’s patent. The desktop assembler has created a new derivative work that required modification of both the motherboard and graphics card and they probably need licenses from these vendors. And the user can no longer swap the graphics card component or easily create their own version of this product without specialized knowledge.

ZFS and Linux

Now obviously this is analogous in the ZFS situation with Linux (the motherboard), ZFS (the graphics card), and the computer assembler (Ubuntu and other distros). A different kind of intellectual property is involved (copyright instead of patents), but does software really make the implications so different?

From the user perspective, it seems similar. ZFS and Linux communicate through a well-defined interface; ZFS is a separate module, which can easily be attached or detached by the user. After I install Ubuntu, if I have an issue with ZFS I can easily remove it without affecting Linux; I can install other file-system modules, even proprietary ones.

So what’s the issue? According to Software Freedom Conservancy:

Once license incompatibility is established, the remaining question is solely whether or not combining ZFS with Linux creates a combined and/or derivative work under copyright law (which then would, in turn, trigger the GPLv2 obligations on the ZFS code).

And that article links to the GNU opinion that “Linking a GPL covered work statically or dynamically with other modules is making a combined work based on the GPL covered work.”

I’m not convinced.

When a component is distributed as a module its very design is to be separate from other entities. Both Linux and ZFS implicitly agree that they are separate from each other by conforming to the kernel module standard, but work together through a specified interface. To say that assembling them side-by-side creates a derivation invoking copyright just seems incorrect to me. Furthermore, the user is aware that they are separate. ZFS is a package that can be added or removed by the user with a single simple action.

Biological Ecosystems Analogy

An ecosystem is an assemblage of various organisms. As creatures evolve, they derive their new form from the genetic code of their ancestors. One would never describe the ocean ecosystem as a shark+tuna+dolphin derivation. You would say that the ecosystem is made up of various organisms assembled together.

Now, there are bacteria that exchange DNA. So when you look at one species you would say that it was derived in part from other species. And if bacteria were smart (or arguably stupid) they would sue the hell out of each other.

At first this may seem silly, but I just want to point out that this idea of code and derivation does have a basis in the natural world and is not just a human creation. There is a fundamental difference between an assembly of entities that each maintain their own code independently, but interact with each other, and entities that actively exchange code with each other.