2024-05-01 23:40:58 +02:00
|
|
|
# HyprWM RFCs (Request for Comments)
|
|
|
|
|
|
|
|
Welcome to the RFC (Request for Comments) repository for HyprWM. Here you may
|
|
|
|
propose, discuss and track changes to various aspects of the HyprWM organization
|
|
|
|
including, but not limited to, community structure, project features, packaging
|
|
|
|
and security of projects.
|
|
|
|
|
|
|
|
## What is an RFC?
|
|
|
|
|
|
|
|
RFC stands for Request for Comments. It's a formalized way to propose
|
|
|
|
significant changes, new features, or enhancements to a project. The purpose of
|
|
|
|
an RFC is to solicit feedback and build consensus around proposed changes before
|
|
|
|
they are implemented.
|
|
|
|
|
|
|
|
## Motivation
|
|
|
|
|
|
|
|
The purpose of the RFC process is to provide a structured and collaborative
|
|
|
|
process for proposing and discussing significant changes, new feature additions
|
|
|
|
or enhancements to HyprWM projects. By implementing and normalizing the RFC
|
|
|
|
process, we aim to:
|
|
|
|
|
|
|
|
- Encourage participation: Provide a platform for all community members to
|
|
|
|
contribute ideas and feedback.
|
|
|
|
- Foster consensus: Facilitate discussions to build agreement and alignment
|
|
|
|
around proposed changes before they are implemented.
|
|
|
|
- Improve transparency: Document proposals, discussions, and decisions to keep
|
|
|
|
the community informed about the direction of HyprWM projects.
|
|
|
|
- Enhance quality: Ensure that proposed changes undergo proper review and
|
|
|
|
consideration alongside healthy communication before implementation, hopefully
|
|
|
|
leading to higher-quality outcomes than hastily done merges.
|
|
|
|
|
|
|
|
RFC documents are intended as the permanent documentation of a decision and a
|
|
|
|
snapshot of a moment in time, rather than a specification-like normative
|
|
|
|
document. The goal of the RFC process is to concentrate relevant discussion in
|
|
|
|
one location that can be easily archived and viewed.
|
|
|
|
|
|
|
|
## When this process is followed
|
|
|
|
|
|
|
|
The RFC process is followed when one intends to propose large changes to
|
|
|
|
projects under the HyprWM umbrella. The "large changes" in question may be
|
|
|
|
redefined in time, as the community evolves, but for the time being the
|
|
|
|
following are included:
|
|
|
|
|
|
|
|
- Broad changes to the documentation
|
|
|
|
- Semantic or syntactic changes to, e.g., Hyprlang
|
|
|
|
- Large restructures of the community mediums (Discord, Matrix, ...)
|
|
|
|
- Nix tooling and packaging
|
|
|
|
- Expansions of the scope of HyprWM (new projects, packaging, ...)
|
|
|
|
- Introduction of new interfaces to existing projects
|
|
|
|
|
|
|
|
Certain topics of interest, regardless of how many RFCs are submitted, will not
|
|
|
|
be subject to change:
|
|
|
|
|
|
|
|
- The project language (C++)
|
|
|
|
- The project owner ([@vaxerski](https://github.com/vaxerski))
|
|
|
|
|
|
|
|
Other changes, while difficult, may be subject to change if a compelling
|
|
|
|
argument is made:
|
|
|
|
|
|
|
|
- Build system (CMake)
|
|
|
|
- Wiki software
|
|
|
|
- Code style
|
|
|
|
|
|
|
|
## Glossary
|
|
|
|
|
|
|
|
### RFC Steering Committee
|
|
|
|
|
|
|
|
A group of members assigned by the
|
|
|
|
[Core HyprWM Team](https://github.com/orgs/hyprwm/teams/core) which would stay
|
|
|
|
consistent until the team composition is potentially changed through an RFC
|
|
|
|
proposal. This committee is tasked with forming an RFC Shepherd team from the
|
|
|
|
available nominations on each new RFC. The responsibilities of this team also
|
|
|
|
include naming a "leader" for the shepherd team during its life-cycle. This
|
|
|
|
**must** happen within 2 weeks after the Pull Request to the RFCs repository has
|
|
|
|
been opened. Until a leader has been assigned, the Steering Committee will also
|
|
|
|
be held responsible for guiding all discussions under the relevant pull request.
|
|
|
|
|
|
|
|
In case of the Shepherding Team not doing its work as expected, the Steering
|
|
|
|
Committee shall encourage them [to do so] or step in to assign a new Shepherd
|
|
|
|
team that may or may not include previous teams. They will also be in charge of
|
|
|
|
marking the end of an RFC discussion period (i.e. merging or rejecting) the RFC.
|
|
|
|
|
|
|
|
Current RFC Steering Committee consists of:
|
|
|
|
|
|
|
|
- TBD
|
|
|
|
- TBD
|
|
|
|
- TBD
|
|
|
|
- ...
|
|
|
|
|
|
|
|
### Shepherd Team
|
|
|
|
|
|
|
|
A team of 2-4 community members, defined unanimously by the RFC Steering
|
|
|
|
Committee, tasked with marking the end of an RFC's life-cycle by marking it for
|
|
|
|
either merge or rejection. This team is formed during each RFC's life-cycle, and
|
|
|
|
for the relevant RFC only from community members nominated in the discussion of
|
|
|
|
that RFC.
|
|
|
|
|
|
|
|
This team shall be people who are very familiar with the components that are the
|
|
|
|
main subjects of the RFC, and the author may not be a part of the Shepherd Team.
|
|
|
|
In addition to the previous restrictions, at least one and at most half of the
|
|
|
|
Shepherd Team shall be part of the RFC Steering Committee.
|
|
|
|
|
|
|
|
The responsibility of the team is to guide and moderate the discussion as long
|
|
|
|
as it is constructive, brings new points to the table and while the RFC is
|
|
|
|
iterated and circled-back to from time to time. If this is no longer the case,
|
|
|
|
the Shepherd Team shall decide on whether to proceed with the FCP.
|
|
|
|
|
|
|
|
#### Shepherd Leader
|
|
|
|
|
|
|
|
The Shepherd Leader refers to the person in charge of the RFC process for a
|
|
|
|
specific RFC, with the responsibility of ensuring that the process is followed
|
|
|
|
in a neat, timely and civil fashion. This person has no special responsibility
|
|
|
|
with regard to moving an undecided Shepherd Team to a certain decision.
|
|
|
|
|
|
|
|
### Final Comment Period (FCP)
|
|
|
|
|
|
|
|
A period of 8 calendar days, which will be called by the Shepherd Team after the
|
|
|
|
RFC has received the proper amount of discussion appropriate to the size of the
|
|
|
|
RFC, and enough of the pros and cons of said RFC have been discussed. The
|
|
|
|
Shepherd Team will propose to either accept, or reject the RFC once the FCP
|
|
|
|
period is concluded.
|
|
|
|
|
|
|
|
## Process from Creation to Merge
|
|
|
|
|
|
|
|
_In short, to get a major change propagated to the HyprWM organization or to a
|
|
|
|
project under the HyprWM organization, one must first get an RFC merged into the
|
|
|
|
RFC repository as a markdown file under the `rfcs` directory, with the file name
|
|
|
|
`XXXX-<name>.md` where the `XXXX` in the name stands for the RFC number,
|
2024-06-06 17:34:00 +02:00
|
|
|
starting from `0000`. A template is available in the root of this repository. At
|
|
|
|
that point the RFC is accepted, and may be implemented with the goal of eventual
|
|
|
|
inclusion into HyprWM or a project under the HyprWM organization._
|
2024-05-01 23:40:58 +02:00
|
|
|
|
|
|
|
<div align="center">
|
|
|
|
<img src="./assets/rfc-process.png" alt="RFC Process">
|
|
|
|
</div>
|
|
|
|
|
|
|
|
1. Have a cool idea!
|
|
|
|
2. Fill in the RFC. Put good care into details: RFCs that do not present
|
|
|
|
convincing motivation, demonstrate understanding of the impact of proposed
|
|
|
|
change or are disingenuous about the drawbacks or alternatives may be poorly
|
|
|
|
received, or vetoed.
|
|
|
|
3. In case your RFC is a technical proposal, consider preparing a prototype that
|
|
|
|
visualizes your idea for potential shepherd and bystanders. It will also help
|
|
|
|
you catch any pitfalls your idea might have stumbled upon.
|
|
|
|
4. Submit a pull request. The RFC will receive feedback on its design and
|
|
|
|
implementation from the larger community, therefore the author must be
|
|
|
|
prepared to amend and revise if necessary.
|
|
|
|
5. For the nomination process for potential members of the RFC Shepherd Team
|
|
|
|
that is exclusive to each RFC, anyone interested can either nominate another
|
|
|
|
person who is willing or themselves to be a potential member of the RFC
|
|
|
|
Shepherd team. This can already be done when submitting the PR, with a
|
|
|
|
pre-formed Shepherd team.
|
|
|
|
6. The RFC Steering Committee assigns a subset of nominees to the RFC Shepherd
|
|
|
|
Team and assigns a designated leader to it. This has to be done unanimously,
|
|
|
|
and is considered a blocker. The RFC may be on hold until a leader is
|
|
|
|
assigned.
|
|
|
|
7. Consensus is built, and potential feedback is received by the RFC author.
|
|
|
|
RFCs that have broad support and consensus are much more likely to make
|
|
|
|
forward progress than those that do not receive any comments. Do feel free to
|
|
|
|
reach out to the RFC Shepherd Team leader in particular to get help
|
|
|
|
identifying stakeholders and obstacles.
|
|
|
|
8. The RFC Shepherd team will discuss the RFC pull request, as much as possible
|
|
|
|
in the comment thread of the pull request for the relevant RFC. Discussion
|
|
|
|
outside the pull request, either offline or in a video conference, that might
|
|
|
|
be preferable to get to a solution for complex issues, must be summarized by
|
|
|
|
the participants of said discussions in the pull request comment thread.
|
|
|
|
9. RFCs rarely go through without any changes, especially as alternatives and
|
|
|
|
drawbacks are pointed out. You may make edits, big or small, to the RFC in
|
|
|
|
order to clarify or change the proposed design. However, changes must be made
|
|
|
|
as new commits to the pull request, actively avoiding force pushes. On each
|
|
|
|
commit, leave a comment explaining your changes and your motivation for them.
|
|
|
|
Do not squash or rebase commits after they have been made visible once on the
|
|
|
|
pull request.
|
|
|
|
10. At some point, a member of the RFC Shepherd Team will propose to start the
|
|
|
|
"Final Comment Period" (FCP) on behalf of the team, along with a proposed
|
|
|
|
disposition for the RFC. This is usually one of "merge" or "close", and the
|
|
|
|
final decision is forwarded to the members of the Core Team who will either
|
|
|
|
**veto** the decision, or carry it out according to previous discussion.
|
|
|
|
|
|
|
|
- This step is taken when enough of the trade-offs and pitfalls have been
|
|
|
|
discussed that the RFC Shepherd team is in an appropriate position to make
|
|
|
|
a final decision. That does not require consensus amongst all participants
|
|
|
|
in the RFC thread (which is usually impossible). However, the argument
|
|
|
|
supporting the resulting disposition on the RFC needs to have already been
|
|
|
|
clearly articulated, and there should not be a strong consensus against
|
|
|
|
that position outside the RFC Shepherd Team. The RFC Shepherd Team members
|
|
|
|
are to use their best judgement in taking this steep, and the FCP itself
|
|
|
|
ensures there is ample time and notification for stakeholders to push back
|
|
|
|
if it is made prematurely.
|
|
|
|
|
|
|
|
- For RFCs with lengthy discussion, the motion to FCP is usually preceded by
|
|
|
|
a summary comment trying to lay out the current state of the discussion
|
|
|
|
and major trade-offs/points of disagreement.
|
|
|
|
|
|
|
|
- In order to actually enter FCP, it must be made clear that all members of
|
|
|
|
the RFC Shepherd team sign off the motion, e.g. through commits or
|
|
|
|
approvals, or a meeting protocol that has been recorded or transcribed.
|
|
|
|
|
|
|
|
11. The FCP is advertised widely by the Shepherds, most importantly on
|
|
|
|
officially endorsed social channels (e.g. Discord or Matrix). It lasts 8
|
|
|
|
calendar days starting with the announcement on the Pull Request (and the
|
|
|
|
subsequent Discord/Matrix announcement), so that it is open for at least 5
|
|
|
|
business days. This way, all stakeholders and community members a have a
|
|
|
|
chance to raise any final objections before a decision is reached.
|
|
|
|
12. In case of acceptance, the RFC Steering Committee merges the PR. Otherwise,
|
|
|
|
the RFC's pull request is closed by a Core Team member. If no consensus can
|
|
|
|
be reached on the RFC, but the idea in general is accepted, it gets closed,
|
|
|
|
too. A note is added that it should be proposed again, when the
|
|
|
|
circumstances that are preventing the discussion from coming to another
|
|
|
|
decision change.
|
|
|
|
13. If the RFC has been accepted, but a veto right is exercised by a Core Team
|
|
|
|
member, the RFC is invited to revise or to be resubmitted in the future by
|
|
|
|
the Core Team member. However, if the Core Team member thinks the interests
|
|
|
|
of HyprWM and the RFC author misalign, the RFC may be closed outright as per
|
|
|
|
the veto privilege.
|
|
|
|
|
|
|
|
<!--
|
|
|
|
Borrowed from https://github.com/NixOS/rfcs - It is modified to include the
|
|
|
|
veto process as well as other unhappy conditions.
|
|
|
|
|
|
|
|
This diagram is available under the CC-BY-SA 4.0 License as indicated
|
|
|
|
by the license section. Please see:
|
|
|
|
<https://github.com/NixOS/rfcs/?tab=readme-ov-file#license>
|
|
|
|
-->
|
|
|
|
<div align="center">
|
|
|
|
<img src="./assets/rfc-lifecycle.png" alt="RFC Life-cycle">
|
|
|
|
</div>
|
|
|
|
|
|
|
|
## Unhappy Cases
|
|
|
|
|
|
|
|
Ideally every RFC will complete review and be accepted or rejected.
|
|
|
|
Unfortunately, this can not always be the case. Below are the "Unhappy Cases" in
|
|
|
|
which your RFC will be held back, or closed.
|
|
|
|
|
|
|
|
### On Hold
|
|
|
|
|
|
|
|
If the author is unable or unwilling to update the RFC in a timely fashion they
|
|
|
|
may mark an RFC as "On Hold" to indicate that the RFC should not continue to be
|
|
|
|
pushed forward for the time being.
|
|
|
|
|
|
|
|
### Can't Find Shepherds
|
|
|
|
|
|
|
|
If an RFC that meet all prior conditions to move forward, but cannot establish a
|
|
|
|
team of members willing to Shepherd the RFC discussion (i.e. a Shepherd Team)
|
|
|
|
then the RFC will be put on hold for 30 days with the following message:
|
|
|
|
|
|
|
|
```
|
|
|
|
This RFC has acquired insufficient interest from the community. [A full
|
|
|
|
shepherd team is mandatory](https://github.com/hyprwm/RFCs/#shepherd-team)
|
|
|
|
for a RFC to move foward.
|
|
|
|
|
|
|
|
If not enough shepherds are found within the next month, this RFC will be closed
|
|
|
|
until enough participantss are found. The PR can be reopened at anytime if
|
|
|
|
enough shepherd nominations are made.
|
|
|
|
|
|
|
|
[Read more about the RFC process here](https://github.com/hyprwm/RFCs/blob/master/README.md)
|
|
|
|
```
|
|
|
|
|
|
|
|
If another month, starting from the sending of this message, passes and an RFC
|
|
|
|
team has not yet been formed, the pull request for the RFC will be closed with
|
|
|
|
the following message:
|
|
|
|
|
|
|
|
```
|
|
|
|
This RFC is being closed due to lack interest. If enough shepherds are found this
|
|
|
|
issue can be reopened. [Read more about the RFC process
|
|
|
|
here](https://github.com/hyprwm/RFCs/blob/master/README.md)
|
|
|
|
```
|
|
|
|
|
|
|
|
## The RFC life-cycle
|
|
|
|
|
|
|
|
Most RFCs describe changes that eventually need to be implemented, usually but
|
|
|
|
not necessarily in the form of a series of pull requests to one of the
|
|
|
|
repositories under the HyprWM organization. Ideally, an implementation or a
|
|
|
|
demonstration accompanies the initial RFC pull request when it is made. If
|
|
|
|
neither are present, the RFC author shall include a "roadmap" that describes the
|
|
|
|
order in which proposed changes will happen.
|
|
|
|
|
|
|
|
An RFC being marked as accepted shall not be seen as a rubber stamp, and in
|
|
|
|
particular still does not mean that the proposed changes will be made; it does
|
|
|
|
mean, however, in principle that all the major stakeholders have agreed to the
|
|
|
|
feature and are amenable to proceeding forward with it. In general though, the
|
|
|
|
"accepted" status means that the proposed changes are to be followed through
|
|
|
|
unless there are no substantial technical objections, or a veto from one of the
|
|
|
|
Core Team members.
|
|
|
|
|
|
|
|
It should be noted that the fact a given RFC has been accepted implies nothing
|
|
|
|
about what priority shall be assigned to its implementation unless that has been
|
|
|
|
explicitly stated in the RFC, and has been accepted by consensus. Authors shall
|
|
|
|
not expect that other project developers or team members will take on the
|
|
|
|
responsibility for implementing proposed changes.
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
All contributions are licensed by their respective authors under the
|
|
|
|
[CC-BY-SA 4.0 License](https://creativecommons.org/licenses/by-sa/4.0/legalcode).
|