Maintainers, teams, Uploaders, DMs, DDs, etc.
It's evident from recent conversations in various places that we are
confused about:
- what Maintainer and Uploaders mean
- who is entitled to do what when
- in some cases, the distinction between ability and permission
etc.
I'm going to try to set out my understanding of the current best
practices, with some open questions and suggestions for improvement.
I'm proposing this as an alternative to the existing plan to change
the way DM permission works.
But firstly I want to explain an important principle: the distinction
between ability and permission. In any complex collective endeavour,
there will be both access controls that actually prevent some people
from taking certain acts, and ideas (whether stated formally and
clearly, or informally and vaguely) about what should be done when and
by whom.
Access restrictions are annoying to implement and work with so they
should be minimised where possible - but they are a necessary backstop
to prevent abuse. In general access restrictions need to be flexible
enough that it is possible to revoke the permissions of someone who is
using their technical ability in ways that are considered undesirable
by whoever is supposed to be in charge. But, provided that there are
sufficient facilities for reverting misdeeds and mistakes, they do not
need to be more complex than that.
So for example, DDs have enormous theoretical power but there are
strong and well documented social controls on how they should exercise
that. I think as a matter of principle that the same principle should
apply to DMs: it is easy to remove a misbehaving DM from Uploaders.
So it is not necessary to have technical measures that prevent a DM
mentioned in Uploaders from violating the package's uploading rules,
bypassing review processes, or whatever. Instead, when a package team
or lead maintainer accepts someone into Uploaders we should clearly
communicate to the new uploader what is expected of them, and then we
should trust them to do as we have asked.
So firstly, let me go through the actual places where we as a project
store information about the maintenance structure of a package:
* Maintainer field
* Uploaders field
* DM-Upload-Allowed field
* The DD keyring
* The DM keyring
* Team membership lists kept elsewhere (eg, a team webpage or
wiki page, mailing list membership, or whatever)
* Team practices/processes/policy agreements, documents, etc.
(which might include anything from informal private emails to
formal process and governance documents)
The questions that need to be answered for a package are:
* Who is (supposedly) doing most of the work.
* Who makes final decisions about the package; this includes
arbitraring disputes, delegating authority, revoking such
delegation, etc.
The identity of the people with this responsibility needs to be
accessible to the project as a whole so that people who are
unfamiliar with the package can see whose opinions are definitive.
This information does not normally need to be used automatically by
the project's support infrastructure.
I'm going to call these people the maintainers of the package.
They might be DDs, DMs, or contributors without a key in the
keyring.
Currently this information is sometimes in the Maintainer field;
sometimes in both the Uploaders and Maintainers fields; and
sometimes somewhere else completely (eg a team wiki page).
Normally the maintainers would be the people who are doing most of
the work. Sometimes we have provisional maintainers who are
neither DD or DM; in those cases the maintainer works under the
supervision of their sponsors.
c. Who is entitled to prepare a non-NMU upload of the package.
This information needs to be accessible to the project as a whole.
Particularly a potential drive-by sponsor needs to know whether the
upload they are sponsoring is by someone entitled to prepare such
an upload. And the archive software needs to know whether to
permit an upload.
Currently this information is sometimes in the Maintainer field;
sometimes in both the Uploaders and Maintainers fields; and
sometimes somewhere else completely (eg a team wiki page).
d. Who is morally entitled to perform various other actions with
respect to the package, such as manipulating bugs, committing to
its vcs, etc.
This information does not need to be available to people outside
the team involved with the package. If disputes arise they can be
dealt with by the maintainers, and if necessary the maintainers can
invoke various enforcement mechanisms to stop misbheaviour.
e. What process should someone preparing a non-NMU upload follow?
Eg, is there a VCS that everything should be committed to ? Are
non-emergency uploads supposed to be reviewed somewhere ? Are some
of the people who are entitled to upload supposed only to do so
after explicit indication by someone more senior that they should
do so ?
Again this information doesn't generally need to be available to
people outside the packaging team. However, if there are
significant and important processes that should be followed, a
drive-by sponsor should be able to find them easily so that they
can double-check that the person preparing the upload (the sponsee)
seems to be doing the right thing.
Currently this information is, if available at all, to be found on
various team wiki pages etc. which may be hard to discover.
f. Are there specific things that an NMUer should watch out for ?
Currently we have no general way of finding these. The closes is
the LowThresholdNmu wiki page.
g. For a package in alioth collab-maint, how is the VCS workflow
organised and who is expected to push to which branches ?
Currently we have no general way of finding these.
As an example of some common patterns:
* Individual DD or DM maintainer, perhaps with co-maintainers. The
single individual principal maintainer is listed in Maintainer and
makes all decisions. Co-maintainers are listed in Uploaders and
may make their own uploads and may in general make decisions where
not contradicted by the principal maintainer. There may or may not
be any information for NMUers.
* Individual non-DM maintainer, co-maintainers including at least one
usual DD or DM sponsor. The maintainer is listed in Maintainer;
the usual sponsor(s) are listed in Uploaders. The principal
maintainer makes decisons as before; however their authority is
weakened by their inability to upload without sponsorship. In
practice this means that the principal maintainer does the work but
the co-maintainers have supervisory authority.
* Non-DM maintainer(s), drive-by sponsor. The maintainer(s) are
listed in Maintainer and Uploaders and makes all decisions in the
first instance (perhaps with the Maintainer having more authority
than the Uploaders), but needs the approval of a sponsor to upload.
The sponsor is supposed to sanity-check the maintainer's work, to
advise, etc., and generally to supervise, but does not take on
primary responsibility.
* Team maintenance. The team (a mailing list address) is listed in
Maintainers. The formal membership of the maintenance team - ie,
who can make decisions - may be discerned by reading some wiki or
web page, or might be visible by looking at Uploaders.
People outside the team may have some difficulty seeing who is in
charge. But such teams at least don't normally need external
sponsorship for uploads.
I think the key problems we have here are:
* The relative seniority of members of Maintainer vs Uploaders is not
always clear. This is complicated by the fact that it is not
possible to list more than one person in Maintainers.
* It can be difficult for non-team members to find out who is in the
maintenance team for a team maintained package and what they are
supposed to be allowed to do.
* Our documentation (eg the dev ref) does not always clearly spell
out the sociopolitical meanings of the technical data fields.
* The treatment of maintainers/uploaders wrt package email (eg, from
the bts and pts) is inconsistent, so that if your status changes
you need to fiddle with a lot of email subscriptions. This is an
ongoing subject of discussion but we need to understand what we
think the technical data fields are and what they mean before
making changes to the email machinery.
* We do not have a common understanding of who is entitled to hijack
a package and when they are entitled to do so. This is a hard and
controversial problem which deserves considering on its own, and
will be a distraction for what I'm saying in this message.
I think the first three can be fixed relatively simply. I propose the
following changes:
1. Change the definition of the Maintainer field to permit multiple
entries.
There are currently four different entities (3 humans and a
corporation) which use a comma in a Maintainer field, in only 13
different source packages. None of these commas are essential to
comprehension (indeed in principle those same entities might have
to have variants of their identification without commas, suitable
for use in Uploaders). All but one of these Maintainer fields are
already violations of policy 5.6.2 which says that the Maintainer
field must be in "RFC822 format" (a bit vague, but clearly excludes
bare commas).
So this is an easy change.
2. Explicitly state that being listed in Uploaders does not in itself
imply general authority over the package; general authority is
reserved to maintainers.
Uploaders merely implies authority to prepare an new version, and
if the listed person is capable of doing so, upload it.
Explicitly state that the authority of Uploaders to prepare and
upload is subject always to the contents of debian/README.maintain.
3. Introduce a new conventional location for information about a
maintenance team and a package's maintenance practices,
debian/README.maintain
in the source package.
Explicitly state that this file, if it exists, should be consulted
by anyone who is preparing or sponsoring a non-NMU upload.
Explicitly state that the file may contain references to external
wiki or web pages, or may contain information itself.
Add a warning that the version in unstable should be regarded as
definitive, so that someone working in another suite may need to
check the sid version of the source package.
Add to the PTS and QA pages a convenient link to the most recent
version of the file.
4. State that if a package's Maintainer field contains any entity that
is not an individual, the file debian/README.maintain should exist
and contain or refer to information sufficient to determine who the
maintainers of the package are.
Deprecate Maintainer fields which contain a mixture of humans and
other things.
5. Introduce a new conventional location for information useful to
NMUers,
debian/README.nmu
Explicitly state that someone preparing or sponsoring an NMU should
consult this file. Statements in this file may supplement, but do
not overrule, the NMU criteria established by the Developers'
Reference, by the release team, or elsewhere.
Explicitly state that NMUers are NOT necessarily required to
consult README.maintain.
I think this should be sufficient for everyone to implement whatever
maintenance practices (and corresponding relationships between
people) they think best.
My point 2 implies a change to way Uploaders and Maintainer is used by
some packages, but for a package whose Maintainer has already told
their Uploader that they are a co-maintainer the co-maintainer already
has the appropriate delegated authority. And since none of the
technical access control machinery will make decisions differently,
this slight anomaly in the metadata describing who the maintainers are
can be fixed at the maintainers' leisure.
It doesn't seem to me that there is any need to change the archive
machinery to handle DM permissions differently.
Thanks,
Ian.
Reply to:
- Follow-Ups:
- Re: Maintainers, teams, Uploaders, DMs, DDs, etc.
- From: "Bernhard R. Link" <brlink@debian.org>
- Re: Maintainers, teams, Uploaders, DMs, DDs, etc.
- From: Arno Töll <arno@debian.org>
- Re: Maintainers, teams, Uploaders, DMs, DDs, etc.
- From: Gergely Nagy <algernon@balabit.hu>
- Re: Maintainers, teams, Uploaders, DMs, DDs, etc.
- From: Ansgar Burchardt <ansgar@debian.org>