Removing age reporting infrastructure may break applications that expect an age bracket signal. The short-circuit approach: replace the real implementation with a stub that always returns "unknown" (bracket 0). Apps get a valid D-Bus response. No age data is collected or transmitted.
This is the digital equivalent of /dev/null — a compliant interface
that does nothing.
No Linux distribution has shipped an age reporting implementation, and no Linux application
queries the org.freedesktop.AgeVerification1 interface yet. The Linux stubs
below are ready for when they do. The one exception: MidnightBSD's
aged(8) daemon is real,
shipped, and enabled by default. The
aged stub targets a
live system.
Three layers of short-circuiting cover the full range of Linux application packaging:
A minimal daemon that registers org.freedesktop.AgeVerification1 on the
system bus and responds to GetAgeBracket with 0 (unknown) for all users.
SetAge and SetDateOfBirth accept input and discard it
silently. Any application that queries the age bracket API gets a valid, well-formed
response.
PR #1922
proposes an age range portal for xdg-desktop-portal. If accepted, sandboxed Flatpak and
Snap applications would query age data through this interface. The data source is the
systemd userdb birthDate field
(merged March 18, 2026).
Our response: a custom xdg-desktop-portal-ageless backend that implements
only the age verification portal and returns an error for every query. Written in C,
compiled at install time, shipped as a single architecture-independent .deb.
Replaces the desktop's backend for this single interface without affecting other portal
functionality.
systemd PR #40954 (merged March 18, 2026) added a birthDate field to user
records — the data layer feeding the portal API above. become-ageless.sh
neutralizes this field for all users: regular mode writes 1970-01-01 (the
epoch), flagrant mode writes null. The --persistent flag installs
agelessd, a systemd timer that re-neutralizes every 24 hours. Even if the
portal ships, it reads neutralized data.
MidnightBSD's aged daemon
is the first shipped age verification implementation. The stub replaces it with a socket
listener that returns -1,-1 (unknown) for all queries, plus an optional
LD_PRELOAD shim for the agev(3) C library. Unlike the Linux stubs above, this
targets a real, running system.
AppImages run with the user's full permissions and can access D-Bus directly — the stub daemon handles this case. Snaps use AppArmor profiles that can restrict D-Bus access; we will document any cases where a snap's confinement profile grants access to the age bracket bus name and how to revoke it.
The removal and short-circuit approaches are designed to work in sequence:
Use the removal guides to uninstall the real age reporting implementation — package, service, data files, and all.
Install the stub daemon. It occupies the same D-Bus bus name, so applications see a working service. No code changes or application patching needed.
Use package manager holds, pacman hooks, or preseed directives to prevent the real implementation from being reinstalled by updates. The stub remains in place.