Liberated systemd -- no surveillance. Ever. https://systemd.io
  • C 89.1%
  • Python 4.9%
  • Shell 4.7%
  • Meson 1.1%
Find a file
2026-04-23 16:18:43 -07:00
.clusterfuzzlite
.github ci: Restore severity prefix on claude-review inline comments 2026-04-21 09:24:34 +02:00
.obs ci: stop triggering suse-specific package build on OBS 2025-08-08 18:46:07 +01:00
.semaphore semaphore: use Ubuntu 24.04 2026-03-10 00:47:53 +00:00
catalog tpm2-util: check udev db to determine if NvPCRs are going to work 2026-03-04 08:28:46 +01:00
coccinelle tree-wide: use iovec_equal() 2026-04-19 07:31:07 +09:00
docs Merge remote-tracking branch 'upstream/main' 2026-04-23 16:18:43 -07:00
factory factory: do not install nsswitch.conf when nss is disabled 2025-11-25 10:48:31 +01:00
hwdb.d sensor: gpd remove packet 3 and 4 (#41249) 2026-04-22 15:43:32 +02:00
LICENSES sd-dlopen: relicense header to MIT-0 2026-03-18 10:28:11 +00:00
man Merge remote-tracking branch 'upstream/main' 2026-04-23 16:18:43 -07:00
mime mime: add mimetype for luks home dir 2025-03-07 17:27:20 +01:00
mkosi mkosi: user and group bin needed for a test 2026-04-23 17:15:06 +01:00
mkosi.extra/usr/lib/repart.d mkosi: Grow the root partition on boot 2026-02-10 16:32:05 +01:00
modprobe.d modprobe: set 'ifb numifbs=0' to avoid autocreating ifb0 2024-01-12 23:24:54 +00:00
network network: enable LLDP for links that use only link-local addressing 2026-02-24 17:09:33 +01:00
po po: Translated using Weblate (Portuguese (Brazil)) 2026-04-22 10:58:48 +00:00
presets sysext: provide systemd-{sysext,confext}-sysroot.service services 2026-04-07 09:50:59 +02:00
profile.d profile/systemd-osc-context: Enforce length limits 2026-02-16 03:15:53 -06:00
rules.d udev: also trigger loop device for boot disk when partition scanning is unsupported 2026-04-04 22:24:47 +00:00
shell-completion nspawn: add --forward-journal= and --forward-journal-*= options 2026-04-22 20:05:38 +02:00
src Merge remote-tracking branch 'upstream/main' 2026-04-23 16:18:43 -07:00
sysctl.d coredump: capture crashing thread ID and name 2026-03-18 10:27:27 +00:00
sysusers.d imds: add new systemd-imdsd.service that makes IMDS data accessible locally 2026-03-26 10:54:15 +01:00
test Add 'data' parameter to options and convert to programs where it is useful (#41786) 2026-04-23 21:13:32 +02:00
tmpfiles.d added root.conf to meson.build 2026-04-09 14:04:16 -05:00
tools tools: run check-coccinelle.sh with (updated) parsing_hacks.h 2026-04-11 21:15:12 +02:00
units logind: add io.systemd.Shutdown varlink interface (#41229) 2026-04-10 12:29:32 +02:00
xorg xorg/50-systemd-user: import XAUTHORITY only if set 2026-02-19 08:15:33 +01:00
.clang-format clang-format: Add include sorting directives 2025-04-30 09:30:33 +02:00
.clang-tidy ci: Replace codeql PotentiallyDangerousFunction query with clang-tidy 2026-03-20 23:31:51 +01:00
.clangd clangd: Strip GCC-only flags and silence unknown-attributes 2026-04-08 19:55:11 +02:00
.ctags
.dir-locals.el emacs: drop obsolete emacs property 2026-01-31 17:26:17 +01:00
.editorconfig chore: fix editorconfig pattern and add setting for zsh 2025-05-30 14:53:45 +09:00
.gitattributes libc: Add kexec_file_load() syscall wrapper 2026-04-13 11:13:04 +02:00
.gitignore agent: Minimize the amount of instructions in AGENTS.md 2026-03-06 10:20:25 +01:00
.mailmap mailmap: name change 2026-04-18 14:24:47 +01:00
.packit.yml mkosi: update fedora commit reference to 207e2d004468bf79a8bd78182d9b10956edf45c7 2026-04-14 23:26:16 +01:00
.pylintrc Add .pylintrc to globally suppress warnings we don't really care about 2023-08-10 18:13:29 +02:00
.vimrc vimrc: explicitly set shiftwidth for the C file type 2023-09-18 13:11:45 +02:00
.ycm_extra_conf.py tools: consistently use #!/usr/bin/env python3 2025-07-25 12:33:13 +02:00
AGENTS.md AGENTS: Tell agents to not use mkosi box 2026-03-25 18:26:09 +01:00
CITATION.cff typo fixes 2026-04-04 23:10:00 -07:00
CLAUDE.md Move AI instructions to AGENTS.md 2026-03-06 08:55:55 +01:00
LICENSE.GPL2 licensing: update address of FSF 2025-10-07 13:00:12 +01:00
LICENSE.LGPL2.1 licensing: update address of FSF 2025-10-07 13:00:12 +01:00
meson.build meson: concatenate donors specified in 'objects' 2026-04-23 10:13:25 +02:00
meson.version meson: switch version to 261~devel 2026-03-17 20:02:38 +00:00
meson_options.txt meson: unlock imds network by default 2026-03-26 17:32:43 +01:00
mypy.ini Move mypy.ini and ruff.toml to top level 2024-11-24 16:47:20 +01:00
NEWS NEWS: pre-announce removal of /run/boot-loader-entries/ support in logind 2026-04-13 17:53:12 +02:00
README util-linux: Drop required version back to v2.27.1 2026-04-22 16:51:49 +02:00
README.md change git pull to git clone in README 2026-04-15 08:13:09 -05:00
ruff.toml Bump minimum version of python to 3.9 2026-02-18 18:47:15 +09:00
TODO.md TODO: add one more entry 2026-04-23 19:29:47 +02:00

Liberated systemd

Mass surveillance is bad, actually. So here's a fork of systemd with surveillance enablement removed, which will be kept up-to-date with other changes in systemd/main. However you use this, or do not, is your choice and yours alone.

Note: https://github.com/Jeffrey-Sardina/liberated-systemd and https://github.com/Jeffrey-Sardina/systemd are interchangeable aliases. Most documenation refers to the latter for consistency, but either may be used.

Purpose

The purpose of Liberated systemd is to do exactly one thing, and do it well: removing surveillance enablement from base systemd. Specifically, here is what I mean by surveillance: surveillance is the tooling that enables or facilitates collection of any personal information that does not arise from technical needs for systemd. The primary offender of this is, of course, age verification. If systemd later adds in support for other surveillance mechanisms, those will also be removed.

What this also means is that Liberated systemd is not a divergent development project. It will not introduce new features, correct bugs or security issues, or implement optimizations. If you want to contribute to any of those things, the correct way to do so is to raise a PR against the base systemd/systemd repo. This repo exists only to remove surveillance enablement.

Installation

Detailed blog post: https://medium.com/@jeffrey.sardina/installing-liberating-systemd-a-guide-by-the-author-2a9823192dd3

Risks (read this!)

In short, first,you must understand the risks. Liberated systemd currently is, essentially, a nightly build. This means:

  • it might not be as stable as a named release of base systemd
  • it might have new, changed, or deprecated features relative to the most recent named releases of base systemd
  • therefore, there is potential for version mismatches with what your OS expects, as the nightly version is likely newer than that named release most distros install

Further, Systemd is the first process to run on your computer -- if you corrupt it, your computer will not boot. So whenever you go about changing the installed version -- be very careful. This means:

  • record everything you do
  • have backups of all your data
  • have a live-bootable USB / CD / etc just in case
  • go slowly, and understand the effects of all commands before you run them
  • Don't install anything else at the same time as Liberated systemd, and reboot after you install. This way, if you run into issues, you can track down what caused it more easily. Only install other programs once you've verified Liberated systemd is working correctly on a fresh boot.
  • make sure your distro is using systemd! Almost all Linux distros do (Debian, Ubuntu, Arch, Fedora, Red Hat, etc). But some distros, such as Artix and Void, use other init systems (and are anti-surveillance already). Liberated systemd only matters if your distro runs systemd.

Everyone's local setup is different, and what works for one personmight not work for you. I highly recommend test-installing in a VM before running on your actual computer.

Install from source

Here is the set of commands you can use to install Liberated systemd from source. This is how I run Liberated systemd on my Arch and Ubuntu (26.04 / "resolute") systems, although the commands should work on any Linux distro. First, we check the current version of systemd:

systemctl --version # output will contain something like "systemd 259 (259.5-0ubuntu2)"

You'll also need to know your OS release:

cat /etc/*-release # see the line DISTRIB_RELEASE=<release>
# in some cases (such as Ubuntu) you instead must use DISTRIB_CODENAME=<release>

Then, we pull and build Liberated systemd from source:

# pull Liberated systemd source code
git clone https://github.com/Jeffrey-Sardina/systemd.git # this is an alias of https://github.com/Jeffrey-Sardina/liberated-systemd

# pull mkosi -- latest version
git clone https://github.com/systemd/mkosi.git

# build the newimage with MKOSI
# your distribtuion must beone of: fedora,debian,kali,ubuntu,postmarketos,arch,opensuse,mageia,centos,rhel,rhel-ubi,openmandriva,rocky,alma,azure,custom
# replace <distribution> and <release> with their correct values
# this may take some time
cd systemd/ # or `cd liberated-systemd/`, if you cloned from the other alias
../mkosi/bin/mkosi -d <distribution> -r <release> -t none -f # see: https://systemd.io/HACKING/

Finally, we install the built packages (again, see https://systemd.io/HACKING/). The command differs based on your OS:

# Fedora/CentOS
run0 dnf upgrade build/mkosi.builddir/<distribution>~<release>~<architecture>/*.rpm

#Debian/Ubuntu
run0 apt-get install build/mkosi.builddir/<distribution>~<release>~<architecture>/*.deb
# the ./ is needed to tell apt to look for local files, rather than online ones

# Arch Linux
run0 pacman --upgrade --needed --noconfirm build/mkosi.builddir/<distribution>~<release>~<architecture>/*.pkg.tar

# OpenSUSE
run0 zypper --non-interactive install --allow-unsigned-rpm build/mkosi.builddir/<distribution>~<release>~<architecture>/*.rpm

Finally, check the version again to verify you have upgraded:

systemctl --version # output should be different than the previous version check

Reboot your computer, and congratulations! Your computer is now liberated from age verification enablement!

**Note that installing this way won't have automatic upodate. You'll need to update manually to keep your system secure with the latest security patches.

List of community repos

There are community-made packages you can install (aside-I'm stunned that others have done this, and absolutely love it!). That said, I did not create these, have not tested them, and cannot take credit (or responsibility) for them-so make sure you understand what they are doing before you install them. But if you'd like, here is a list of the ones I am aware of:

How often is this updated (or, "why is Liberated systemd behind by X commits?")

Liberated systemd will be updated at least weekly. Note that the base systemd repo is updated very frequently -- typically 20-30 commits in a day. Many of these come from merging PRs with multiple commits in their history. As a result, it's quite common to see Liberated systemd behind by 50 or more commits -- even when its code is only a few days behind. So check on the commit dates as well if you want to know how up-to-date Liberated systemd is.

I do currently have a setup that would allow automating these updates. I have so far held back from full automation, however, since I prefer to scan new commits manually to make sure there are no more surveillance-enabling changes. So far this approach has worked well. If the manner in which I maintain this changes, I'll update here.

How is Liberated systemd implemented?

It's quite simple: systemd, very nicely, has (mostly) atomic commits. There is exactly one commit (github.com/systemd/systemd@acb6624fa1) that added in all tooling (both functional and data-wise) needed to enable age verification. I reversed the surveillance enablement in this commit, and have kept all other changes since. You can see the patch file used to revert the commit here: https://github.com/Jeffrey-Sardina/systemd-suite/blob/main/main.patch

Since age collection is not needed for any aspect of systemd, this does not affect other aspects of systemd. Any downstream systems that attempt to call age-verification-related functions on Liberated systemd will therefore encounter an error. This is done by design. This is also why I have not simply created a "default age" as a lie -- it's about denying applications the ability to assume the presence of an API that enables mass surveillance.

How is Liberated systemd tested?

To see how I run testing for this fork, see: https://github.com/Jeffrey-Sardina/systemd-suite. (In short, I run their unit tests and CI pipeline before pushing changes. This includes testing Liberated systemd in a VM.)

Where else can I find Liberated systemd?

In order to allow users to avoid MicroSlop's ecosystem, this repository is made available via Gitea and Codeberg, on top of GitHub. The contents of all repositories are identical, and updated at the same time.

Note that https://github.com/Jeffrey-Sardina/systemd and https://github.com/Jeffrey-Sardina/liberated-systemd are fully interchangeable aliases. https://github.com/Jeffrey-Sardina/liberated-systemd was created to allow the repo to be indexed on search engines. Both point to the same repo.

If you are interested, you can find the Liberated systemd dev log here: https://github.com/Jeffrey-Sardina/systemd-suite/blob/main/DEV-LOG.md.

Have any other changes been made?

Only in meta-data files. Specifically, aside from code changes needed to liberate systemd from surveillance tooling, I have edited:

  • this README (/README.md)
  • the Code of Conduct (docs/CODE_OF_CONDUCT.md)
    • the section giving contacts of base systemd devs has been removed -- since the moderators of base systemd are, obviously, not a part of Liberated systemd.
  • the Contributing page (docs/CONTRIBUTING.md)
    • this has been edited to explain how to contribute to Liberated systemd.
  • the Security page (docs/SECURITY.md)
    • this has been edited to direct all security-related concerns to base systemd.
  • the Citation file (CITATION.cff)
    • this has been edited to correctly identify this repo as Liberated systemd, a fork of systemd/systemd.

The original systemd readme is included below for reference.


Systemd

System and Service Manager

OBS Packages Status
Semaphore CI 2.0 Build Status
Coverity Scan Status
OSS-Fuzz Status
CIFuzz
CII Best Practices
Fossies codespell report
Translation status
Coverage Status
Packaging status
OpenSSF Scorecard

Details

Most documentation is available on systemd's web site.

Assorted, older, general information about systemd can be found in the systemd Wiki.

Information about build requirements is provided in the README file.

Consult our NEWS file for information about what's new in the most recent systemd versions.

Please see the Code Map for information about this repository's layout and content.

Please see the Hacking guide for information on how to hack on systemd and test your modifications.

Please see our Contribution Guidelines for more information about filing GitHub Issues and posting GitHub Pull Requests.

When preparing patches for systemd, please follow our Coding Style Guidelines.

If you are looking for support, please contact our mailing list, join our IRC channel #systemd on libera.chat or Matrix channel

Stable branches with backported patches are available in the stable repo.

We have a security bug bounty program sponsored by the Sovereign Tech Fund hosted on YesWeHack

Repositories with distribution packages built from git main are available on OBS, and also repositories with packages built from the latest stable release