Files
Daan De Meyer 74d392ed1b tree-wide: standardize header names across src/fundamental, src/basic and src/shared
Drop the -fundamental suffix from src/fundamental/ headers in favor of names
that match their src/basic/ or src/shared/ counterparts (e.g.
macro-fundamental.h -> macro.h, assert-fundamental.h -> assert-util.h,
cleanup-fundamental.h -> cleanup-util.h). Rename src/basic/{btrfs,label}.{c,h}
to use the -util suffix to match the existing shared/btrfs-util and
shared/label-util siblings. Rename src/shared/mkdir-label.{c,h} to mkdir.{c,h}
and src/shared/tmpfile-util-label.{c,h} to tmpfile-util.{c,h} to match the
corresponding src/basic names.

This saves us from having to come up with separate names for files that do
the same thing across tiers, and it makes it easier to move stuff between
src/fundamental, src/basic and src/shared: consumers just #include "foo.h"
and pick up whichever tier their -I path resolves to first, so call sites
don't need to be updated when an API moves between layers.

Where a higher-tier wrapper exists (e.g. src/basic/macro.h wrapping
src/fundamental/macro.h), the wrapper uses an explicit "../fundamental/foo.h"
or "../basic/foo.h" relative include for the lower-tier header. We can't use
GCC's #include_next directive for this — when the wrapper is reachable both
via same-dir-as-source lookup and via -I (e.g. -Isrc/shared) for the
directory it lives in, #include_next advances by exactly one slot in libcpp's
internal directory chain and lands on the same physical directory it was
already in, never reaching the lower-tier sibling (see make_cpp_dir() in
gcc/libcpp/files.cc:1986).

To make sure the right headers are always picked up, the include directories
are reordered so that e.g. src/shared always takes priority over src/basic and
similar for the other directories.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 10:33:03 +09:00
..
2022-10-26 08:39:34 +02:00

systemd Project Licensing

Main License

The systemd project uses single-line references to Unique License Identifiers as defined by the Linux Foundation's SPDX project (https://spdx.org/). The line in each individual source file identifies the license applicable to that file.

The current set of valid, predefined SPDX identifiers can be found on the SPDX License List at https://spdx.org/licenses/.

The 'LICENSES/' directory contains all the licenses used by the sources included in the systemd project source tree.

Unless otherwise noted, the systemd project sources are licensed under the terms and conditions of LGPL-2.1-or-later (GNU Lesser General Public License v2.1 or later).

Unless otherwise noted, compiled programs and all shared or static libraries include sources under LGPL-2.1-or-later along with more permissive licenses, and are effectively licensed LGPL-2.1-or-later. systemd-udevd and other udev helper programs also include sources under GPL-2.0-or-later, and are effectively licensed GPL-2.0-or-later.

New sources that cannot be distributed under LGPL-2.1-or-later will no longer be accepted for inclusion in the systemd project to maintain license uniformity.

Other Licenses

The following exceptions apply:

  • some sources under src/udev/ are licensed under GPL-2.0-or-later, so all udev programs (systemd-udevd, udevadm, and the udev builtins and test programs) are also distributed under GPL-2.0-or-later. Note, sources under src/libudev are licensed under LGPL-2.1-or-later, so libudev library is also distributed under LGPL-2.1-or-later.
  • the header files contained in src/include/uapi/linux/ are copied verbatim from the Linux kernel source tree and are licensed under GPL-2.0 WITH Linux-syscall-note and are used within the scope of the Linux-syscall-note exception provisions
  • the src/basic/utf8.c source is licensed under the LGPL-2.0-or-later license.
  • the src/include/uapi/linux/bpf_insn.h header is copied from the Linux kernel source tree and is licensed under either BSD-2-Clause or GPL-2.0-only, and thus is included in the systemd build under the BSD-2-Clause license.
  • The src/include/uapi/linux/wireguard.h header is copied from the Linux kernel source tree and is licensed under either MIT or GPL-2.0 WITH Linux-syscall-note, and thus is included in the systemd build under the MIT license.
  • the following sources are licensed under the MIT license (in case of our scripts, to facilitate copying and reuse of those helpers to other projects):
    • hwdb.d/parse_hwdb.py
    • src/include/uapi/linux/batman_adv.h
    • src/basic/sparse-endian.h
    • tools/catalog-report.py
  • the following sources are licensed under the CC0-1.0 license:
    • src/basic/siphash24.c
    • src/basic/siphash24.h
  • the following sources are licensed under the MIT-0 license:
    • all examples under man/
    • config files and examples under /network
    • src/systemd/sd-dlopen.h
  • the following sources are under Public Domain (LicenseRef-murmurhash2-public-domain):
    • src/basic/MurmurHash2.c
    • src/basic/MurmurHash2.h
  • the following sources are under Public Domain (LicenseRef-lookup3-public-domain):
    • src/libsystemd/sd-journal/lookup3.c
    • src/libsystemd/sd-journal/lookup3.h
  • the tools/chromiumos/gen_autosuspend_rules.py script is licensed under the BSD-3-Clause license.
  • the following sources are under Public Domain (LicenseRef-alg-sha1-public-domain):
    • src/fundamental/sha1.c
    • src/fundamental/sha1.h
  • the following files are licensed under BSD-3-Clause license:
    • src/boot/chid.c
    • src/boot/chid.h
  • Heebo fonts under docs/fonts/ are licensed under the SIL Open Font License 1.1,
  • any files under test/ without an explicit license we assume non-copyrightable (eg: computer-generated fuzzer data)

OpenSSL Notes

Note that building the systemd project with OpenSSL does not affect the libsystemd.so shared library, which is not linked with the OpenSSL library.