# Preamble for those reviewing
- All of this is subject to change through discussion
- Each of the H1 sections are going to be their own individual page either in the docs or on the main Bazzite website
- After we have had some time to hack on this, putting these processes in place will be the first major proposal I'd like to do using the new system.
---
# Mission
Bazzite wants to provide a stable and solid operating system for you to play your games. We want to make your experience of installing, maintaining, and using your operating system as easy as possible and for you to have a cohesive experience on whatever device you decide to game on.
>Bazzite is a project under Universal Blue. We inherit all aspects of Universal Blue's [mission](https://universal-blue.org/mission.html) along with our own mission below.
## Project
- Bazzite is a project, not a product.
- The difference is subtle but important. Projects are group efforts focused on an end result. Products are group efforts focused on and end result that yields income.
- Bazzite will never be a for-profit entity. All donations received for Bazzite go to ongoing costs of the project:
- Hosting the Website
- Purchasing of new devices for device enablement
- Infrastructure Costs
- Attending Conferences
- Coffee for Maintainers and Contributors :)
- Bazzite Maintainers and Contributors are volunteers; no one's day job is Bazzite.
- There is no dedicated support, SLA (Service Level Agreement), or warranty for Bazzite. Support is given on a best effort basis.
- Bazzite is not a Linux Distribution. It is an opinionated image based on the bootable containers technology.
- Bazzite will always remain open source.
## Community
- Bazzite has a decentralized governance structure. There is no BDFL (Benovolent Dictator for Life). Governance and Membership to Bazzite are outlined on the [Membership]() page.
- We have explicit [Community Values](). We encourage all members of the community to review these to understand what might influence certain project decisions.
- All community members are required to follow the Universal Blue [Code of Conduct](https://universal-blue.org/code-of-conduct.html) when engaging in any community spaces. These include, but are not limited to, the following spaces:
- Discord
- Discourse
- Github
- Reddit
- Bazzite encourages and embraces diversity. All are welcome to participate and contribute so long as they follow the [Code of Conduct](https://universal-blue.org/code-of-conduct.html).
- Help new contributors become job-ready and find opportunities to work in Open Source professionally. This dovetails into Universal Blue's [mission](https://universal-blue.org/mission.html)
## Commitment to Upstream and the Wider Gaming Ecosystem
Bazzite is commited to the following:
- Contributing fixes, improvements, and tools to benefit the wider open source gaming ecosystem
- Share and collaborate with other projects in the Open Source gaming ecosystem
- Working closely with our upstream partners in the following ways:
- Reporting and (hopefully) fixing bugs
- Contributing packages
- Participating in discussions regarding the direction of the upstream partners and get involved in community initiatives when they align with Bazzite's goals.
- Encourage members of the Bazzite community to contribute and participate in our upstream partners communities
- Work with Universal Blue to further its [mission](https://universal-blue.org/mission.html)
---
# Values
We inherit all of the [values](https://universal-blue.org/values.html) from Universal Blue.
Here are additional values that Bazzite has:
## Community First
We want to provide a safe and inclusive community. Gaming should be for everyone and Bazzite would not be here without you. We want you to have the opportunity to connect with your fellow gamers and maybe even frag some of the Bazzite crew in a game of Halo on occasion.
## Be the Premier Open Source Gaming Experience
Bazzite wants to provide a stable and solid operating system for you to play your games. We want to make things as easy as possible and have a cohesive experience on whatever device you decide to game on.
# Membership
## Roles
### Contributor
A contributor of Bazzite is anyone who has provided community support (through Discord, Discourse, or Github), reported bugs, code contributions, or documentation contributions. These can usually be described as drive-by contributions, but we would argue these are vitally important.
Not every contributor has the time to be able to fully commit to a project, but any help they are willing to provide is crucial to a healthy Open Source project.
Contributors do not have any voting rights on project decisions, but their constructive feedback is always welcomed and encouraged!
If you want to become more involved in the Bazzite project, you may want to consider becoming a member or community moderator of the project!
### Bazzite Member
Members are **continuously active** contributors to Bazzite. They can have issues and PRs assigned to them, and participate in the Bazzite Github repositories. Members are expected to remain active contributors to the community. This role includes responsibilities that are defined as "Reviewers" in other cloud-native projects.
**Defined by:** Write permissions on repositories managed by Bazzite
#### Requirements
* **Enabled two-factor authentication** on their GitHub account.
* Have made **multiple contributions** to the project or community, enough to demonstrate an **ongoing and long-term commitment** to the project. Contributions may include, but are not limited to:
* **Authoring or reviewing PRs** on GitHub, with at least one **merged** PR.
* **NOTE:** The PR(s) must demonstrate an ongoing and active commitment. A few examples include:
* A single issue/PR that has taken several weeks of driving consensus.
* A larger number of smaller PRs over several weeks to months.
* A smaller number of complex or technical PRs that required working with community members to resolve an issue (e.g., regressions, bug fixes, etc.).
* **Filing or commenting on issues** on GitHub.
* **Contributing to community discussions**.
* **Special consideration of established open source contributions**, such as:
* Distribution maintainer, CNCF Contributor, Apache, etc.
* This kind of contribution is highly valued.
* Have **read the contributor guide**.
* **Actively contributing** to one or more repositories.
* **Sponsored by two Bazzite Maintainers**. **Note the following requirements for sponsors**:
* Sponsors must have close interactions with the prospective member (e.g., code/design/proposal review, coordinating on issues, etc.).
* Sponsors must be reviewers or approvers in at least one repo in the organization.
* **Open an issue** ([membership request]) against the ublue-os/bazzite repo.
* Ensure your sponsors are @mentioned on the issue.
* Complete every item on the checklist.
* Make sure that the list of contributions included is representative of your work on the project.
* Have your **sponsoring reviewers reply confirmation of sponsorship**: `+1`.
* Once your sponsors have responded, your request will be reviewed by the Owners and acted upon. You are now a member of Bazzite!
#### Responsibilities and Privileges
* **Proactively act when builds are failing**.
* Internal project outages should be prioritized over external dependencies.
* If an outage is complex, ensure that the rest of the team is aware of your work by filing an issue.
* **Responsive to issues and PRs** assigned to them.
* **Responsive to mentions of teams** they are members of.
* **Active owner of code they have contributed** (unless ownership is explicitly transferred).
* Code is well tested.
* Keeps the tree green.
* Addresses bugs or issues discovered after code is accepted.
* They can be **assigned to issues and PRs**, and people can ask members for reviews with a `/cc @username`.
* **Voting rights for project decisions**
**Note:** Members who frequently contribute code are expected to proactively perform code reviews and work towards becoming a primary *approver* for the repository that they are active in.
### Bazzite Maintainer
Bazzite Maintainers are able to both review and approve code contributions. While code review focuses on code quality and correctness, **approval** is focused on holistic acceptance of a contribution, including: backwards/forwards compatibility, subtle performance and correctness issues, alignment with upstream features and plans. Bazzite Maintainers are the **drivers of the project**.
**Defined by:** Admin permissions on repositories managed by Bazzite
#### Requirements
* **Member for at least 3 months**.
* **Primary reviewer for at least 5 PRs** to the codebase.
* **Reviewed or merged at least 20 substantial PRs** to the codebase.
* Demonstrate **sound technical judgment**.
* **Responsible for project quality control** via code reviews, with a focus on **long-term sustainability** of the project.
* Expected to be **responsive to review requests** as per [community expectations].
* **Mentor new contributors and members**.
* Possess a **deep understanding of our working relationship with Fedora and other upstreams**.
* Is invested in keeping track of upstream issues that affect our repositories.
* Is comfortable reporting and testing issues upstream.
#### Responsibilities and Privileges
* **Maintainer status may be a precondition to accepting large code contributions**.
* **Demonstrate sound technical judgment**.
* Is actively monitoring upstream projects and participating accordingly as good open source citizens.
* This may include rejecting ideas in order to maintain project scope.
* **Responsible for project quality control** via code reviews.
* Expected to be **responsive to review requests** as per [community expectations].
* **Mentor new contributors and reviewers**.
* **Voting rights for project decisions**
### Bazzite Community Manager
The Bazzite Community Manager is responsible for acting as a bridge between Bazzite Members (and maintainers) with the greater Bazzite community. This helps provide the direction of the project and aligns it with the communities wants and needs.
**Defined by:** Write permissions on repositories needed to execute role and title displayed in Discord, Discourse, and Reddit.
#### Requirements
* Confirmed as the Community Manager by a vote from existing Bazzite Members and Maintainers
* A positive history of involvement in the Bazzite Community
* Strong communication and interpersonal skills
* Knowledge and experience with best practices for communicating through Social Media
* Help prepare and review (or deliver) speaking engagements for members of the project at conferences (in person or remote)
* Work with content creators to accurately explain what Bazzite is and what it can do
#### Responsibilities and Privileges
* **Responsive to issues** assigned to them.
* They can be **assigned to issues**, and people can ask members for reviews with a `/cc @username`.
* **Voting rights for project decisions**
* Speaks as an ambassador for the entire Bazzite Project
### Bazzite Community Moderators
**Defined by:** Title displayed in Discord, Discourse, and Reddit.\
Bazzite community moderators are responsible for helping moderate the community. They are responsible for enforcing the Code of Conduct and helping resolve disputes between members in the community. The most important priority is to make sure the Bazzite Community is a safe and inclusive space.
#### Requirements
* Confirmed as a Moderator by a vote from existing Universal Blue Members, Bazzite Members, and Maintainers
* A positive history of involvement in the Bazzite Community
* Strong communication and interpersonal skills
* Past community moderation experience (desired, but not required)
#### Responsibilities and Privileges
* Responsive to pings from users asking for moderation
* Knowledge of our Code of Conduct in all community spaces
* Enforcement of Code of Conduct and taking action as appropriate
* Work with other moderators or members of the project if there is a question about a moderation action
* Help maintain the safety of community members
* **Voting rights for project decisions**
### Universal Blue Member
Universal Blue Member is a [member](https://universal-blue.org/membership.html) of the Universal Blue Project. Because Bazzite is a project under Universal Blue, members of Universal Blue have access to the Bazzite repository, but do not have access to all Bazzite related repositories such as the Bazzite Kernel or custom RPM packages that are built. Those are reserved for Bazzite Members or Maintainers.
Universal Blue Members also count towards the 1 Universal Blue vote they are allotted in Bazzite project decisions outlined in the governance section below.
### Universal Blue Approver
Universal Blue Member is an [approver](https://universal-blue.org/membership.html) in the Universal Blue Project. Because Bazzite is a project under Universal Blue, Approvers of Universal Blue have access to the Bazzite repository, but do not have access to all Bazzite related repositories such as the Bazzite Kernel or custom RPM packages that are built. Those are reserved for Bazzite Members or Maintainers.
Universal Blue Approvers also count towards the 1 Universal Blue vote they are allotted in Bazzite project decisions outlined in the governance section below.
## Governance
### How Decisions are Made
#### Lazy Consensus
Paraphrased from the Apache Community:
>Lazy consensus means that you don’t need to get explicit approval to proceed, but you need to be prepared to listen if someone objects.
>Lazy consensus is achieved by stating your intent on a public email, and waiting an appropriate amount of time (usually 72 hours) for anyone to object. Silence indicates consent, and after that time has passed, you can assume that nobody objects, and proceed with your plan.
>Objections to the plan should be accompanied by a legitimate reason, and be open to discussing possible alternative approaches.
In Bazzite's case, the lazy consensus process is the starting point for discussion about a particular issue related to the project (and most of the time will be enough to move past a particular issue).
If lazy consensus (or a compromise) cannot be reached, we need to move to a majority vote system in order to move things forward. The benefit of starting with Lazy Consensus is that it allows us to start a conversation and if objections are raised, we have an opportunity to discuss them before moving to a majority vote.
#### Voting
Each Bazzite Maintainer and Member gets 1 binding vote each. Universal Blue gets 1 binding vote as well since Bazzite is part of Universal Blue. If the individual is a member of both Universal Blue and Bazzite, they can only use their Bazzite vote, they cannot vote twice.
You can vote in the following ways:
+1 - You approve of the change
0 - You feel indifferent about the change and abstain
-1 - You do not approve the change
#### Majority Vote
This is pretty simple. All members who were involved in the lazy consensus process get the opportunity to cast their vote on the proposal.
If there are more +1 (yes votes) than their are -1 (no votes), the proposal passes.
If there are more -1 (no votes) than +1 (yes votes), the proposal does not pass.
### Process
1. Raise an issue on Github under ublue-os/bazzite with the title of "[Proposal] Change you want to make"
2. The issue will be open for 2 weeks and the Lazy Consensus process will start. If there are any objections, there will be 2 weeks to discuss the issue and if needed, make appropriate changes to reach consensus. 2 weeks can always be extended if a member wants to participate in a vote, but are unavailable to do so. This will be handled on a case by case basis.
3. If consensus cannot be reached, then the proposal will be moved into a majority vote.
4. If the proposal passes, then congrats, your proposal is moving forward!
5. If the proposal does not pass, there is always an opportunity to re-introduce the proposal based on the feedback received.
### When should we use this process?
The funny thing is, a lite version of lazy consensus is already in place with the approval process for merging PRs. If you receive approval on your PR, then it typically can be merged right away as long as no one objects. That is not what this process is for.
This process is for major impactful decisions for Bazzite or large code changes.
Examples of this could be:
- Governance of the project
- Addition or Removal of an important package
- Introduction of a new application into Bazzite
- Major changes regarding core pieces of Bazzite (networking, storage, etc)
- Reviewing a Conference Presentation
- Updates about the project made to the public
- Adding or Removing Members from the project
- Larger code changes
### Ownership of Decisions
Bazzite is a project made up of volunteer maintainers and we are **all** responsible for decisions made when they have reached concensus. It is important that we communicate with each other and help take ownership of issues as they arise from our decisions.
---
# Code of Conduct
Bazzite inherits the Code of Conduct from Universal Blue
@castrojo
**I would like to rework the Universal Blue Code of Conduct to include an anonymous moderation email address rather than all going to Jorge's personal email address. This will allow reporters to feel more safe to report misconduct. (recommendation from Laura). I would also like to include options for folks to provide their complaints to any community moderators on Discord or Discourse.**
@kylegospo @castrojo
**I think it is also time to deputize more moderators on Discord and remove project leaders from that duty. I think Maintainers should have moderation rights over Github, but I believe it is too much responsibility to also have them be moderators of things like Discord, Discourse, Reddit, etc.**
# Contributing
Bazzite inherits the contributing processes from Universal Blue
@castrojo
**We need to rewrite the contributing page on Universal Blue to better reflect Universal Blue's current contributing practices. There are a lot of older examples in there and I think it would be good to update them. IMO, Bazzite should be inheriting these processes and expanding on them if there is a need.**