// -*- 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:

* `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.
