Re: On the unfortunate need for an "age verification" API for legal compliance reasons in some U.S. states

"Vincent F. Heuser Jr." <[email protected]> Mon, 6 Apr 2026 14:10:41 -0400
Newsgroups gmane.linux.debian.devel.legal,gmane.linux.debian.devel.general
Organization Heuser Law Office
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------E518E63579840BEE0894E9C9
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

bottom posting-->

On 2026/04/06 13:39 PM, Marcia Wilbur wrote:
> So, regarding the Operating system provider definition, if I have software that creates 
> backups and creates custom distros, am I considered an operating system provider?
> I Maintain a tool that enables people to create their own operating systems and become 
> an operating system provider, but in and of itself, I am not an “operating system provider”.
>
> That being said, of course, I am interested in this discussion so I may relay 
> information to those operating system providers.
>
> Marcia Wilbur
>
> On Sun, Mar 1, 2026 at 3:44 PM Aaron Rainbolt <[email protected] 
> <mailto:[email protected]>> wrote:
>
>     On Sun, 1 Mar 2026 15:12:09 -0500
>     "Vincent F. Heuser Jr." <[email protected]
>     <mailto:[email protected]>> wrote:
>
>     > On 2026/03/01 14:48 PM, Aaron Rainbolt wrote:
>     > > Given that this is related to legal stuff, I should preface this by
>     > > saying I am not a lawyer.
>     > >
>     > > Recently, a new law was passed in California that requires OS
>     > > vendors to provide some limited info about a user's age via an API
>     > > that application distribution websites and application stores can
>     > > use. [1] Colorado seems to be working on a similar law. [2] The law
>     > > will go into effect January 1, 2027, it is no longer a draft. I do
>     > > quite a bit of work with an OS vendor (working with the Kicksecure
>     > > [3] and Whonix [4] projects), and we aren't particularly interested
>     > > in blocking everyone in California and Colorado from using our
>     > > OSes, so we're currently looking into how to implement an API that
>     > > will comply with the laws while also not being a privacy disaster.
>     > > Given that other distributions are also investigating what to do
>     > > with this, and the law requires us to make a "good faith effort to
>     > > comply with [the] title, taking into consideration available
>     > > technology", I figured it would be a good idea to bring the issue
>     > > here.
>     > >
>     > > At its core, the law seems to require that an "operating system"
>     > > (I'm guessing this would correspond to a Linux distribution, not an
>     > > OS kernel or userland) request the user's age or date of birth at
>     > > "account setup". The OS is also expected to allow users to set the
>     > > user's age if they didn't already provide it (because the OS was
>     > > installed before the law went into effect), and it needs to provide
>     > > an API somewhere so that app stores and application distribution
>     > > websites can ask the OS "what age bracket does this user fall
>     > > into?" Four age brackets are defined, "< 13", ">= 13 and < 16", ">=
>     > > 16 and < 18", and ">= 18". It looks like the API also needs to not
>     > > provide more information than just the age bracket data. A bunch of
>     > > stuff is left unclear (how to handle servers and other CLI-only
>     > > installs, how to handle VMs, whether the law is even applicable if
>     > > the primary user is over 18 since the law ridiculously defines a
>     > > user as "a child" while also defining "a child" as anyone under the
>     > > age of 18, etc.), but that's what we're given to deal with.
>     > >
>     > > The most intuitive place to put this functionality would be, IMO,
>     > > AccountsService. The main issue with that is that stable-release
>     > > distributions, and distributions based upon them, would be faced
>     > > with the issue of how to get an updated version of AccountsService
>     > > integrated into their software repositories, or how to backport the
>     > > appropriate code. The law goes into effect on January 1, 2027,
>     > > Debian Bookworm is going to be supported by ELTS until July 30,
>     > > 2033, and we don't yet know if Debian will care enough about
>     > > California's laws to want to backport a new feature in
>     > > AccountsService into Debian Bookworm (or even Trixie).
>     > > Distributions based on Debian (such as Kicksecure and Whonix) may
>     > > still want to comply with the law though, so something using
>     > > AccountsService-specific APIs would be frustrating. Requiring a
>     > > whole separate daemon for the foreseeable future just for an age
>     > > verification API would also be annoying.
>     > >
>     > > Another place the functionality could go is xdg-desktop-portal. This
>     > > one is a bit non-ideal for a couple of reasons; for one, the easiest
>     > > place to put the call would be in the Account portal, which returns
>     > > more information than the account's age bracket. This could
>     > > potentially be considered non-compliant with the law, as it states
>     > > that the operating system shall "[s]end only the minimum amount of
>     > > information necessary to comply with this title". This also comes
>     > > with the backporting disadvantages of an AccountsService-based
>     > > implementation.
>     > >
>     > > For this reason, I'd like to propose a "hybrid" approach; introduce
>     > > a new standard D-Bus interface, `org.freedesktop.AgeVerification1`,
>     > > that can be implemented by arbitrary applications as a distro sees
>     > > fit. AccountsService could implement this API so that newer versions
>     > > of distros will get the relevant features for free, while distros
>     > > with an AccountsService too old to contain the feature can
>     > > implement it themselves as a stop-gap solution.
>     > >
>     > > Taking inspiration from the File Manager D-Bus interface [5], I
>     > > think something like the following might work:
>     > >
>     > >      <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object
>     > > Introspection 1.0//EN"
>     > > "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
>     > > <node name="/org/freedesktop/AgeVerification1"> <interface
>     > > name="org.freedesktop.AgeVerification1"> <method name="SetAge">
>     > >            <arg type="s" name="User" direction="in"/>
>     > >            <arg type="u" name="YearsOfAge" direction="in"/>
>     > >          </method>
>     > >          <method name="SetDateOfBirth">
>     > >            <arg type="s" name="User" direction="in"/>
>     > >            <arg type="s" name="Date" direction="in"/>
>     > >          </method>
>     > >          <method name='GetAgeBracket'>
>     > >            <arg type="s" name="User" direction="in"/>
>     > >            <arg type="u" name="AgeBracket" direction="out"/>
>     > >          </method>
>     > >        </interface>
>     > >      </node>
>     > >
>     > > * The 'User' argument would, in all instances, be expected to be the
>     > >    UNIX account username of the user in question. This user account
>     > > must not be a system account (i.e. its UID must fall between
>     > > UID_MIN and UID_MAX as defined by /etc/login.defs). If a user is
>     > > specified that does not exist or whose UID is out of range, these
>     > > methods will return the error
>     > > 'org.freedesktop.AgeVerification1.Error.NoSuchUser'. If the
>     > > specified user is not the same as the user making the method call,
>     > > and the user making the method call is not root, these methods will
>     > > return the error
>     > > 'org.freedesktop.AgeVerification1.Error.PermissionDenied'.
>     > > * The 'YearsOfAge' argument of the 'SetAge' method should be an
>     > >    unsigned integer specifying the age of the user in years at the
>     > > time of the method call. (The law specifically allows providing
>     > > simply an age value rather than a birth date if desired.)
>     > > * The 'Date' argument of the 'SetDateOfBirth' method should be a
>     > > string in ISO8601 format (i.e. YYYY-MM-DD) indicating the day on
>     > > which the user was born. If the argument is invalid, the method
>     > > will return the error
>     > > 'org.freedesktop.AgeVerification1.Error.InvalidDate'.
>     > > * The 'AgeBracket' output argument of the 'GetAgeBracket' method
>     > > will be an unsigned integer between 1 and 4 inclusive, where 1
>     > > indicates that the user is under 13 years old, 2 indicates that the
>     > > user is at least 13 and under 16 years old, 3 indicates that the
>     > > user is at least 16 and under 18 years old, and 4 indicates that
>     > > the user is 18 years old or older. If no age has been configured
>     > > for the user yet, the method will return the error
>     > > 'org.freedesktop.AgeVerification1.Error.AgeUndefined'.
>     > >
>     > > I propose that the exact way in which age information is stored by
>     > > the daemon should be left implementation-defined. For Kicksecure,
>     > > the way we implement it will almost certainly store only the age
>     > > bracket and require users to explicitly reconfigure their age once
>     > > they are old enough to move from one age bracket to another. Other
>     > > implementations may choose to store the date of birth or the age
>     > > and date on which the age was set so that they can automatically
>     > > update the age bracket as time passes. This interface will be
>     > > provided *on the system bus* (NOT the session bus!), and the D-Bus
>     > > service that provides these services should run as root. The file
>     > > containing the user-to-age mappings should be owned by root and
>     > > should not be world-readable, to prevent leaking the user's
>     > > specific age to malicious applications.
>     > >
>     > > Some things I did think about when writing the above but ultimately
>     > > decided to not propose:
>     > >
>     > > * Detailed permission gating for the 'GetAgeBracket' method. The
>     > > only reason to do this would be for additional privacy, and
>     > >    privacy-conscious users can simply lie about their age or the
>     > > age of the intended user. There isn't anything in the law (that I
>     > > can tell) that prevents the user from just saying "I'm 18" when the
>     > > prompt appears and going with it. This would also be really
>     > > difficult to implement outside of the context of
>     > > xdg-desktop-portal, and would probably only work with sandboxed
>     > > apps if it was implemented that way.
>     > > * UX for actually requesting the age from the user. IMO this is out
>     > > of scope for FreeDesktop; individual distros should see to it that
>     > > they prompt for the user's age or birth date at "account setup"
>     > > (whatever that happens to be defined as for the distro in
>     > > question), nudge the user to provide the information later on for
>     > > existing installations, etc. Furthermore, this mechanism needs to
>     > > work even on CLI-only installs and maybe even on server installs,
>     > > depending on how one defines "general purpose computing device" (as
>     > > specified by the law in question), so defining any specific UX is
>     > > likely infeasible. (If this is required on servers, end-users will
>     > > probably want to auto-provision the age information somehow, and
>     > > specifying how to do that in a distribution-agnostic way is
>     > > impossible given that Ubuntu uses cloud-init, Fedora uses Kickstart
>     > > and Ignition, etc.)
>     > > * Omitting the 'SetDateOfBirth' method. It can be lived without
>     > >    legally, but without the method, it becomes difficult for
>     > > software that already records the user's date of birth to
>     > > accurately implement automatic age bracket adjustment as time
>     > > passes. This isn't a feature Kicksecure would use, but it's a
>     > > feature some projects might be interested in.
>     > >
>     > > Thanks for taking a look at this.
>     > >
>     > > --
>     > > Aaron
>     > >
>     > > [1]
>     > >
>     https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=202520260AB1043
>     > > [2] https://leg.colorado.gov/bill_files/110990/download [3]
>     > > https://www.kicksecure.com/ [4] https://www.whonix.org/
>     > > [5]
>     > > https://www.freedesktop.org/wiki/Specifications/file-manager-interface/
>     > >
>     >
>     > By definition, not a Debian or Ubuntu problem:
>     > https://www.merriam-webster.com/dictionary/vendor
>
>     I may have been incorrectly imprecise; the law linked says that "an
>     operating system provider shall" do the things needed to comply with
>     the title, and defines an operating system provider as "a person or
>     entity that develops, licenses, or controls the operating system
>     software on a computer, mobile device, or any other general purpose
>     computing device." "Vendor" is a term I mistakenly used, as far as I
>     can tell the law does not exclude operating systems that are offered
>     for free. Again though, as I stated, I am not a lawyer, so perhaps I'm
>     misunderstanding the meaning of the definition of "operating system
>     provider".
>
>     --
>     Aaron
>
The bill is Assembly Bill 1043 (AB 1043), the Digital Age Assurance Act.  Newsom signed 
this bill into law on October 13, 2025, and it is set to take effect on January 1, 2027.
https://reason.com/2026/03/04/computer-scientists-caution-against-internet-age-verification-mandates/

Actual language:
https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=202520260AB1043
1798.500(g) “Operating system provider” means a person or entity that develops, licenses, 
or controls the operating system software on a computer, mobile device, or any other 
general purpose computing device.
and 1798.501. (a) An operating system provider shall..."

But wait...  There will be litigation:
...Because "proving an operating system" is an act, generally, and not primarily speech, 
any argument is going to have to be an "as applied" argument. And so the argument is that 
providing free software is a speech act and not primarily a commercial act, so that "as 
applied" to Debian the law violates the 1st Amendment of the US Constitution.  The 
California Constitution provides even broader free speech protections than the First 
Amendment, I am told. I understand that California courts have long recognized that 
computer code is protected speech.  As applied to Debian, it seems to violate the US 
Contracts Clause or interfere with the GPL (General Public License).

I am not a California lawyer, but it seems there is plenty to fight about.  OTOH who wants 
to spend money on that?
Vince Heuser
Louisville KY.


--------------E518E63579840BEE0894E9C9
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    bottom posting--&gt;<br>
    <br>
    <div class="moz-cite-prefix">On 2026/04/06 13:39 PM, Marcia Wilbur
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CADp_D1_Qj4td4_NxAk2JpjO7WcDebG2HRtAJxetqZO4=qEWAmg@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <div dir="auto">So, regarding the Operating system provider
        definition, if I have software that creates backups and creates
        custom distros, am I considered an operating system provider? </div>
      <div dir="auto"><span style="font-family:-apple-system,sans-serif">I
          Maintain a tool that enables people to create their own
          operating systems and become an operating system provider, but
          in and of itself, I am not an “operating system provider”.</span><br>
      </div>
      <div dir="auto"><br>
      </div>
      <div dir="auto">That being said, of course, I am interested in
        this discussion so I may relay information to those operating
        system providers.</div>
      <div dir="auto"><br>
      </div>
      <div dir="auto">Marcia Wilbur </div>
      <div><br>
        <div class="gmail_quote gmail_quote_container">
          <div dir="ltr" class="gmail_attr">On Sun, Mar 1, 2026 at
            3:44 PM Aaron Rainbolt &lt;<a
              href="mailto:[email protected]" moz-do-not-send="true">[email protected]</a>&gt;
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sun, 1
            Mar 2026 15:12:09 -0500<br>
            "Vincent F. Heuser Jr." &lt;<a
              href="mailto:[email protected]" target="_blank"
              moz-do-not-send="true">[email protected]</a>&gt;
            wrote:<br>
            <br>
            &gt; On 2026/03/01 14:48 PM, Aaron Rainbolt wrote:<br>
            &gt; &gt; Given that this is related to legal stuff, I
            should preface this by<br>
            &gt; &gt; saying I am not a lawyer.<br>
            &gt; &gt;<br>
            &gt; &gt; Recently, a new law was passed in California that
            requires OS<br>
            &gt; &gt; vendors to provide some limited info about a
            user's age via an API<br>
            &gt; &gt; that application distribution websites and
            application stores can<br>
            &gt; &gt; use. [1] Colorado seems to be working on a similar
            law. [2] The law<br>
            &gt; &gt; will go into effect January 1, 2027, it is no
            longer a draft. I do<br>
            &gt; &gt; quite a bit of work with an OS vendor (working
            with the Kicksecure<br>
            &gt; &gt; [3] and Whonix [4] projects), and we aren't
            particularly interested<br>
            &gt; &gt; in blocking everyone in California and Colorado
            from using our<br>
            &gt; &gt; OSes, so we're currently looking into how to
            implement an API that<br>
            &gt; &gt; will comply with the laws while also not being a
            privacy disaster.<br>
            &gt; &gt; Given that other distributions are also
            investigating what to do<br>
            &gt; &gt; with this, and the law requires us to make a "good
            faith effort to<br>
            &gt; &gt; comply with [the] title, taking into consideration
            available<br>
            &gt; &gt; technology", I figured it would be a good idea to
            bring the issue<br>
            &gt; &gt; here.<br>
            &gt; &gt;<br>
            &gt; &gt; At its core, the law seems to require that an
            "operating system"<br>
            &gt; &gt; (I'm guessing this would correspond to a Linux
            distribution, not an<br>
            &gt; &gt; OS kernel or userland) request the user's age or
            date of birth at<br>
            &gt; &gt; "account setup". The OS is also expected to allow
            users to set the<br>
            &gt; &gt; user's age if they didn't already provide it
            (because the OS was<br>
            &gt; &gt; installed before the law went into effect), and it
            needs to provide<br>
            &gt; &gt; an API somewhere so that app stores and
            application distribution<br>
            &gt; &gt; websites can ask the OS "what age bracket does
            this user fall<br>
            &gt; &gt; into?" Four age brackets are defined, "&lt; 13",
            "&gt;= 13 and &lt; 16", "&gt;=<br>
            &gt; &gt; 16 and &lt; 18", and "&gt;= 18". It looks like the
            API also needs to not<br>
            &gt; &gt; provide more information than just the age bracket
            data. A bunch of<br>
            &gt; &gt; stuff is left unclear (how to handle servers and
            other CLI-only<br>
            &gt; &gt; installs, how to handle VMs, whether the law is
            even applicable if<br>
            &gt; &gt; the primary user is over 18 since the law
            ridiculously defines a<br>
            &gt; &gt; user as "a child" while also defining "a child" as
            anyone under the<br>
            &gt; &gt; age of 18, etc.), but that's what we're given to
            deal with.<br>
            &gt; &gt;<br>
            &gt; &gt; The most intuitive place to put this functionality
            would be, IMO,<br>
            &gt; &gt; AccountsService. The main issue with that is that
            stable-release<br>
            &gt; &gt; distributions, and distributions based upon them,
            would be faced<br>
            &gt; &gt; with the issue of how to get an updated version of
            AccountsService<br>
            &gt; &gt; integrated into their software repositories, or
            how to backport the<br>
            &gt; &gt; appropriate code. The law goes into effect on
            January 1, 2027,<br>
            &gt; &gt; Debian Bookworm is going to be supported by ELTS
            until July 30,<br>
            &gt; &gt; 2033, and we don't yet know if Debian will care
            enough about<br>
            &gt; &gt; California's laws to want to backport a new
            feature in<br>
            &gt; &gt; AccountsService into Debian Bookworm (or even
            Trixie).<br>
            &gt; &gt; Distributions based on Debian (such as Kicksecure
            and Whonix) may<br>
            &gt; &gt; still want to comply with the law though, so
            something using<br>
            &gt; &gt; AccountsService-specific APIs would be
            frustrating. Requiring a<br>
            &gt; &gt; whole separate daemon for the foreseeable future
            just for an age<br>
            &gt; &gt; verification API would also be annoying.<br>
            &gt; &gt;<br>
            &gt; &gt; Another place the functionality could go is
            xdg-desktop-portal. This<br>
            &gt; &gt; one is a bit non-ideal for a couple of reasons;
            for one, the easiest<br>
            &gt; &gt; place to put the call would be in the Account
            portal, which returns<br>
            &gt; &gt; more information than the account's age bracket.
            This could<br>
            &gt; &gt; potentially be considered non-compliant with the
            law, as it states<br>
            &gt; &gt; that the operating system shall "[s]end only the
            minimum amount of<br>
            &gt; &gt; information necessary to comply with this title".
            This also comes<br>
            &gt; &gt; with the backporting disadvantages of an
            AccountsService-based<br>
            &gt; &gt; implementation.<br>
            &gt; &gt;<br>
            &gt; &gt; For this reason, I'd like to propose a "hybrid"
            approach; introduce<br>
            &gt; &gt; a new standard D-Bus interface,
            `org.freedesktop.AgeVerification1`,<br>
            &gt; &gt; that can be implemented by arbitrary applications
            as a distro sees<br>
            &gt; &gt; fit. AccountsService could implement this API so
            that newer versions<br>
            &gt; &gt; of distros will get the relevant features for
            free, while distros<br>
            &gt; &gt; with an AccountsService too old to contain the
            feature can<br>
            &gt; &gt; implement it themselves as a stop-gap solution.<br>
            &gt; &gt;<br>
            &gt; &gt; Taking inspiration from the File Manager D-Bus
            interface [5], I<br>
            &gt; &gt; think something like the following might work:<br>
            &gt; &gt;<br>
            &gt; &gt;      &lt;!DOCTYPE node PUBLIC "-//freedesktop//DTD
            D-BUS Object<br>
            &gt; &gt; Introspection 1.0//EN"<br>
            &gt; &gt; "<a
              href="http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"
              rel="noreferrer" target="_blank" moz-do-not-send="true">http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd</a>"&gt;<br>
            &gt; &gt; &lt;node
            name="/org/freedesktop/AgeVerification1"&gt; &lt;interface<br>
            &gt; &gt; name="org.freedesktop.AgeVerification1"&gt;
            &lt;method name="SetAge"&gt;<br>
            &gt; &gt;            &lt;arg type="s" name="User"
            direction="in"/&gt;<br>
            &gt; &gt;            &lt;arg type="u" name="YearsOfAge"
            direction="in"/&gt;<br>
            &gt; &gt;          &lt;/method&gt;<br>
            &gt; &gt;          &lt;method name="SetDateOfBirth"&gt;<br>
            &gt; &gt;            &lt;arg type="s" name="User"
            direction="in"/&gt;<br>
            &gt; &gt;            &lt;arg type="s" name="Date"
            direction="in"/&gt;<br>
            &gt; &gt;          &lt;/method&gt;<br>
            &gt; &gt;          &lt;method name='GetAgeBracket'&gt;<br>
            &gt; &gt;            &lt;arg type="s" name="User"
            direction="in"/&gt;<br>
            &gt; &gt;            &lt;arg type="u" name="AgeBracket"
            direction="out"/&gt;<br>
            &gt; &gt;          &lt;/method&gt;<br>
            &gt; &gt;        &lt;/interface&gt;<br>
            &gt; &gt;      &lt;/node&gt;<br>
            &gt; &gt;<br>
            &gt; &gt; * The 'User' argument would, in all instances, be
            expected to be the<br>
            &gt; &gt;    UNIX account username of the user in question.
            This user account<br>
            &gt; &gt; must not be a system account (i.e. its UID must
            fall between<br>
            &gt; &gt; UID_MIN and UID_MAX as defined by
            /etc/login.defs). If a user is<br>
            &gt; &gt; specified that does not exist or whose UID is out
            of range, these<br>
            &gt; &gt; methods will return the error<br>
            &gt; &gt;
            'org.freedesktop.AgeVerification1.Error.NoSuchUser'. If the<br>
            &gt; &gt; specified user is not the same as the user making
            the method call,<br>
            &gt; &gt; and the user making the method call is not root,
            these methods will<br>
            &gt; &gt; return the error<br>
            &gt; &gt;
            'org.freedesktop.AgeVerification1.Error.PermissionDenied'.<br>
            &gt; &gt; * The 'YearsOfAge' argument of the 'SetAge' method
            should be an<br>
            &gt; &gt;    unsigned integer specifying the age of the user
            in years at the<br>
            &gt; &gt; time of the method call. (The law specifically
            allows providing<br>
            &gt; &gt; simply an age value rather than a birth date if
            desired.)<br>
            &gt; &gt; * The 'Date' argument of the 'SetDateOfBirth'
            method should be a<br>
            &gt; &gt; string in ISO8601 format (i.e. YYYY-MM-DD)
            indicating the day on<br>
            &gt; &gt; which the user was born. If the argument is
            invalid, the method<br>
            &gt; &gt; will return the error<br>
            &gt; &gt;
            'org.freedesktop.AgeVerification1.Error.InvalidDate'.<br>
            &gt; &gt; * The 'AgeBracket' output argument of the
            'GetAgeBracket' method<br>
            &gt; &gt; will be an unsigned integer between 1 and 4
            inclusive, where 1<br>
            &gt; &gt; indicates that the user is under 13 years old, 2
            indicates that the<br>
            &gt; &gt; user is at least 13 and under 16 years old, 3
            indicates that the<br>
            &gt; &gt; user is at least 16 and under 18 years old, and 4
            indicates that<br>
            &gt; &gt; the user is 18 years old or older. If no age has
            been configured<br>
            &gt; &gt; for the user yet, the method will return the error<br>
            &gt; &gt;   
            'org.freedesktop.AgeVerification1.Error.AgeUndefined'.<br>
            &gt; &gt;<br>
            &gt; &gt; I propose that the exact way in which age
            information is stored by<br>
            &gt; &gt; the daemon should be left implementation-defined.
            For Kicksecure,<br>
            &gt; &gt; the way we implement it will almost certainly
            store only the age<br>
            &gt; &gt; bracket and require users to explicitly
            reconfigure their age once<br>
            &gt; &gt; they are old enough to move from one age bracket
            to another. Other<br>
            &gt; &gt; implementations may choose to store the date of
            birth or the age<br>
            &gt; &gt; and date on which the age was set so that they can
            automatically<br>
            &gt; &gt; update the age bracket as time passes. This
            interface will be<br>
            &gt; &gt; provided *on the system bus* (NOT the session
            bus!), and the D-Bus<br>
            &gt; &gt; service that provides these services should run as
            root. The file<br>
            &gt; &gt; containing the user-to-age mappings should be
            owned by root and<br>
            &gt; &gt; should not be world-readable, to prevent leaking
            the user's<br>
            &gt; &gt; specific age to malicious applications.<br>
            &gt; &gt;<br>
            &gt; &gt; Some things I did think about when writing the
            above but ultimately<br>
            &gt; &gt; decided to not propose:<br>
            &gt; &gt;<br>
            &gt; &gt; * Detailed permission gating for the
            'GetAgeBracket' method. The<br>
            &gt; &gt; only reason to do this would be for additional
            privacy, and<br>
            &gt; &gt;    privacy-conscious users can simply lie about
            their age or the<br>
            &gt; &gt; age of the intended user. There isn't anything in
            the law (that I<br>
            &gt; &gt; can tell) that prevents the user from just saying
            "I'm 18" when the<br>
            &gt; &gt; prompt appears and going with it. This would also
            be really<br>
            &gt; &gt; difficult to implement outside of the context of<br>
            &gt; &gt; xdg-desktop-portal, and would probably only work
            with sandboxed<br>
            &gt; &gt; apps if it was implemented that way.<br>
            &gt; &gt; * UX for actually requesting the age from the
            user. IMO this is out<br>
            &gt; &gt; of scope for FreeDesktop; individual distros
            should see to it that<br>
            &gt; &gt; they prompt for the user's age or birth date at
            "account setup"<br>
            &gt; &gt; (whatever that happens to be defined as for the
            distro in<br>
            &gt; &gt; question), nudge the user to provide the
            information later on for<br>
            &gt; &gt; existing installations, etc. Furthermore, this
            mechanism needs to<br>
            &gt; &gt; work even on CLI-only installs and maybe even on
            server installs,<br>
            &gt; &gt; depending on how one defines "general purpose
            computing device" (as<br>
            &gt; &gt; specified by the law in question), so defining any
            specific UX is<br>
            &gt; &gt; likely infeasible. (If this is required on
            servers, end-users will<br>
            &gt; &gt; probably want to auto-provision the age
            information somehow, and<br>
            &gt; &gt; specifying how to do that in a
            distribution-agnostic way is<br>
            &gt; &gt; impossible given that Ubuntu uses cloud-init,
            Fedora uses Kickstart<br>
            &gt; &gt; and Ignition, etc.)<br>
            &gt; &gt; * Omitting the 'SetDateOfBirth' method. It can be
            lived without<br>
            &gt; &gt;    legally, but without the method, it becomes
            difficult for<br>
            &gt; &gt; software that already records the user's date of
            birth to<br>
            &gt; &gt; accurately implement automatic age bracket
            adjustment as time<br>
            &gt; &gt; passes. This isn't a feature Kicksecure would use,
            but it's a<br>
            &gt; &gt; feature some projects might be interested in.<br>
            &gt; &gt;<br>
            &gt; &gt; Thanks for taking a look at this.<br>
            &gt; &gt;<br>
            &gt; &gt; --<br>
            &gt; &gt; Aaron<br>
            &gt; &gt;<br>
            &gt; &gt; [1]<br>
            &gt; &gt; <a
href="https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=202520260AB1043"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=202520260AB1043</a><br>
            &gt; &gt; [2] <a
              href="https://leg.colorado.gov/bill_files/110990/download"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://leg.colorado.gov/bill_files/110990/download</a>
            [3]<br>
            &gt; &gt; <a href="https://www.kicksecure.com/"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://www.kicksecure.com/</a>
            [4] <a href="https://www.whonix.org/" rel="noreferrer"
              target="_blank" moz-do-not-send="true">https://www.whonix.org/</a><br>
            &gt; &gt; [5]<br>
            &gt; &gt; <a
href="https://www.freedesktop.org/wiki/Specifications/file-manager-interface/"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://www.freedesktop.org/wiki/Specifications/file-manager-interface/</a><br>
            &gt; &gt;  <br>
            &gt; <br>
            &gt; By definition, not a Debian or Ubuntu problem: <br>
            &gt; <a
              href="https://www.merriam-webster.com/dictionary/vendor"
              rel="noreferrer" target="_blank" moz-do-not-send="true">https://www.merriam-webster.com/dictionary/vendor</a><br>
            <br>
            I may have been incorrectly imprecise; the law linked says
            that "an<br>
            operating system provider shall" do the things needed to
            comply with<br>
            the title, and defines an operating system provider as "a
            person or<br>
            entity that develops, licenses, or controls the operating
            system<br>
            software on a computer, mobile device, or any other general
            purpose<br>
            computing device." "Vendor" is a term I mistakenly used, as
            far as I<br>
            can tell the law does not exclude operating systems that are
            offered<br>
            for free. Again though, as I stated, I am not a lawyer, so
            perhaps I'm<br>
            misunderstanding the meaning of the definition of "operating
            system<br>
            provider".<br>
            <br>
            --<br>
            Aaron<br>
          </blockquote>
        </div>
      </div>
    </blockquote>
    The bill is Assembly Bill 1043 (AB 1043), the Digital Age Assurance
    Act.  Newsom signed this bill into law on October 13, 2025, and it
    is set to take effect on January 1, 2027.<br>
<a class="moz-txt-link-freetext" href="https://reason.com/2026/03/04/computer-scientists-caution-against-internet-age-verification-mandates/">https://reason.com/2026/03/04/computer-scientists-caution-against-internet-age-verification-mandates/</a><br>
    <br>
    Actual language:<br>
<a class="moz-txt-link-freetext" href="https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=202520260AB1043">https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=202520260AB1043</a><br>
    1798.500(g) “Operating system provider” means a person or entity
    that develops, licenses, or controls the operating system software
    on a computer, mobile device, or any other general purpose computing
    device.<br>
    and 1798.501. (a) An operating system provider shall..."<br>
    <br>
    But wait...  There will be litigation:<br>
    ...Because "proving an operating system" is an act, generally, and
    not primarily speech, any argument is going to have to be an "as
    applied" argument. And so the argument is that providing free
    software is a speech act and not primarily a commercial act, so that
    "as applied" to Debian the law violates the 1st Amendment of the US
    Constitution.  The California Constitution provides even broader
    free speech protections than the First Amendment, I am told. I
    understand that California courts have long recognized that computer
    code is protected speech.  As applied to Debian, it seems to violate
    the US Contracts Clause or interfere with the GPL (General Public
    License).<br>
    <br>
    I am not a California lawyer, but it seems there is plenty to fight
    about.  OTOH who wants to spend money on that?<br>
    Vince Heuser<br>
    Louisville KY.<br>
    <br>
  </body>
</html>

--------------E518E63579840BEE0894E9C9--