Distribution of Dockerfiles: Who is responsible for FOSS Licence Compliance?
Dr. Till Jaegera
(a) Partner, JBB Rechtsanwälte
Abstract
The deployment of Docker is becoming increasingly popular as container technology allows for a unified software distribution that is largely independent of the target system. This raises new questions of FOSS license compliance. The reason is that in addition to the complete software distribution as a “Docker image”, so-called Dockerfiles can be used, which - similar to a script - contain a kind of construction manual for the software which may include downloads from third party repositories. Such form of decentralized distribution raises the question of responsibility for compliance with the license conditions. This article sheds light on the concept of “distribution” under European copyright law as a starting point for the interpretation of free licenses. In the course of the study, it is shown that physical distribution and distribution in the meaning of copyright law do not always have to be congruent.
This article was created in collaboration with and funded by the Open Source Automation Development Lab (OSADL) eG (www.osadl.org).
Keywords
Law; information technology; Free and Open Source Software (FOSS); license compliance; Docker
In the course of the article, we will first provide an overview of the technical basics of Docker as well as the interpretation of the term “distribution” under European copyright law. This is followed by a discussion of who is responsible for license compliance when distributing Dockerfiles.
2. Technical background of the Docker technology
Docker is a technology for the installation and deployment of programs in a container. It has the advantage that all dependencies are present in one technical unit and are largely independent of the host system. Unlike virtualization via Hypervisor, a Docker container does not contain an operating system kernel; instead, a specific operating system command makes the filesystem tree of the container appear as root directory for all programs of the container. Thus, the remaining filesystem outside the container becomes invisible for the container programs. Docker containers require a Unix-like operating system and are mainly intended to be used with a Linux kernel.
A pre-configured container can be distributed as a “Docker image” and often contains, in addition to the main program, an application, the dependencies as program code and, if required, utilities and configuration files. Docker images can be distributed individually but are in many cases accessible via public repositories such as “Docker Hub” as well. This is also true for so-called “base images” which contain essential system components such as C library, package manager, shell and a directory tree and which refer to a specific Linux distribution. On top of this base image, further functionalities can then be added as so-called “layers” that can be distributed separately as individual archive files but are built upon each other and form the complete Docker image.
A “Dockerfile” is a text file that - similar to a script - contains step-by-step instructions for setting up a Docker image. A Dockerfile can have its own license that usually only applies to the Dockerfile itself, but not to the programs included in the Docker container.
The “Docker engine” – a management software for Docker containers – can build Docker images with the help of Dockerfiles by sequentially processing the commands from the Dockerfile. Usually, individual components, for instance a base image and individual layers, are downloaded from internal or external repositories. This means that it is possible and, indeed, customary that a supplier provides a Dockerfile to their customers without passing on physical program code, and the customers can then build their own Docker container including program code, which completely or partially originates from public repositories.
This raises the question whether and which license obligations have to be complied with by the provider of the Dockerfile with regard to FOSS included in the Docker image that was built using the Dockerfile.
Almost all FOSS licenses make the requirement to comply with license obligations conditional on the act of distributing or conveying software as given by copyright law, i.e. as a rule, the passing of program copies of the program to third parties. Only few licenses – such as the GPL-3.0 for the term “convey” – include a definition of what is meant by “distribution”. Thus, it is common practice to refer to the interpretation of the term in applicable copyright law. In Germany, this is the term “Verbreitung” (distribution) according to § 69c no 3 UrhG (German Copyright Act), which is described as “any form of distribution of the original of a computer program or of copies thereof, including rental.”). In this case, “Verbreitung” is understood as in § 17 (1) UrhG which provides for this right of use for works other than computer programs
“The right of distribution is the right to offer the original or copies of the work to the public or to put it into circulation.”
The following sections will first examine the general question whether a physical transfer of the program code is required for a distribution under copyright law. Afterwards, there will be further explanations regarding the different components of a Docker image, namely base image, program libraries, patches and updates.
“Distribution” can only be attributed to the provider of the Dockerfile in case that not only their own “physical” distribution of program copies is covered by the concept of distribution - as defined by copyright law - but also other acts that lead to the acquisition of a program copy from third-parties.
The CJEU has based several decisions on who plays the “essential role” with respect to the act of exploitation of copyrights. This is especially apparent in § 17 UrhG (German Copyright Act) which designates as an act of distribution the mere “offer”, thus, a preparatory act of a physical distribution. Although the European Directive does not explicitly mention the term “offer”, the CJEU has decided as follows:
This and other decisions of the CJEU reveal that it does not, or not only, come down to distribution in a technical sense but that preparatory acts of distribution could be relevant as well, at least if the actor plays an “essential role” in the distribution process. This is precisely the case for Dockerfiles. The provider of the Dockerfile plays an essential role in the distribution of the software contained in the Docker image because the Dockerfile gives orchestrated instructions that - in accordance with their intended use - lead to the transmission of a complete functioning system at the recipient of the Dockerfile. In this respect, it is the provider who has the organizational control. Accordingly, the provider has to comply with the license obligations of FOSS distributed in this way.
With additional layers even already installed programs can be modified. In that case, the docker container comprises the unmodified program in one layer and the modifications in another layer so that the modified program is being executed. In such situations, an “essential role” of the provider of the Dockerfile must always be assumed since the Dockerfile defines which modifications are applied. Accordingly, the license obligations must be complied with by the provider of the Dockerfile.
The starting point of the following considerations is that Open Source licenses do not (and cannot) extend to granting rights for the use of independent programs which do not fall within the scope of the license but may be required for deploying the Open Source software. A typical case is an operating system or a web server that is required for running an application. Such programs, which are independent but required for the execution of an application, are hereinafter referred to as “system requirements”. Whoever distributes Dockerfiles is not responsible for complying with the license obligations of system requirements such as the Docker Engine or the Linux kernel; these are also not referenced in the Dockerfile.
The question is whether base images can also be considered to be system requirements. Programs included in a base image are generally independent of the application that is meant to be executed in a Docker container. As long as the programs that are included in the base image are used in their unmodified form, they can be considered to be system requirements without further ado since the fact that a Dockerfile contains download instructions does not necessarily make the provider of the Dockerfile also the provider of the base image. This is also reflected by the fact that where operator of the repository refuses access, a download is no longer possible. This is outside the control of the provider of the Dockerfile. The same is true in the case of a patch but there is, however, an additional criterion for treating patches and system requirements differently. It is typical for computer programs and distinguishes them from other copyrighted works that they are intended to work with other independent programs. For example, most applications do not run without an operating system. Accordingly, there is a need to install such system requirements but that does not mean that the provider of an application plays the essential role in the distribution.
According to the view presented here, the operator of the repository and provider of the base image plays an essential role in the distribution of base images, whereas the reference in the Dockerfile rather facilitates the acquisition of system requirements. Therefore, the operator of the repository performs the act of communication to the public and must comply with the license obligations of the contained FOSS independently at least in cases where the offer is legitimate.
The interpretation stated above is the legal opinion of the author of this study; there is no case-law with regard to this specific context for computer programs in general, and Dockerfiles in particular. Different interpretations are certainly arguable (especially insofar that all referenced layers including the base image are distributed – or communicated to the public respectively – by the provider of the Dockerfile).
•System libraries
•Non-system libraries for GPL and AGPL applications
•Non-system libraries for applications licensed under other licenses than GPL and AGPL
If, however, a Dockerfile specifies layers that are downloaded from third-party repositories and contain libraries (other than system libraries) which are intended for linking with a GPL-3.0 or AGPL-3.0 application in a Docker container, then the license obligations of GPL-3.0 or AGPL-3.0, respectively, must be complied with for these libraries for licensing reasons alone, for instance the source code must be provided (cf. section 1 GPL-3.0: “Corresponding Source includes ..., and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, ...”). This will apply for GPL-2.0 equivalently. Where the libraries are licensed under compatible licenses, the corresponding license conditions must also be complied as would be the case for an individual physical distribution. Accordingly, a Copyleft requirement cannot be circumvented by a decentralized distribution process.
In all other cases in which program libraries are included as dependencies it can usually be assumed that the distribution is performed by the provider of the Dockerfile who has chosen these dependencies and who has the organizational control and therefore the essential role within the distribution process.
The handling of updates depends on whether the provider of the Dockerfile has control over the update. This can be answered in the affirmative if the provider itself (or someone on its behalf) uploads the update to a repository from where the recipient of the Dockerfile can subsequently obtain it. Whereas there is no distribution by the provider of the Dockerfile if the update is provided under the control of the operator of the repository (e.g. if the Dockerfile refers to the “latest version”). As in contrast to the program version named in the Dockerfile and chosen by the provider of the Dockerfile itself, they do not have relevant influence on the content of such updates.
License obligations have to be complied with at the time of distribution (or communication to the public respectively). Since preparatory acts in a chain of distribution steps – such as the delivery of a Dockerfile – can already be considered a distribution, license obligations ought, strictly speaking, to be fulfilled at the time of delivery of the Dockerfile. It is, however, conceivable to interpret the Open Source licenses in such a way that it would be sufficient to comply with the license obligations at the time of download from a repository. This is supported by the fact that at the time of distribution of the Dockerfile it may still be unclear which program code in particular is included in a downloaded layer. This is the case, for example, if “latest” is specified for a program version.
However, as long as the license obligations are not fully met in the repositories involved, it is recommended to comply with the license obligations independently and to deliver a file with the required compulsory information (e.g. license texts, copyright notices, source code offer) along with the Dockerfile.
The responsibility for compliance with the license terms of FOSS licenses included in a Docker container cannot be circumvented by distributing a Dockerfile with the consequence that the recipient downloads the software directly from publicly accessible repositories. The analysis of the case law of the Court of Justice of the European Union reveals that such preparatory acts may also fall within the meaning of “distribution”. Nevertheless, the peculiarities of the interaction of computer programs must be taken into account, which may entail that e.g. system requirements do not fall under the responsibility of the provider. However, repositories that offer Docker layer itself in a FOSS non-compliant way create also risks for the provider of Dockerfiles which reference to such repositories. FOSS license compliance thus becomes a shared responsibility between providers of Dockerfiles and public repositories for Docker layer.
About the author
Till Jaeger has been a partner at JBB Rechtsanwälte since 2001 (www.jbb.de). He is a Certified Copyright and Media Law Attorney and advises large and medium-sized IT businesses as well as government authorities and software developers on matters involving contracts, licensing and IP rights.
One particular focus of Till Jaeger's work is on the legal issues created by free and open source software (FOSS). He is co-founder of the Institute for Legal Aspects of Free & Open Source Software, ifrOSS (www.ifross.org), contributing to its work with academic publications, lectures and seminars in the fields of software law and copyright law.
Till Jaeger is a lecturer at the Humboldt University Berlin in the subjects of IT law and IP law and general counsel of Open Source Automation Development Lab (OSADL) eG.
He represented the gpl-violations.org project in several lawsuits to enforce the GPL and has published articles and books related to legal questions of Free and Open Source Software (among them Jaeger/Metzger, Open Source Software - Rechtliche Rahmenbedingungen der Freien Software, 5th ed. Munich 2020, and Van den Brande/Coughlan/Jaeger - The International FOSS Law Book, 2nd ed. Munich 2014). He was member of the Committee C in the GPLv3 drafting process.
Licence and Attribution
This paper was published in the Journal of Open Law, Technology, & Society, Volume 12, Issue 1 (April 2021). It originally appeared online at http://www.jolts.world
This article should be cited as follows:
Jaeger, Till (2021) 'Distribution of Dockerfiles: Who is responsible for FOSS License Compliance?', Journal of Open Law, Technology, & Society, 12(1), pp 13 – 20
DOI: 10.5033/jolts.v12i1.147
Copyright © 2021 Till Jaeger
This article is licensed under a Creative Commons Attribution 4.0 CC-BY available at
https://creativecommons.org/licenses/by/4.0/
1Hemel, Armijn, (2020), ‘Docker Containers for Legal Professionals,’ [pdf] Available at: <https://www.linuxfoundation.org/wp-content/uploads/Docker-Containers-for-Legal-Professionals-Whitepaper_042420.pdf> [Accessed 16 February 2021]. See also Peterson, Scott, (2020), ‘Making compliance scalable in a container world.’ Available at: <https://opensource.com/article/20/7/compliance-containers> [Accessed 16 February 2021].
2Sec. 0 GPL-3.0 provides as follows: “To ‘convey'‘ a work means any kind of propagation that enables other parties to make or receive copies.” and “To ’propagate’ a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy.”
3Meeker, Heather (2012), ‘The Gift that Keeps on Giving – Distribution and Copyleft in Open Source Software Licenses’, JOLTS, 4(1), pp 29 – 40, [DOI: 10.5033/ifosslr.v4i1.66].
4Directive 2009/24/EC on the legal protection of computer programs (codified version). Available at: <https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32009L0024> [Accessed 16 February 2021].
5See the ‘Opinion of Advocate General Saugmandsgaard Øe in the joined Cases C‑682/18 and C‑683/18 (Frank Peterson v Google LLC et al), ECLI:EU:C:2020:586. Available at: <https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:62018CC0682> [Accessed 16 February 2021].
6BGH (German Federal Court of Justice), judgment of 2020-03-05 - I ZR 32/19 – Internet radio recorder. Available at: <https://openjur.de/u/2202077.html> [Accessed 16 February 2021].
7CJEU of 2015-05-13, C-516/13 – Dimensione Direct Sales and Labianca. Available at:
<https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:62013CJ0516&qid=1607613372933&from=EN> [Accessed 16 February 2021].
8Please not that the “Right of communication to the public of works and right of making available to the public” in Art. 3 are independent rights from the “distribution right” in Art. 4 Directive 2001/29/EC. Available at: <https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32001L0029> [Accessed 16 February 2021].
9See Hemel Armijn, ibid n. 1, p. 19.
10As the CJEU, judgment of 14 June 2017 in case C-610/15 – Stichting Brein (The Pirate Bay) itself declares: “In order to determine whether a user is making a ‘communication to the public’ within the meaning of Article 3(1) of Directive 2001/29, it is necessary to take into account several complementary criteria, which are not autonomous and are interdependent. Consequently, those criteria must be applied both individually and in their interaction with one another, since they may, in different situations, be present to widely varying degrees.” Available at: <http://curia.europa.eu/juris/liste.jsf?language=en&T,F&num=c-610-15> [Accessed 16 February 2021].
11For efforts of Red Hat to improve the situation see Peterson, S., ibid.
12“However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.”
13See for more details Jaeger, Till and Metzger, Aaxel, Open Source Software, 5th edition, 2020, 64 et seq; Meeker, Heather, Open Source for Business, A practical Guide to Open Source Software Licensing, 3rd edition 2020, 119 et seq; Working Paper on the legal implication of certain forms of
Software Interactions (a.k.a linking), Available at: <https://www.ifosslr.org/public/LinkingDocument.odt> [Accessed 16 February 2021].
14The definition in section 1 GPL-3.0 reads as follows: ’The “System Libraries’ of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A ‘Major Component’, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.”