Samba maintainers
-----------------

This file lists the maintainers for subsystems in Samba. Please see
the end of the file for information on how the maintainers system
works. If you can't work out who the maintainer is for some code,
please ask on the samba-technical list or on the samba-technical IRC
channel.


=======================================================================

directory: lib/tevent/
maintainers:
         Stefan Metzmacher <metze@samba.org>
policy:
         All commits require review by the maintainer.

         If no maintainer is available for longer than a week
         discussion on the samba-technical list and review by 2
         Samba-Team members is needed (e.g. Andrew Tridgell <tridge@samba.org>
         and Volker Lendecke <vl@samba.org>).

         Larger changes need also discussion on the samba-technical list
         and review by all maintainers.

directory: lib/tsocket/
maintainers:
         Stefan Metzmacher <metze@samba.org>
policy:
         All commits require review by the maintainer.

         If no maintainer is available for longer than a week
         discussion on the samba-technical list and review by 2
         Samba-Team members is needed.

         Larger changes need also discussion on the samba-technical list
         and review by all maintainers.

files: buildtools/**, source4/**/wscript
maintainers:
         Andrew Tridgell <tridge@samba.org>
         Jelmer Vernooij <jelmer@samba.org>
policy:
         small commits to master allowed if all existing tests
         pass. Larger commits require discussion on the samba-technical
         list and review by the maintainer

files: lib/tdb
maintainers:
         Rusty Russell <rusty@samba.org>
policy:
         Mail/CC changes to the maintainer, commit the changes
         unless the maintainer objects.

files: lib/talloc
maintainers:
         Andrew Tridgell <tridge@samba.org>
         Rusty Russell <rusty@samba.org>
policy:
         small commits to master allowed if all existing tests
         pass. Larger commits require discussion on samba-technical
         list and review by the maintainer

files: lib/tevent/py*, lib/talloc/py*, lib/ldb/py*, lib/tdb/py*
maintainers:
         Jelmer Vernooij <jelmer@samba.org>
policy:
         Larger commits require pre-push review by the maintainer or
         one of the maintainers of the containing subsystem.

         Other non-trivial (typo, etc) commits require pre- or post-push review by the
         maintainer or one of the maintainers of the containing subsystem.

files: lib/ccan
maintainers:
         Rusty Russell <rusty@samba.org>
policy:
         Please ping me when changes made, so I can sync with CCAN project.

files: libcli/dns
maintainers:
         Kai Blin <kai@samba.org>
policy:
         Mail/CC changes to the maintainer, commit the changes
         unless the maintainer objects.

=======================================================================

Samba Maintainers System
------------------------

The Samba project has adopted a maintainers system, with the following
approach:

 - we have created a new 'MAINTAINERS.txt' file in the root of the git
   tree

 - that file will contain a list of subsystems, and along with each
   subsystem a list of maintainers

 - subsystems may be subdirectories, or logical groups of files (for
   example "build system" or "selftest" could be subsystems that span
   multiple directories)

 - if a subsystem is not listed in the MAINTAINERS.txt file, then this
   maintainers proposal does not apply to that subsystem. The previous
   Samba development methods apply to unlisted subsystems.

 - when we first create the MAINTAINERS.txt it will be empty, thus on
   the first day of adoption there is no actual change to our
   development practices

 - we will add subsystems to the MAINTAINERS.txt file via consensus
   within the Samba Team. This means that someone would propose
   themselves, or another team member, as a subsystem maintainer, and
   if there are no objections then they can push a change to the
   maintainers file after a couple of days waiting for replies. If
   there is an existing maintainer for that subsystem then at minimum
   the person proposing should wait for a positive ack from the
   previous maintainer.

 - a typical subsystem declaration would be:

      directory: /libds
      maintainers:
                   Andrew Bartlett <abartlet@samba.org>
                   Andrew Tridgell <tridge@samba.org>
      policy:
         small commits to master allowed if all existing tests
         pass. Larger commits require discussion on samba-technical
         list and review by the maintainer

 - the maintainers for a subsystem may update the policy for that
   subsystem at any time by pushing a commit to the MAINTAINERS.txt
   file. Significant changes should also be sent to the
   samba-technical list to ensure that all developers are aware of the
   policy change

 - a subsystem may have multiple maintainers, and it is expected that
   this will be the case for many of our subsystems.

 - a maintainer may delegate responsibility to someone else for a
   period of time (such as during rapid development or when the
   maintainer is away). A maintainer may also appoint a backup
   maintainer. These changes should be noted in the maintainers file,
   and removed when no longer relevent.

 - maintainer handover would happen by agreement between the old and
   new maintainer, and is signified by a commit to the MAINTAINERS.txt
   file. If agreement cannot be reached then we can resolve the
   disagreement using discussions on the team list. If agreement still
   can't be reached then the maintainer won't change.

What does it mean to be a maintainer?
-------------------------------------

If you are a maintainer for a subsystem then you have some additional
rights and responsibilies for that code. Specifically:

 - you should make time to review any proposed changes to any
   subsystems that you maintain. You should then provide feedback on
   proposed changes or sign off on the changes once you are happy with
   them.

 - you may choose the policy for the subsystems you maintain. That
   policy could be a permissive one, where you allow for small changes
   without review, or it could be a strict one, where you only allow
   reviewed changes to be pushed.

 - being a maintainer for a subsystem does not override the "right of
   veto" of other team members for technical objections. See the
   "right of veto" section below for more information.

 - the maintainers can set the developmental direction of the
   subsystem, but should strive to achieve concensus where possible
   with other team members for the benefit of the whole
   project.

Note that if you set a permissive policy on your subsystem, so that
small changes may be pushed without review, you are still responsible
for reviewing changes if someone specifically asks you to review a
patch.

Try to reuse policy wording
---------------------------

It would be good if we end up with only a few sets of policy wording,
rather than a completely different policy for each subsystem. To try
to achieve that, maintainers should try to re-use an existing policy
wording if possible.


The right of veto
-----------------

Over the last few years the Samba Team has started to use a +1/-1
voting system, which was inspired by the Apache voting system for
technical issues (see http://www.apache.org/foundation/voting.html).

For the maintainers proposal to work, I think we need to ensure that
everyone understands what a -1 "veto" vote means on a technical issue.

For purely technical issues, the +1/-1 voting system should not be a
"most votes wins" system. Instead a single -1 vote is supposed to
override any number of +1 votes, so a -1 vote is a "veto", and all
team members have the right to give a -1 veto vote on any purely
technical issue.

Along with the right to give a -1 veto vote comes the responsibility
to backup that veto with a technical argument, and the willingness to
then defend your argument in any subsequent discussions and to work
with the patch proposer to find a solution. If you do not backup your
-1 veto vote, or you are unwilling on unable to participate in any
discussions that arise from that veto, then the veto vote may be
disregarded.

Note that a veto is supposed to be used only for purely technical
reasons, so for example pointing out a security concern with a change,
or pointing out that the code may segfault or cause a regression of
functionality.
