This is the digital equivalent of /dev/null — a compliant interface that does nothing.

Linux stubs are preemptive — the BSD stub is not

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.

The Approach

Three layers of short-circuiting cover the full range of Linux application packaging:

Primary

D-Bus Stub Daemon

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.

Proposed

xdg-desktop-portal-ageless

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.

Implemented

systemd userdb birthDate Neutralization

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.

Live Target

MidnightBSD aged(8) Stub

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.

Planned

AppImage and Snap Isolation

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.

How It Fits Together

The removal and short-circuit approaches are designed to work in sequence:

Step 1: Remove

Use the removal guides to uninstall the real age reporting implementation — package, service, data files, and all.

Step 2: Replace

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.

Step 3: Prevent

Use package manager holds, pacman hooks, or preseed directives to prevent the real implementation from being reinstalled by updates. The stub remains in place.