Manim governance

Last Modified on January 03, 2022

Abstract

This draft proposes a new formal governance process for Manim based around a steering council. The council has broad authority, which they seek to exercise as rarely as possible.

Current steering council

The current steering council consists of:

  • Benjamin Hackl
  • Naveen M K
  • Darylgolden

Per the results of the vote tracked below.

The core team consists of those in the "core" team on GitHub.

Specification

The steering council

Composition

The steering council is a 3-person committee.

Mandate

The steering council shall work to:

  • Maintain the quality and stability of Manim and its associated projects,
  • Have direct access to funds (if any) and use them effectively for the good of the project,
  • Make contributing as accessible, inclusive, and sustainable as possible,
  • Establish appropriate decision-making processes for proposals,
  • Seek consensus among contributors and the core team before acting in a formal capacity,
  • Act as a "court of final appeal" for decisions where all other methods have failed.

Powers

The council has broad authority to make decisions about the project. For example, they can:

  • Accept or reject proposals
  • Enforce or update the project's code of conduct
  • Manage any project assets
  • Delegate parts of their authority to other subcommittees or processes

However, they cannot modify this policy, or affect the membership of the core team, except via the mechanisms specified in this policy.

The council should look for ways to use these powers as little as possible. Instead of voting, it's better to seek consensus. Instead of ruling on individual proposals, it's better to define a standard process for proposal decision making. It's better to establish a Code of Conduct committee than to rule on individual cases. And so on.

To use its powers, the council votes. Every council member must either vote or explicitly abstain. Members with conflicts of interest on a particular vote must abstain. Passing requires a strict majority of non-abstaining council members.

Whenever possible, the council's deliberations and votes shall be held in public.

The council members generally hold the highest rights on any platform, including but not limited to:

  • Discord (highest rank and ownership),
  • GitHub (Owner),
  • Twitter,
  • PyPI and
  • Read the Docs.

It might not be possible to split some of those rights to all council members. In that case the council shall select one member of the council, who represents the council for the concerned platform.

The use of these right reflects the will of the council, not of a single member.

Electing the council

A council election consists of two phases:

  • Phase 1—Nomination: Candidates advertise their interest in serving. Candidates must be nominated by a core team member. Self-nominations are allowed.
  • Phase 2 Alpha—Vote: Each core team member can vote for up to three candidates. Voting is performed anonymously. The council should ideally reflect the diversity of Manim contributors and users, and core team members are encouraged to vote accordingly. Candidates are ranked by the total number of votes they receive. If a tie occurs, it may be resolved by mutual agreement among the candidates or Phase 2 Bravo comes into effect.
  • Phase 2 Bravo—Run-Off: When Phase 2 Alpha fails to produce clear winners, a run-off election between all tied candidates shall be held. Every core team member has one vote. If the tie still cannot be resolved, tied candidates get chosen at random until all council seats are filled.

Each phase lasts one to two weeks, at the outgoing council's discretion.

The election process is managed by a volunteer chosen by the outgoing council. Christopher Besch administrates the initial election.

Term

A new council is elected every six months. Each council's term runs from when their election results are finalized until the next council's term starts. There are no term limits.

Vacancies

Council members may resign their position at any time.

Whenever there is a vacancy during the regular council term, the council may vote to appoint a replacement to serve out the rest of the term.

If a council member drops out of touch and cannot be contacted for a month or longer, then the rest of the council may vote to replace them.

Ejecting core team members

In exceptional circumstances, it may be necessary to remove someone from the core team against their will. (For example: egregious and ongoing code of conduct violations.) This can be accomplished by a steering council vote, but unlike other steering council votes, this requires at least a two-thirds majority. With 3 members voting, this means that a 2:1 vote in favor is the minimum required for such a vote to succeed. In addition, this is the one power of the steering council which cannot be delegated, and this power cannot be used while a vote of no confidence is in process.

If the ejected core team member is also on the steering council, then they are removed from the steering council as well.

The ejected core team member will not be considered an inactive or emeritus member.

Vote of no confidence

In exceptional circumstances, the core team may remove a sitting council member, or the entire council, via a vote of no confidence.

A no-confidence vote is triggered when a core team member calls for one on an appropriate project communication channel (such as in internal Discord channels), and another core team member seconds the proposal.

The vote lasts for two weeks. Core team members vote for or against removal or may abstain. If at least two thirds of voters express a lack of confidence, then the vote succeeds.

There are two forms of no-confidence votes: those targeting a single member, and those targeting the council as a whole. The initial call for a no-confidence vote must specify which type is intended. If a single-member vote succeeds, then that member is removed from the council and the resulting vacancy can be handled in the usual way. If a whole-council vote succeeds, the council is dissolved and a new council election is triggered immediately.

The Core Team

Role

The core team is the group of trusted volunteers who manage Manim. They assume many roles required to achieve the project's goals, especially those that require a high level of trust. They make the decisions that shape the future of the project.

Core team members are expected to act as role models for the community and custodians of the project, on behalf of the community and all those who rely on Manim.

They will intervene, where necessary, in online discussions or at official Manim events on the rare occasions that a situation arises that requires intervention.

They have authority over the Manim Project infrastructure, including the Manim Project website itself, the Manim GitHub organization and repositories, the bug tracker, social media, Discord server, etc.

Prerogatives

Core team members may participate in formal votes, typically to nominate new team members and to elect the steering council.

Membership

Manim core team members demonstrate:

  • a good grasp of the philosophy of the Manim Project
  • a solid track record of being constructive and helpful
  • significant contributions to the project's goals, in any form
  • willingness to dedicate some time to improving Manim

As the project matures, contributions go beyond code. Here's a non-exhaustive list of areas where contributions may be considered for joining the core team, in no particular order:

  • Working on community management and outreach
  • Providing support on social media and the Discord server
  • Triaging tickets
  • Writing patches (code, docs, or tests)
  • Reviewing patches (code, docs, or tests)
  • Participating in design decisions
  • Providing expertise in a particular domain (security, i18n, etc.)
  • Managing the continuous integration infrastructure
  • Managing the servers (website, tracker, documentation, etc.)
  • Maintaining related projects (plugins, etc.)
  • Creating visual designs

Core team membership acknowledges sustained and valuable efforts that align well with the philosophy and the goals of the Manim project.

It is usually granted when an informal private poll on Discord gains consensus.

Core team members are always looking for promising contributors, teaching them how the project is managed, and submitting their names to the core team's vote when they're ready.

There's no time limit on core team membership. However, in order to provide the general public with a reasonable idea of how many people maintain Manim, core team members who have stopped contributing are encouraged to declare themselves as "inactive". Those who haven't made any non-trivial contribution in two years may be asked to move themselves to this category, and moved there if they don't respond. To record and honor their contributions, inactive team members will continue to be listed alongside active core team members; and, if they later resume contributing, they can switch back to active status at will. While someone is in inactive status, though, they lose their active privileges like voting or nominating for the steering council, and commit access.

The initial active core team members will consist of everyone currently listed in the "Manim core" team on Github, and the initial inactive members will consist of everyone else who has been a committer in the past.

Changing this document

Changes to this document require at least a two-thirds majority of votes cast in a core team vote which should be open for one weeks.

Copyright

This document is based off Python's PEP 13, which has been placed in the public domain. This document is also placed in the public domain.