|
| 1 | + |
| 2 | +.. _governance: |
| 3 | + |
| 4 | +=========================================== |
| 5 | +Scikit-learn governance and decision-making |
| 6 | +=========================================== |
| 7 | + |
| 8 | +The purpose of this document is to formalize the governance process used by the |
| 9 | +scikit-learn project, to clarify how decisions are made and how the various |
| 10 | +elements of our community interact. |
| 11 | +This document establishes a decision-making structure that takes into account |
| 12 | +feedback from all members of the community and strives to find consensus, while |
| 13 | +avoiding any deadlocks. |
| 14 | + |
| 15 | +This is a meritocratic, consensus-based community project. Anyone with an |
| 16 | +interest in the project can join the community, contribute to the project |
| 17 | +design and participate in the decision making process. This document describes |
| 18 | +how that participation takes place and how to set about earning merit within |
| 19 | +the project community. |
| 20 | + |
| 21 | +Roles And Responsibilities |
| 22 | +========================== |
| 23 | + |
| 24 | +Contributors |
| 25 | +------------ |
| 26 | +Contributors are community members who contribute in concrete ways to the |
| 27 | +project. Anyone can become a contributor, and contributions can take many forms |
| 28 | +– not only code – as detailed in the `contributors guide <contributing>`_. |
| 29 | + |
| 30 | +Core developers |
| 31 | +--------------- |
| 32 | +Core developers are community members who have shown that they are dedicated to |
| 33 | +the continued development of the project through ongoing engagement with the |
| 34 | +community. They have shown they can be trusted to maintain Scikit-learn with |
| 35 | +care. Being a core developer allows contributors to more easily carry on |
| 36 | +with their project related activities by giving them direct access to the |
| 37 | +project’s repository and is represented as being an organization member on the |
| 38 | +scikit-learn `GitHub organization <https://github.com/orgs/scikit-learn/people>`_. |
| 39 | +Core developers are expected to review code |
| 40 | +contributions, can merge approved pull requests, can cast votes for and against |
| 41 | +merging a pull-request, and can be involved in deciding major changes to the |
| 42 | +API. |
| 43 | + |
| 44 | +New core developers can be nominated by any existing core developers. Once they |
| 45 | +have been nominated, there will be a vote by the current core developers. |
| 46 | +Voting on new core developers is one of the few activities that takes place on |
| 47 | +the project's private management list. While it is expected that most votes |
| 48 | +will be unanimous, a two-thirds majority of the cast votes is enough. The vote |
| 49 | +needs to be open for at least 1 week. |
| 50 | + |
| 51 | +Core developers that have not contributed to the project (commits or GitHub |
| 52 | +comments) in the past 12 months will be asked if they want to become emeritus |
| 53 | +core developers and recant their commit and voting rights until they become |
| 54 | +active again. The list of core developers, active and emeritus (with dates at |
| 55 | +which they became active) is public on the scikit-learn website. |
| 56 | + |
| 57 | +Technical Committee |
| 58 | +------------------- |
| 59 | +The Technical Committee (TC) members are core developers who have additional |
| 60 | +responsibilities to ensure the smooth running of the project. TC members are expected to |
| 61 | +participate in strategic planning, and approve changes to the governance model. |
| 62 | +The purpose of the TC is to ensure a smooth progress from the big-picture |
| 63 | +perspective. Indeed changes that impact the full project require a synthetic |
| 64 | +analysis and a consensus that is both explicit and informed. In cases that the |
| 65 | +core developer community (which includes the TC members) fails to reach such a |
| 66 | +consensus in the required time frame, the TC is the entity to resolve the |
| 67 | +issue. |
| 68 | +Membership of the TC is by nomination by a core developer. A nomination will |
| 69 | +result in discussion which cannot take more than a month and then a vote by |
| 70 | +the core developers which will stay open for a week. TC membership votes are |
| 71 | +subject to a two-third majority of all cast votes as well as a simple majority |
| 72 | +approval of all the current TC members. TC members who do not actively engage |
| 73 | +with the TC duties are expected to resign. |
| 74 | + |
| 75 | +The initial Technical Committee of scikit-learn consists of :user:`Alexandre Gramfort <agramfort>`, |
| 76 | +:user:`Olivier Grisel <ogrisel>`, :user:`Andreas Müller <amueller>`, :user:`Joel Nothman <jnothman>`, |
| 77 | +:user:`Hanmin Qin <qinhanmin2014>`, :user:`Gaël Varoquaux <GaelVaroquaux>`, and |
| 78 | +:user:`Roman Yurchak <rth>`. |
| 79 | + |
| 80 | +Decision Making Process |
| 81 | +======================= |
| 82 | +Decisions about the future of the project are made through discussion with all |
| 83 | +members of the community. All non-sensitive project management discussion takes |
| 84 | +place on the project contributors’ `mailing list <mailto:scikit-learn@python.org>`_ |
| 85 | +and the `issue tracker <https://github.com/scikit-learn/scikit-learn/issues>`_. |
| 86 | +Occasionally, sensitive discussion occurs on a private list. |
| 87 | + |
| 88 | +Scikit-learn uses a "consensus seeking" process for making decisions. The group |
| 89 | +tries to find a resolution that has no open objections among core developers. |
| 90 | +At any point during the discussion, any core-developer can call for a vote, which will |
| 91 | +conclude one month from the call for the vote. Any vote must be backed by a |
| 92 | +`SLEP <slep>`. If no option can gather two thirds of the votes cast, the |
| 93 | +decision is escalated to the TC, which in turn will use consensus seeking with |
| 94 | +the fallback option of a simple majority vote if no consensus can be found |
| 95 | +within a month. This is what we hereafter may refer to as “the decision making |
| 96 | +process”. |
| 97 | + |
| 98 | +Decisions (in addition to adding core developers and TC membership as above) |
| 99 | +are made according to the following rules: |
| 100 | + |
| 101 | +* **Minor Documentation changes**, such as typo fixes, or addition / correction of a |
| 102 | + sentence, but no change of the scikit-learn.org landing page or the “about” |
| 103 | + page: Requires +1 by a core developer, no -1 by a core developer (lazy |
| 104 | + consensus), happens on the issue or pull request page. Core developers are |
| 105 | + expected to give “reasonable time” to others to give their opinion on the pull |
| 106 | + request if they’re not confident others would agree. |
| 107 | + |
| 108 | +* **Code changes and major documentation changes** |
| 109 | + require +1 by two core developers, no -1 by a core developer (lazy |
| 110 | + consensus), happens on the issue of pull-request page. |
| 111 | + |
| 112 | +* **Changes to the API principles and changes to dependencies or supported |
| 113 | + versions** happen via a :ref:`slep` and follows the decision-making process outlined above. |
| 114 | + |
| 115 | +* **Changes to the governance model** use the same decision process outlined above. |
| 116 | + |
| 117 | + |
| 118 | +If a veto -1 vote is cast on a lazy consensus, the proposer can appeal to the |
| 119 | +community and core developers and the change can be approved or rejected using |
| 120 | +the decision making procedure outlined above. |
| 121 | + |
| 122 | +.. _slep: |
| 123 | + |
| 124 | +Enhancement proposals (SLEPs) |
| 125 | +============================== |
| 126 | +For all votes, a proposal must have been made public and discussed before the |
| 127 | +vote. Such proposal must be a consolidated document, in the form of a |
| 128 | +‘Scikit-Learn Enhancement Proposal’ (SLEP), rather than a long discussion on an |
| 129 | +issue. A SLEP must be submitted as a pull-request to |
| 130 | +`scikit-learn/enhancement_proposals <https://github.com/scikit-learn/enhancement_proposals/>`_ |
| 131 | +using the `SLEP template <https://github.com/scikit-learn/enhancement_proposals/blob/master/slep_template.rst>`_. |
0 commit comments