// -*- mode:doc; -*-
// vim: set syntax=asciidoc:

[[legal-info]]

== Legal notice and licensing

=== Complying with open source licenses

All of the end products of Buildroot (toolchain, root filesystem, kernel,
bootloaders) contain open source software, released under various licenses.

Using open source software gives you the freedom to build rich embedded
systems, choosing from a wide range of packages, but also imposes some
obligations that you must know and honour.
Some licenses require you to publish the license text in the documentation of
your product. Others require you to redistribute the source code of the
software to those that receive your product.

The exact requirements of each license are documented in each package, and
it is your responsibility (or that of your legal office) to comply with those
requirements.
To make this easier for you, Buildroot can collect for you some material you
will probably need. To produce this material, after you have configured
Buildroot with +make menuconfig+, +make xconfig+ or +make gconfig+, run:

--------------------
make legal-info
--------------------

Buildroot will collect legally-relevant material in your output directory,
under the +legal-info/+ subdirectory.
There you will find:

* A +README+ file, that summarizes the produced material and contains warnings
  about material that Buildroot could not produce.
* +buildroot.config+: this is the Buildroot configuration file that is usually
  produced with +make menuconfig+, and which is necessary to reproduce the
  build.
* The source code for all packages; this is saved in the +sources/+ and
  +host-sources/+ subdirectories for target and host packages respectively.
  The source code for packages that set +<PKG>_REDISTRIBUTE = NO+ will not be
  saved.
  Patches applied to some packages by Buildroot are distributed with the
  Buildroot sources and are not duplicated in the +sources/+ and +host-sources/+
  subdirectories.
* A manifest file (one for host and one for target packages) listing the
  configured packages, their version, license and related information.
  Some of this information might not be defined in Buildroot; such items are
  marked as "unknown".
* The license texts of all packages, in the +licenses/+ and +host-licenses/+
  subdirectories for target and host packages respectively.
  If the license file(s) are not defined in Buildroot, the file is not produced
  and a warning in the +README+ indicates this.

Please note that the aim of the +legal-info+ feature of Buildroot is to
produce all the material that is somehow relevant for legal compliance with the
package licenses. Buildroot does not try to produce the exact material that
you must somehow make public. Certainly, more material is produced than is
needed for a strict legal compliance. For example, it produces the source code
for packages released under BSD-like licenses, that you are not required to
redistribute in source form.

Moreover, due to technical limitations, Buildroot does not produce some
material that you will or may need, such as the toolchain source code and the
Buildroot source code itself (including patches to packages for which source
distribution is required).
When you run +make legal-info+, Buildroot produces warnings in the +README+
file to inform you of relevant material that could not be saved.

[[legal-info-list-licenses]]
=== License abbreviations

Here is a list of the licenses that are most widely used by packages in
Buildroot, with the name used in the manifest files:

* `AGPLv3`:
  http://www.gnu.org/licenses/agpl-3.0.en.html[
  GNU Affero General Public License, version 3];
* `GPLv2`:
  http://www.gnu.org/licenses/old-licenses/gpl-2.0.html[
  GNU General Public License, version 2];
* `GPLv2+`:
  http://www.gnu.org/licenses/old-licenses/gpl-2.0.html[
  GNU General Public License, version 2]
  or (at your option) any later version;
* `GPLv3`:
  http://www.gnu.org/licenses/gpl.html[
  GNU General Public License, version 3];
* `GPLv3+`:
  http://www.gnu.org/licenses/gpl.html[
  GNU General Public License, version 3]
  or (at your option) any later version;
* `GPL`:
  http://www.gnu.org/licenses/gpl.html[
  GNU General Public License] (any version);
* `LGPLv2`:
  http://www.gnu.org/licenses/old-licenses/lgpl-2.0.html[
  GNU Library General Public License, version 2];
* `LGPLv2+`:
  http://www.gnu.org/licenses/old-licenses/lgpl-2.0.html[
  GNU Library General Public License, version 2]
  or (at your option) any later version;
* `LGPLv2.1`:
  http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html[
  GNU Lesser General Public License, version 2.1];
* `LGPLv2.1+`:
  http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html[
  GNU Lesser General Public License, version 2.1]
  or (at your option) any later version;
* `LGPLv3`:
  http://www.gnu.org/licenses/lgpl.html[
  GNU Lesser General Public License, version 3];
* `LGPLv3+`:
  http://www.gnu.org/licenses/lgpl.html[
  GNU Lesser General Public License, version 3]
  or (at your option) any later version;
* `LGPL`:
  http://www.gnu.org/licenses/lgpl.html[
  GNU Lesser General Public License] (any version);
* `BSD-4c`:
  http://directory.fsf.org/wiki/License:BSD_4Clause[
  Original BSD 4-clause license];
* `BSD-3c`:
  http://opensource.org/licenses/BSD-3-Clause[
  BSD 3-clause license];
* `BSD-2c`:
  http://opensource.org/licenses/BSD-2-Clause[
  BSD 2-clause license];
* `MIT`:
  http://opensource.org/licenses/mit-license.html[
  MIT-style license];
* `Apache-2.0`:
  http://apache.org/licenses/LICENSE-2.0.html[
  Apache License, version 2.0];

=== Complying with the Buildroot license

Buildroot itself is an open source software, released under the
http://www.gnu.org/licenses/old-licenses/gpl-2.0.html[GNU General Public
License, version 2] or (at your option) any later version.
However, being a build system, it is not normally part of the end product:
if you develop the root filesystem, kernel, bootloader or toolchain for a
device, the code of Buildroot is only present on the development machine, not
in the device storage.

Nevertheless, the general view of the Buildroot developers is that you should
release the Buildroot source code along with the source code of other packages
when releasing a product that contains GPL-licensed software.
This is because the
http://www.gnu.org/licenses/old-licenses/gpl-2.0.html[GNU GPL]
defines the "'complete source code'" for an executable work as "'all the
source code for all modules it contains, plus any associated interface
definition files, plus the scripts used to control compilation and installation
of the executable'".
Buildroot is part of the 'scripts used to control compilation and
installation of the executable', and as such it is considered part of the
material that must be redistributed.

Keep in mind that this is only the Buildroot developers' opinion, and you
should consult your legal department or lawyer in case of any doubt.
