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

Marcia Wilbur <[email protected]> Mon, 6 Apr 2026 13:39:52 -0400
Newsgroups gmane.linux.debian.devel.legal,gmane.linux.xdg.devel,gmane.linux.debian.devel.general,gmane.linux.redhat.fedora.devel,gmane.linux.ubuntu.devel,gmane.linux.redhat.fedora.legal
Message-ID <CADp_D1_Qj4td4_NxAk2JpjO7WcDebG2HRtAJxetqZO4=qEWAmg@mail.gmail.com>
--000000000000265535064ece2836
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

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
=E2=80=9Coperating system provider=E2=80=9D.

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=E2=80=AFPM Aaron Rainbolt <[email protected]=
> wrote:

> On Sun, 1 Mar 2026 15:12:09 -0500
> "Vincent F. Heuser Jr." <[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", ">=3D 13 and < 16", ">=
=3D
> > > 16 and < 18", and ">=3D 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=3D"/org/freedesktop/AgeVerification1"> <interface
> > > name=3D"org.freedesktop.AgeVerification1"> <method name=3D"SetAge">
> > >            <arg type=3D"s" name=3D"User" direction=3D"in"/>
> > >            <arg type=3D"u" name=3D"YearsOfAge" direction=3D"in"/>
> > >          </method>
> > >          <method name=3D"SetDateOfBirth">
> > >            <arg type=3D"s" name=3D"User" direction=3D"in"/>
> > >            <arg type=3D"s" name=3D"Date" direction=3D"in"/>
> > >          </method>
> > >          <method name=3D'GetAgeBracket'>
> > >            <arg type=3D"s" name=3D"User" direction=3D"in"/>
> > >            <arg type=3D"u" name=3D"AgeBracket" direction=3D"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=3D2=
02520260AB1043
> > > [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
>

--000000000000265535064ece2836
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"auto">So, regarding the Operating system provider definition, i=
f I have software that creates backups and creates custom distros, am I con=
sidered an operating system provider?=C2=A0</div><div dir=3D"auto"><span st=
yle=3D"font-family:-apple-system,sans-serif">I Maintain a tool that enables=
 people to create their own operating systems and become an operating syste=
m provider, but in and of itself, I am not an =E2=80=9Coperating system pro=
vider=E2=80=9D.</span><br></div><div dir=3D"auto"><br></div><div dir=3D"aut=
o">That being said, of course, I am interested in this discussion so I may =
relay information to those operating system providers.</div><div dir=3D"aut=
o"><br></div><div dir=3D"auto">Marcia Wilbur=C2=A0</div><div><br><div class=
=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr=
">On Sun, Mar 1, 2026 at 3:44=E2=80=AFPM Aaron Rainbolt &lt;<a href=3D"mail=
to:[email protected]">[email protected]</a>&gt; wrote:<br></div><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #cc=
c solid;padding-left:1ex">On Sun, 1 Mar 2026 15:12:09 -0500<br>
&quot;Vincent F. Heuser Jr.&quot; &lt;<a href=3D"mailto:vheuser@heuserlawof=
fice.com" target=3D"_blank">[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&#39;s age via a=
n 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 l=
aw<br>
&gt; &gt; will go into effect January 1, 2027, it is no longer a draft. I d=
o<br>
&gt; &gt; quite a bit of work with an OS vendor (working with the Kicksecur=
e<br>
&gt; &gt; [3] and Whonix [4] projects), and we aren&#39;t particularly inte=
rested<br>
&gt; &gt; in blocking everyone in California and Colorado from using our<br=
>
&gt; &gt; OSes, so we&#39;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 &quot;good faith eff=
ort to<br>
&gt; &gt; comply with [the] title, taking into consideration available<br>
&gt; &gt; technology&quot;, 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 &quot;operating sys=
tem&quot;<br>
&gt; &gt; (I&#39;m guessing this would correspond to a Linux distribution, =
not an<br>
&gt; &gt; OS kernel or userland) request the user&#39;s age or date of birt=
h at<br>
&gt; &gt; &quot;account setup&quot;. The OS is also expected to allow users=
 to set the<br>
&gt; &gt; user&#39;s age if they didn&#39;t already provide it (because the=
 OS was<br>
&gt; &gt; installed before the law went into effect), and it needs to provi=
de<br>
&gt; &gt; an API somewhere so that app stores and application distribution<=
br>
&gt; &gt; websites can ask the OS &quot;what age bracket does this user fal=
l<br>
&gt; &gt; into?&quot; Four age brackets are defined, &quot;&lt; 13&quot;, &=
quot;&gt;=3D 13 and &lt; 16&quot;, &quot;&gt;=3D<br>
&gt; &gt; 16 and &lt; 18&quot;, and &quot;&gt;=3D 18&quot;. It looks like t=
he 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<b=
r>
&gt; &gt; installs, how to handle VMs, whether the law is even applicable i=
f<br>
&gt; &gt; the primary user is over 18 since the law ridiculously defines a<=
br>
&gt; &gt; user as &quot;a child&quot; while also defining &quot;a child&quo=
t; as anyone under the<br>
&gt; &gt; age of 18, etc.), but that&#39;s what we&#39;re given to deal wit=
h.<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 AccountsServic=
e<br>
&gt; &gt; integrated into their software repositories, or how to backport t=
he<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,<b=
r>
&gt; &gt; 2033, and we don&#39;t yet know if Debian will care enough about<=
br>
&gt; &gt; California&#39;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<b=
r>
&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. T=
his<br>
&gt; &gt; one is a bit non-ideal for a couple of reasons; for one, the easi=
est<br>
&gt; &gt; place to put the call would be in the Account portal, which retur=
ns<br>
&gt; &gt; more information than the account&#39;s age bracket. This could<b=
r>
&gt; &gt; potentially be considered non-compliant with the law, as it state=
s<br>
&gt; &gt; that the operating system shall &quot;[s]end only the minimum amo=
unt of<br>
&gt; &gt; information necessary to comply with this title&quot;. 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&#39;d like to propose a &quot;hybrid&quot; app=
roach; 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 see=
s<br>
&gt; &gt; fit. AccountsService could implement this API so that newer versi=
ons<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<b=
r>
&gt; &gt; think something like the following might work:<br>
&gt; &gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 &lt;!DOCTYPE node PUBLIC &quot;-//freedesktop=
//DTD D-BUS Object<br>
&gt; &gt; Introspection 1.0//EN&quot;<br>
&gt; &gt; &quot;<a href=3D"http://www.freedesktop.org/standards/dbus/1.0/in=
trospect.dtd" rel=3D"noreferrer" target=3D"_blank">http://www.freedesktop.o=
rg/standards/dbus/1.0/introspect.dtd</a>&quot;&gt;<br>
&gt; &gt; &lt;node name=3D&quot;/org/freedesktop/AgeVerification1&quot;&gt;=
 &lt;interface<br>
&gt; &gt; name=3D&quot;org.freedesktop.AgeVerification1&quot;&gt; &lt;metho=
d name=3D&quot;SetAge&quot;&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;arg type=3D&quot;s&q=
uot; name=3D&quot;User&quot; direction=3D&quot;in&quot;/&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;arg type=3D&quot;u&q=
uot; name=3D&quot;YearsOfAge&quot; direction=3D&quot;in&quot;/&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;/method&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;method name=3D&quot;SetDate=
OfBirth&quot;&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;arg type=3D&quot;s&q=
uot; name=3D&quot;User&quot; direction=3D&quot;in&quot;/&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;arg type=3D&quot;s&q=
uot; name=3D&quot;Date&quot; direction=3D&quot;in&quot;/&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;/method&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;method name=3D&#39;GetAgeBr=
acket&#39;&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;arg type=3D&quot;s&q=
uot; name=3D&quot;User&quot; direction=3D&quot;in&quot;/&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;arg type=3D&quot;u&q=
uot; name=3D&quot;AgeBracket&quot; direction=3D&quot;out&quot;/&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;/method&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;/interface&gt;<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 &lt;/node&gt;<br>
&gt; &gt;<br>
&gt; &gt; * The &#39;User&#39; argument would, in all instances, be expecte=
d to be the<br>
&gt; &gt;=C2=A0 =C2=A0 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; &#39;org.freedesktop.AgeVerification1.Error.NoSuchUser&#39;. If t=
he<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 wi=
ll<br>
&gt; &gt; return the error<br>
&gt; &gt; &#39;org.freedesktop.AgeVerification1.Error.PermissionDenied&#39;=
.<br>
&gt; &gt; * The &#39;YearsOfAge&#39; argument of the &#39;SetAge&#39; metho=
d should be an<br>
&gt; &gt;=C2=A0 =C2=A0 unsigned integer specifying the age of the user in y=
ears at the<br>
&gt; &gt; time of the method call. (The law specifically allows providing<b=
r>
&gt; &gt; simply an age value rather than a birth date if desired.)<br>
&gt; &gt; * The &#39;Date&#39; argument of the &#39;SetDateOfBirth&#39; met=
hod 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<b=
r>
&gt; &gt; will return the error<br>
&gt; &gt; &#39;org.freedesktop.AgeVerification1.Error.InvalidDate&#39;.<br>
&gt; &gt; * The &#39;AgeBracket&#39; output argument of the &#39;GetAgeBrac=
ket&#39; 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 t=
he<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;=C2=A0 =C2=A0 &#39;org.freedesktop.AgeVerification1.Error.AgeUndef=
ined&#39;.<br>
&gt; &gt;<br>
&gt; &gt; I propose that the exact way in which age information is stored b=
y<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 onc=
e<br>
&gt; &gt; they are old enough to move from one age bracket to another. Othe=
r<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-Bu=
s<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<b=
r>
&gt; &gt; should not be world-readable, to prevent leaking the user&#39;s<b=
r>
&gt; &gt; specific age to malicious applications.<br>
&gt; &gt;<br>
&gt; &gt; Some things I did think about when writing the above but ultimate=
ly<br>
&gt; &gt; decided to not propose:<br>
&gt; &gt;<br>
&gt; &gt; * Detailed permission gating for the &#39;GetAgeBracket&#39; meth=
od. The<br>
&gt; &gt; only reason to do this would be for additional privacy, and<br>
&gt; &gt;=C2=A0 =C2=A0 privacy-conscious users can simply lie about their a=
ge or the<br>
&gt; &gt; age of the intended user. There isn&#39;t anything in the law (th=
at I<br>
&gt; &gt; can tell) that prevents the user from just saying &quot;I&#39;m 1=
8&quot; 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<b=
r>
&gt; &gt; apps if it was implemented that way.<br>
&gt; &gt; * UX for actually requesting the age from the user. IMO this is o=
ut<br>
&gt; &gt; of scope for FreeDesktop; individual distros should see to it tha=
t<br>
&gt; &gt; they prompt for the user&#39;s age or birth date at &quot;account=
 setup&quot;<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 &quot;general purpose computing devi=
ce&quot; (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 wil=
l<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 Kicksta=
rt<br>
&gt; &gt; and Ignition, etc.)<br>
&gt; &gt; * Omitting the &#39;SetDateOfBirth&#39; method. It can be lived w=
ithout<br>
&gt; &gt;=C2=A0 =C2=A0 legally, but without the method, it becomes difficul=
t for<br>
&gt; &gt; software that already records the user&#39;s date of birth to<br>
&gt; &gt; accurately implement automatic age bracket adjustment as time<br>
&gt; &gt; passes. This isn&#39;t a feature Kicksecure would use, but it&#39=
;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=3D"https://leginfo.legislature.ca.gov/faces/billTextClien=
t.xhtml?bill_id=3D202520260AB1043" rel=3D"noreferrer" target=3D"_blank">htt=
ps://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=3D202520=
260AB1043</a><br>
&gt; &gt; [2] <a href=3D"https://leg.colorado.gov/bill_files/110990/downloa=
d" rel=3D"noreferrer" target=3D"_blank">https://leg.colorado.gov/bill_files=
/110990/download</a> [3]<br>
&gt; &gt; <a href=3D"https://www.kicksecure.com/" rel=3D"noreferrer" target=
=3D"_blank">https://www.kicksecure.com/</a> [4] <a href=3D"https://www.whon=
ix.org/" rel=3D"noreferrer" target=3D"_blank">https://www.whonix.org/</a><b=
r>
&gt; &gt; [5]<br>
&gt; &gt; <a href=3D"https://www.freedesktop.org/wiki/Specifications/file-m=
anager-interface/" rel=3D"noreferrer" target=3D"_blank">https://www.freedes=
ktop.org/wiki/Specifications/file-manager-interface/</a><br>
&gt; &gt;=C2=A0 <br>
&gt; <br>
&gt; By definition, not a Debian or Ubuntu problem: <br>
&gt; <a href=3D"https://www.merriam-webster.com/dictionary/vendor" rel=3D"n=
oreferrer" target=3D"_blank">https://www.merriam-webster.com/dictionary/ven=
dor</a><br>
<br>
I may have been incorrectly imprecise; the law linked says that &quot;an<br=
>
operating system provider shall&quot; do the things needed to comply with<b=
r>
the title, and defines an operating system provider as &quot;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.&quot; &quot;Vendor&quot; 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&#39;m<=
br>
misunderstanding the meaning of the definition of &quot;operating system<br=
>
provider&quot;.<br>
<br>
--<br>
Aaron<br>
</blockquote></div></div>

--000000000000265535064ece2836--