PyTorch Governance
==========================

Governance Philosophy and Guiding Tenets
-----------------------------------------

PyTorch adopts a governance structure with a small set of maintainers
driving the overall project direction with a strong bias towards
PyTorch's design philosophy where design and code contributions are
valued. Beyond the core maintainers, there is also a slightly broader
set of core developers that have the ability to directly merge pull
requests and own various parts of the core code base.

Beyond the maintainers and core devs, the community is encouraged to
contribute, file issues, make proposals, review pull requests and be
present in the community. Given contributions and willingness to
invest, anyone can be provided write access or ownership of parts of
the codebase.

Based on this governance structure, the project has the following core
operating tenets by which decisions are made and overall culture is
derived:

1. **Code contributions** matter much more than corporate sponsorship
   and independent developers are highly valued.
2. **Project influence** is gained through contributions (whether PRs,
   forum answers, code reviews or otherwise)

Key people and their functions
------------------------------

Project Maintainers
~~~~~~~~~~~~~~~~~~~

Project maintainers provide leadership and direction for the PyTorch
project. Specifics include:

-  Articulate a cohesive long-term vision for the project
-  Possess a deep understanding of the PyTorch code base
-  Negotiate and resolve contentious issues in ways acceptable to all
   parties involved

PyTorch Maintainers:

-  Adam Paszke (`apaszke <https://github.com/apaszke>`__)
-  Soumith Chintala (`soumith <https://github.com/soumith>`__)
-  Edward Yang (`ezyang <https://github.com/ezyang>`__)
-  Greg Chanan (`gchanan <https://github.com/gchanan>`__)
-  Dmytro Dzhulgakov (`dzhulgakov <https://github.com/dzhulgakov>`__)
-  (sunsetting) Sam Gross (`colesbury <https://github.com/colesbury>`__)

Core Developers
~~~~~~~~~~~~~~~

The PyTorch project is developed by a team of core developers. You can
find the list of core developers at :doc:`PyTorch Governance \| Persons of
Interest <persons_of_interest>`.

While membership is determined by presence in the "PyTorch core" team in
the "PyTorch"
`organization <https://github.com/orgs/pytorch/teams/facebook>`__ on
GitHub, contribution takes many forms:

-  committing changes to the repository;
-  reviewing pull requests by others;
-  triaging bug reports on the issue tracker;
-  discussing topics on official PyTorch communication channels.

Moderators
~~~~~~~~~~

There is a group of people, some of which are not core developers,
responsible for ensuring that discussions on official communication
channels adhere to the Code of Conduct. They take action in view of
violations and help to support a healthy community. You can find the
list of moderators `here <https://discuss.pytorch.org/about>`__.

Decision Making
---------------

Uncontroversial Changes
~~~~~~~~~~~~~~~~~~~~~~~

Primary work happens through bug tracker issues and pull requests on
GitHub. Core developers should avoid pushing their changes directly to
the PyTorch repository, instead relying on pull requests. Approving a
pull request by a core developer allows it to be merged without further
process. Core Developers and Project Maintainers ultimately approve
these changes.

Notifying relevant experts about a bug tracker issue or a pull request
is important. Reviews from experts in the given interest area are
strongly preferred, especially on pull request approvals. Failure to do
so might end up with the change being reverted by the relevant expert.

Controversial decision process
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Substantial changes in a given interest area require a GitHub issue to
be opened for discussion. This includes:

-  Any semantic or syntactic change to the framework.
-  Backwards-incompatible changes to the Python or Cpp API.
-  Additions to the core framework, including substantial new
   functionality within an existing library.
-  Removing core features

Project Maintainers ultimately approve these changes.

FAQ
---

**Q: What if I would like to own (or partly own) a part of the project
such as a domain api (i.e. Torch Vision)?** This is absolutely possible.
The first step is to start contributing to the existing project area and
contributing to its health and success. In addition to this, you can
make a proposal through a GitHub issue for new functionality or changes
to improve the project area.

**Q: What if I am a company looking to use PyTorch internally for
development, can I be granted or purchase a board seat to drive the
project direction?** No, the PyTorch project is strictly driven by the
maintainer-driven project philosophy and does not have a board or
vehicle to take financial contributions relating to gaining influence
over technical direction.

**Q: Does the PyTorch project support grants or ways to support
independent developers using or contributing to the project?** No, not
at this point. We are however looking at ways to better support the
community of independent developers around PyTorch. If you have
suggestions or inputs, please reach out on the PyTorch forums to
discuss.

**Q: How do I contribute code to the project?** If the change is
relatively minor, a pull request on GitHub can be opened up immediately
for review and merge by the project committers. For larger changes,
please open an issue to make a proposal to discuss prior. Please also
see the :doc:`PyTorch Contributor
Guide <contribution_guide>` for contribution
guidelines.

**Q: Can I become a committer on the project?** Unfortunately, the
current commit process to PyTorch involves an interaction with Facebook
infrastructure that can only be triggered by Facebook employees. We are
however looking at ways to expand the committer base to individuals
outside of Facebook and will provide an update when the tooling exists
to allow this.

**Q: What if i would like to deliver a PyTorch tutorial at a conference
or otherwise? Do I need to be 'officially' a committer to do this?** No,
we encourage community members to showcase their work wherever and
whenever they can. Please reach out to
`pytorch-marketing@fb.com <http://mailto:pytorch-marketing@fb.com/>`__
for marketing support.
