TVM Community Structure
=======================

TVM adopts the Apache style model and governs by merit. We believe that it is important to create an inclusive community where everyone can use, contribute to, and influence the direction of the project. We actively invite contributors who have earned the merit to be part of the development community. There are several roles in the community:

- Project Management Committee(PMC) Small group of active committers that moderate the discussion, RFC, manage project releases.
- Committer Individual who has made substantial contributions to the project and is granted write access to the project and oversees the general direction of the projects.
- Code Owner Individual who is responsible for a specific area of the codebase.
- Reviewer Individual who is qualified to review for a specific area of the codebase.
- Contributor Anyone who contributes to the project.

This document explains responsibility and criteria for each role.
See `CONTRIBUTORS.md <https://github.com/dmlc/tvm/blob/master/CONTRIBUTORS.md>`_ for the current list of contributors and their roles.


Project Management Committee
----------------------------

The PMC consists of a small group of active committers that moderate the discussion, provide mentorship to committers and code owners and manage the project release. PMC members need to actively manage the general project directions. Note that most major design choices and proposed changes should reach consensus among the committers.

Committer
---------

Committers are individuals who are granted the write access to the project. Committers oversee the general project directions and participate in the evaluation of the RFCs involving major design changes. Here is a list of useful things to do to help become a committer.

- Deep understanding of one or a few modules in the project.
- Good understanding of general project structure, demonstrated by discussion over RFCs, code reviews and proposals of new features
- Active history of code reviews that demonstrate a good technical ability
- Contribution history of high-quality documentation and tutorials to the promote project
- History of creating clean, maintainable code and including good test cases.

New committers are nominated by current committers from current code owners.

Code Owner
----------

A code owner is an individual who is responsible for a specific area of the code-base. Code owners are responsible for the areas they are in charge of and oversee the code review process of the corresponding module. Changes to a specific area need to be approved by one of its owners in order to be merged. Once a pull request is approved by the designated code owner, the code can be directly merged into the repo. Code owners are essential for a high quality and healthy codebase.

We welcome new code owners that help to keep good code quality, testing, and documentation in specific areas. Here is a list of useful traits that help the community to recognize potential code owners:

- High-quality, readable code contributions indicated by pull requests that can be merged without a substantial code review
- Good coverage of tests and documentation in the contributions
- Informative code reviews to help other contributors that adhere to a good standard, spot problems in contributions etc.
- Active participation in the discussion forum

Reviewer
--------

A reviewer is an individual who actively contributed to the project and is willing to participate in the code review of new contributions. We invite reviewers from active contributors. The reviewer invitation will be sent to the potential reviewer’s email, so please log in to the discussion forum so that we can know which email address we could send an invitation to.
We actively seek reviews from reviewers. High-quality code reviews prevent technical debt for long-term and are crucial to the success of the project.
A pull request to the project has to be reviewed by a reviewer in order to be merged.
