A proposed cross-distribution D-Bus service for age bracket reporting. This is the leading candidate for how Linux will comply with AB 1043 and similar state-level age verification mandates.
This interface has been proposed on multiple mailing lists but has not been accepted by freedesktop.org, adopted by any distribution, or merged into any codebase. It remains under discussion.
The proposal was published on March 1, 2026 by Aaron Rainbolt, a contributor to the Kicksecure and Whonix projects. Rainbolt cross-posted the proposal to four mailing lists simultaneously:
debian-devel@lists.debian.orgubuntu-devel@lists.ubuntu.comdevel@lists.fedoraproject.orgxdg@lists.freedesktop.orgThe intent was to establish a cross-distro standard before any individual distribution implemented its own mechanism, avoiding fragmentation.
Rainbolt described this as a "hybrid" approach: a standalone D-Bus service that does not require modifying AccountsService, xdg-desktop-portal, or any existing system component. The service runs independently and can be packaged and shipped by any distribution without touching core system services.
This was a deliberate choice. By avoiding changes to existing services, the proposal sidesteps the need to backport modifications to stable releases — a significant concern for distributions like Debian that maintain long-term stable branches.
The proposed D-Bus interface defines three methods:
<interface name="org.freedesktop.AgeVerification1">
<method name="SetAge">
<arg name="username" type="s" direction="in"/>
<arg name="age_years" type="u" direction="in"/>
</method>
<method name="SetDateOfBirth">
<arg name="username" type="s" direction="in"/>
<arg name="date_iso8601" type="s" direction="in"/>
</method>
<method name="GetAgeBracket">
<arg name="username" type="s" direction="in"/>
<arg name="bracket" type="u" direction="out"/>
<!-- 0 = unknown, 1 = under 13, 2 = 13-15, 3 = 16-17, 4 = 18+ -->
</method>
</interface>
Accepts a username and an integer age in years. The daemon converts this to the appropriate bracket and stores only the bracket value.
Accepts a username and an ISO 8601 date string. The daemon calculates the current age, converts to a bracket, and stores the bracket. In Kicksecure's intended implementation, the actual date of birth is not persisted.
Returns the stored bracket for a given username. The return value is an unsigned integer:
0 — Unknown (no age data provided)1 — Under 132 — 13–153 — 16–174 — 18+The proposal specifies that age bracket data is stored in root-owned files that are not world-readable. Only the bracket value is stored — not the user's actual age or date of birth. This is a data minimization design: the daemon accepts precise data as input but retains only the coarsest representation needed for compliance.
At least in Kicksecure's intended implementation, calling SetDateOfBirth does
not persist the date. The date is used to compute the bracket, then discarded.
The proposal deliberately does not specify a user interface for age collection. The D-Bus service is a backend; the frontend — the dialog that asks users for their age during account creation — is left to individual distributions and desktop environments to implement.
This means GNOME, KDE, and other DEs would each need to build their own age prompt, or distributions would need to add it to their installer or first-boot wizard.
The mailing list discussion surfaced several substantive problems with the proposal:
Heinrich Schuchardt pointed out that the US-centric four-bracket model doesn't map to other jurisdictions. Germany, for example, uses age ratings of 0+, 6+, 12+, 16+, and 18+. A hardcoded set of four brackets would be insufficient for international compliance.
Rainbolt acknowledged "tunnel vision" on this point and committed to revising the spec to support configurable bracket sets per jurisdiction.
New York's S8102 requires "commercially reasonable" age verification — not just self-declaration. The D-Bus proposal only handles self-reported data: the user types in their age, and the system believes them. This satisfies AB 1043's requirements but may not satisfy stricter laws that require actual verification (document checks, facial analysis, etc.).
Users on the Whonix forums — an ironic venue given Whonix's focus on anonymity — called the proposal "a privacy disaster" and "a new fingerprinting mechanism: age bracket." Any application can query the D-Bus interface to learn whether the user is a minor. Combined with other system data, age bracket becomes another vector for cross-application user identification.
Gioele Barabucci noted that AB 1043's language is broad enough to arguably require
every application — including command-line utilities like cp — to
query the age signal on launch. The statute applies to software that "enables access to
content," and a file copy utility enables access to content stored in files. Whether this
interpretation survives judicial review is an open question, but the text supports it.
When a distribution ships a working org.freedesktop.AgeVerification1 daemon,
Ageless Linux will provide a drop-in replacement that always returns bracket 0
(unknown) for all queries. The replacement daemon will have the same D-Bus name and interface,
so applications that depend on the API will continue to function — they'll just never receive
age data.
See the Short-Circuit section for implementation details.