By the end of this tutorial, all your files will clearly have their copyright and licensing marked.
For the purpose of this tutorial, we will assume that the directory of your project looks like this:
project/ ├── img/ │ ├── cat.png │ └── dog.png ├── po/ │ ├── de.po │ ├── en_GB.po │ ├── eo.po │ ├── fr.po │ ├── nl.po │ └── POTFILES.in ├── src/ │ └── main.c ├── Makefile └── README.md
The first thing you need is a licence. There are many good licences, but we will pick the GNU General Public Licence v3.0 (GPL). More than simply choosing a licence, you need to put the licence in your project directory.
In the SPDX License List, we notice that the SPDX
Identifier of the licence is
GPL-3.0-or-later. As such, we create a directory
LICENSES, and put the licence text from the Free Software Foundation
(FSF) in a file called
Now that you have a licence, you need to indicate in the relevant files that
these files fall under that licence. We edit
src/main.c as such:
/* * Copyright 2018-2019 Jane Doe * Copyright 2019 John Doe * * SPDX-License-Identifier: GPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */
Only the first three lines are relevant for REUSE compliance—the rest is up to your discretion. In this blurb, we use the text that the GPL proposes.
The first and second lines begin with
Copyrightand record the publication years and copyright holders.
The third line begins with
SPDX-License-Identifier:and is followed up by a valid SPDX License Expression, typically just the SPDX Identifier of the licence.
Each file must always record these two bits of information.
We also edit
README.md using this blurb, though we will need to
use the correct comment syntax for each.
For each file, make sure that the recorded copyright holders are accurate.
We also want to license our image files under GPL-3.0-or-later. Unfortunately, images and other binary files do not have comment headers that one can easily edit.
There is a simple trick to circumvent this. Create the files
dog.png.license, each containing the same blurb as above.
A different licence
You get a phone call from an angry cat owner who says that the photo they took of their cat was not licensed under the GPL at all. They say it was licensed under the Creative Commons Attribution 4.0 International.
You go back to the SPDX License List, and you find
that the SPDX Identifier of this licence is
CC-BY-4.0. You also find the
full text of the
licence. As such,
you create a file
LICENSES/CC-BY-4.0.txt containing the licence text.
You go back to
cat.png.license and edit the file to say:
Copyright 2019 Angry Cat Owner SPDX-License-Identifier: CC-BY-4.0
You have kind translators who translate your project into many different languages. However, your translators do not or cannot edit the headers in their files. You could edit the headers of these files yourself, but there are a lot of them, and you do not feel comfortable manually editing the translation files.
You could use
.license files like you did for the images, but for some reason
you wish to opt against this.
For these files, you can use a configuration file. In your project root, create
.reuse/dep5. This file uses Debian’s
DEP-5 file format.
You edit the file to look like this:
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: Project Upstream-Contact: Jane Doe <firstname.lastname@example.org> Source: https://example.com/jane/project Files: po/* Copyright: 2018-2019 Translation Company License: GPL-3.0-or-later
Your project tree will now look like this:
project/ ├── img/ │ ├── cat.png │ ├── cat.png.license │ ├── dog.png │ └── dog.png.license ├── LICENSES/ │ ├── CC-BY-4.0.txt │ └── GPL-3.0-or-later.txt ├── po/ │ ├── de.po │ ├── en_GB.po │ ├── eo.po │ ├── fr.po │ ├── nl.po │ └── POTFILES.in ├── .reuse/ │ └── dep5 ├── src/ │ └── main.c ├── Makefile └── README.md