Skip to content

Governance

John Melonakos edited this page Jan 26, 2023 · 6 revisions

The Mission of ArrayFire draws a diverse community of participants, collaborators, and contributors, who have wildly different interests and goals but are unified in the pursuit of productive performance for technical computing functions. We establish high standards for collaboration, debate, delegation of responsibility, and ethics to pursue excellence and to attract a talented and diverse global community.

The ArrayFire project is a meritocratic, consensus-based community project. Anyone interested in the project can join the community, contribute to the design, and participate in the decision-making process. This document describes how that participation takes place and how to earn merit within the project community.

Overview

The ArrayFire project is governed by our Code of Conduct. It lays out our expectations of those who participate, represent, or engage with the project. Essentially, it calls on people to treat one another with respect regardless of their differences of opinion, and it is the foundation for all of our governance practices.

ArrayFire is published under a liberal open-source BSD-3 license and has an open, active, and thriving developer community. AccelerEyes, LLC (dba ArrayFire) holds the copyrights.

Our goals in setting up the governance structures of the ArrayFire project are to ensure that:

  1. There is a defined process that helps people participate in decisions regarding the ArrayFire community and distribution. It should be clear who is responsible for any given decision and how others might contribute to the outcome.
  2. Decisions regarding the ArrayFire distribution and community are taken in an accountable, fair, and transparent fashion.
  3. Necessary decisions are taken, even when there is no clear consensus among the community. There is a single path for the appeal or escalation of a decision when needed.

Roles and responsibilities

This section describes the formal roles that community members may engage in and their authority within the project.

Users

Users are community members who need the project. They are the most important members of the community, and without them, the project would have no purpose. Anyone can be a user; there are no special requirements.

The project asks its users to participate in the project and community as much as possible. User contributions enable the project team to ensure that they satisfy the needs of those users. Typical user contributions include (but are not limited to):

  • evangelizing about the project (e.g., a link on a website and word-of-mouth awareness raising)
  • informing developers of strengths and weaknesses from a new user perspective
  • providing moral support (a "thank you" goes a long way)
  • providing financial support (the software is open source, but its developers need to eat)

Users who continue to engage with the project and its community will often become more and more involved. Such users may become Contributors, as described in the next section. The ArrayFire user group is an appropriate place to ask related questions or to get involved in any way.

Contributors

Contributors are community members who contribute in concrete ways to the ArrayFire project. Anyone can become a contributor, and contributions can take many forms, as detailed in a separate document. There are no expectations of commitment to the project, no specific skill requirements, and no selection processes.

In addition to their actions as users, contributors may also find themselves doing one or more of the following:

  • supporting new users (existing users are often the best people to support new users)
  • reporting bugs
  • identifying new or overlooked requirements
  • providing graphics and web design
  • programming
  • assisting with project infrastructure
  • writing documentation
  • fixing bugs
  • adding features

Contributors engage with the project through the issue tracker and mailing list or by writing or editing documentation. They submit changes to the project itself via pull requests which will be considered for inclusion in the project by maintainers (see next section). The ArrayFire developer mailing list is the most appropriate place to ask for help when making that first contribution. As contributors gain experience and familiarity with the project, their profile within and commitment to the community will increase. At some stage, they may find themselves being nominated as a maintainer.

Maintainers

Maintainers are individuals identified as ‘project owners’ on the development site. Maintainers’ responsibilities ensure the smooth running of the project. Maintainers are expected to review code contributions, participate in strategic planning, approve changes to the governance model and manage the copyrights within the project outputs. The maintainers provide a publicly accessible roadmap for the project.

Maintainership is by invitation from the existing maintainers. A nomination will result in discussion and then a majority vote by existing maintainers.

The maintainers meet in person or virtually once every quarter, typically the 3rd Monday evening (EST) of each quarter, to discuss topics of interest to the overall project and to make decisions regarding topics related to the project structure, project directions, and day-to-day issues of the project, as needed. See the Meetings of the Maintainers page for past and future meeting information.

The maintainer chair is ultimately responsible for dispute resolution, should it be required.

Maintainer Chair

The Chair is a single individual, voted for by the maintainers. Once someone has been appointed Chair, they remain in that role until they choose to retire or the maintainers vote for a replacement.

The Chair has no additional authority over other maintainers: the role is coordinator and facilitator. The Chair is also expected to ensure that all governance processes are adhered to and has the casting vote when the project fails to reach a consensus.

Support

All participants in the community are encouraged to provide support for new users within the maintenance infrastructure. This support is provided as a way of growing the community. Those seeking support should recognize that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from the ArrayFire founding corporation: AccelerEyes LLC (doing business as ArrayFire). However, for those willing to engage with the project on its terms and willing to help support other users, the following community support channels are ideal:

Decision-making Process

Decisions about the project's future are made through discussion with all community members, from the newest user to the most experienced maintainer. All non-sensitive maintenance discussion takes place on the ArrayFire user’s mailing list. Occasionally, sensitive discussion occurs privately.

To ensure that the project is not bogged down by endless discussion and continual voting, the project operates a policy of lazy consensus. This allows most decisions to be made without resorting to a formal vote.

Voting

Not all decisions can be made using lazy consensus. Issues such as those affecting the strategic direction or legal standing of the project must gain explicit approval in the form of a vote. Every community member is encouraged to express their opinions in all discussions and all votes. However, only maintainers have binding votes for decision-making.

Formal votes on issues or proposals can be called in the quarterly maintainer meetings, with a majority vote of maintainers deciding the matter.

Contribution Process

Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker or might supply patches. The various ways of contributing are described in more detail in a separate document.

The ArrayFire developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

All contributions to the ArrayFire project must be made under the terms of the BSD-3 license. All of ArrayFire (and we mean all of it) is released under this license. We insist that all contributions be released under the same license to simplify the life of our users. This ensures a clear licensing policy.

All copyrights remain with the original contributing organization or individual. The copyrights are managed file-to-file and are listed at the top of each file in the ArrayFire repository. A contributor can claim copyright for any non-trivial change (e.g., formatting changes are considered trivial).

For more information about coding guidelines and licensing, please refer to the ArrayFire Source Code Structure and Coding Standards.

(Original text courtesy of the HPX project.)