Skip to content

Commit 4424a58

Browse files
authored
Document the community RFC process (#116386)
This adds documentation about how the community RFC process works, based on how the community typically runs RFCs. The goal is to roughly document the process as-is and then post a follow-up explaining how the new governance model ties in to the RFC process. From there, we can discuss any changes to the process we would like to make via... an RFC.
1 parent ac56d6e commit 4424a58

File tree

5 files changed

+144
-48
lines changed

5 files changed

+144
-48
lines changed

llvm/docs/CodeReview.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ intrinsics), adding language extensions in Clang, and so on, require an RFC
9393
first. For changes that promise significant impact on users and/or downstream
9494
code bases, reviewers can request an RFC achieving consensus before proceeding
9595
with code review. That having been said, posting initial patches can help with
96-
discussions on an RFC.
96+
discussions on an RFC. See the :doc:`RFC process <RFCProcess>` documentation
97+
for more details.
9798

9899
Code-Review Workflow
99100
====================

llvm/docs/DeveloperPolicy.rst

Lines changed: 13 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -596,11 +596,6 @@ having this ability would help that work.
596596
Proposing Major Changes (RFCs)
597597
------------------------------
598598

599-
LLVM is a large community with many stakeholders, and before landing any major
600-
change, it is important to discuss the design of a change publicly with the
601-
community. This is done by posting a Request For Comments (RFC) on the `LLVM
602-
Discourse forums`_.
603-
604599
The design of LLVM is carefully controlled to ensure that all the pieces fit
605600
together well and are as consistent as possible. If you plan to make a major
606601
change to the way LLVM works or want to add a major new extension, it is a good
@@ -609,45 +604,13 @@ significant effort in an implementation. Prototype implementations, however, can
609604
often be helpful in making design discussions more concrete by demonstrating
610605
what is possible.
611606

612-
These are some suggestions for how to get a major change accepted:
613-
614-
* Make it targeted, and avoid touching components irrelevant to the task.
615-
616-
* Explain how the change improves LLVM for other stakeholders rather than
617-
focusing on your specific use case.
618-
619-
* As discussion evolves, periodically summarize the current state of the
620-
discussion and clearly separate points where consensus seems to emerge from
621-
those where further discussion is necessary.
622-
623-
* Compilers are foundational infrastructure, so there is a high quality bar,
624-
and the burden of proof is on the proposer. If reviewers repeatedly ask for
625-
an unreasonable amount of evidence or data, proposal authors can escalate to
626-
the area team to resolve disagreements.
627-
628-
After posting a major proposal, it is common to receive lots of conflicting
629-
feedback from different parties, or no feedback at all, leaving authors without
630-
clear next steps. As a community, we are aiming for `"rough consensus"
631-
<https://en.wikipedia.org/wiki/Rough_consensus>`_, similar in spirit to what is
632-
described in `IETF RFC7282 <https://datatracker.ietf.org/doc/html/rfc7282>`_.
633-
This requires considering and addressing all of the objections to the RFC, and
634-
confirming that we can all live with the tradeoffs embodied in the proposal.
635-
636-
The LLVM Area Teams (defined in `LP0004
637-
<https://github.com/llvm/llvm-www/blob/main/proposals/LP0004-project-governance.md>`_)
638-
are responsible for facilitating project decision making. In cases where there
639-
isn't obvious agreement, area teams should step in to restate their perceived
640-
consensus. In cases of deeper disagreement, area teams should try to identify
641-
the next steps for the proposal, such as gathering more data, changing the
642-
proposal, or rejecting it outright. They can also act as moderators by
643-
scheduling calls for participants to speak directly to resolve disagreements,
644-
subject to normal :ref:`Code of Conduct <LLVM Community Code of Conduct>`
645-
guidelines.
646-
647-
Once the design of the new feature is finalized, the work itself should be done
648-
as a series of `incremental changes`_, not as a long-term development branch.
607+
LLVM is a large community with many stakeholders, and before landing any major
608+
change, it is important to discuss the design of a change publicly with the
609+
community. This is done by posting a Request For Comments (RFC) on the `LLVM
610+
Discourse forums`_. See the :doc:`RFC process <RFCProcess>` documentation for
611+
more details.
649612

650-
.. _incremental changes:
613+
.. _incremental-changes:
651614

652615
Incremental Development
653616
-----------------------
@@ -877,6 +840,7 @@ will only be done through the following process:
877840
library features LLVM should use; avoid miscompiles in particular compiler
878841
versions, etc).
879842
- Detail downsides on important platforms (e.g. Ubuntu LTS status).
843+
- See the :doc:`RFC process <RFCProcess>` documentation for more details.
880844

881845
* Once the RFC reaches consensus, update the CMake toolchain version checks as
882846
well as the :doc:`getting started<GettingStarted>` guide. This provides a
@@ -1065,7 +1029,8 @@ Those wishing to add a new target to LLVM must follow the procedure below:
10651029
your target and how it follows all the requirements and what work has been
10661030
done and will need to be done to accommodate the official target requirements.
10671031
Make sure to expose any and all controversial issues, changes needed in the
1068-
base code, table gen, etc.
1032+
base code, table gen, etc. See the :doc:`RFC process <RFCProcess>`
1033+
documentation for more details.
10691034
3. Once the response is positive, the LLVM community can start reviewing the
10701035
actual patches (but they can be prepared before, to support the RFC). Create
10711036
a sequence of N patches, numbered '1/N' to 'N/N' (make sure N is an actual
@@ -1116,7 +1081,8 @@ components to a high bar similar to "official targets", they:
11161081
clear path to resolving them.
11171082
* Must be proposed through the LLVM RFC process, and have its addition approved
11181083
by the LLVM community - this ultimately mediates the resolution of the
1119-
"should" concerns above.
1084+
"should" concerns above. See the :doc:`RFC process <RFCProcess>`
1085+
documentation for more details.
11201086

11211087
If you have a project that you think would make sense to add to the LLVM
11221088
monorepo, please start an RFC topic on the `LLVM Discourse forums`_ to kick off
@@ -1160,7 +1126,8 @@ criteria:
11601126
suggested wording below).
11611127
* Must be proposed through the LLVM RFC process, and have its addition
11621128
approved by the LLVM community - this ultimately mediates the resolution of
1163-
the "should" concerns above.
1129+
the "should" concerns above. See the :doc:`RFC process <RFCProcess>`
1130+
documentation for more details.
11641131

11651132
That said, the project need not have any code to get started, and need not have
11661133
an established community at all! Furthermore, incubating projects may pass

llvm/docs/Lexicon.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,8 @@ R
261261

262262
**RFC**
263263
Request for Comment. An email sent to a project mailing list in order to
264-
solicit feedback on a proposed change.
264+
solicit feedback on a proposed change. See also: the :doc:`RFC process <RFCProcess>`
265+
documentation.
265266

266267
.. _roots:
267268
.. _stack roots:

llvm/docs/RFCProcess.rst

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
=================================
2+
Request For Comment (RFC) process
3+
=================================
4+
5+
.. contents::
6+
:local:
7+
:depth: 1
8+
9+
Introduction
10+
============
11+
Substantive changes to LLVM projects need to be acceptable to the wider
12+
community, which requires gaining community consensus to adopt the changes.
13+
This is done by posting an RFC and obtaining feedback about the proposal.
14+
15+
Process
16+
=======
17+
18+
Writing an RFC
19+
--------------
20+
The process begins with writing a proposal for the changes you'd like to see
21+
made. The proposal should include:
22+
23+
* a detailed overview of the proposed changes,
24+
* the motivation for why the changes are being proposed,
25+
* the impact on different parts of the project, and
26+
* any open questions the community should address.
27+
28+
The proposal should be posted to the appropriate forum on
29+
`Discourse <https://discourse.llvm.org/>`_.
30+
31+
Feedback Period
32+
---------------
33+
Once the RFC is posted, the community will provide feedback on the proposal.
34+
The feedback period is a collaborative effort between the community and the
35+
proposal authors. Authors should take the community's feedback into
36+
consideration and edit the original post to incorporate relevant changes they
37+
agree to. Edits should be made such that it's clear what has changed. Editing
38+
the original post makes it easier for the community to understand the proposal
39+
without having to read every comment on the thread, though this can make
40+
reading the comment thread somewhat more difficult as comments may be referring
41+
to words no longer in the proposal.
42+
43+
There is not a set time limit to the feedback period; it lasts as long as
44+
discussion is actively continuing on the proposal.
45+
46+
After posting a major proposal, it is common to receive lots of conflicting
47+
feedback from different parties, or no feedback at all, leaving authors without
48+
clear next steps. As a community, we are aiming for `"rough consensus"
49+
<https://en.wikipedia.org/wiki/Rough_consensus>`_, similar in spirit to what is
50+
described in `IETF RFC7282 <https://datatracker.ietf.org/doc/html/rfc7282>`_.
51+
This requires considering and addressing all of the objections to the RFC, and
52+
confirming that we can all live with the tradeoffs embodied in the proposal.
53+
54+
The LLVM Area Teams (defined in `LP0004
55+
<https://github.com/llvm/llvm-www/blob/main/proposals/LP0004-project-governance.md>`_)
56+
are responsible for facilitating project decision making. In cases where there
57+
isn't obvious agreement, area teams should step in to restate their perceived
58+
consensus. In cases of deeper disagreement, area teams should try to identify
59+
the next steps for the proposal, such as gathering more data, changing the
60+
proposal, or rejecting it in the absence of major changes in the design or
61+
context. They can also act as moderators by scheduling calls for participants
62+
to speak directly to resolve disagreements, subject to normal
63+
:ref:`Code of Conduct <LLVM Community Code of Conduct>` guidelines.
64+
65+
Once the design of the new feature is finalized, the work itself should be done
66+
as a series of :ref:`incremental changes <incremental-changes>`, not as a long-term development branch.
67+
68+
69+
Trivial Acceptance or Rejection
70+
-------------------------------
71+
Some proposals have obvious consensus (for or against) after discussion in the
72+
community. It is acceptable to presume a post which appears to have obvious
73+
consensus has been accepted.
74+
75+
Non-trivial Acceptance or Rejection
76+
-----------------------------------
77+
If the proposal does not have obvious consensus after community discussion,
78+
a maintainer for each of the impacted parts of the project should explicitly
79+
accept or reject the RFC by leaving a comment stating their decision and
80+
possibly detailing any provisions for their acceptance. Overall consensus is
81+
determined once a maintainer from each impacted part of the project has
82+
accepted the proposal.
83+
84+
Low Engagement Level
85+
~~~~~~~~~~~~~~~~~~~~
86+
If the proposal gets little or no engagement by the community, it is a sign that
87+
the proposal does not have consensus and is rejected. Engagement means comments
88+
on the proposal. If there are few or no comments but the are a lot of people
89+
pressing the like/heart button on the post, the appropriate area team can make
90+
a value judgement on whether to accept or reject.
91+
92+
After Acceptance
93+
----------------
94+
Once an RFC has been accepted, the authors may begin merging pull requests
95+
related to the proposal. While the RFC process typically makes reviewing the
96+
pull requests go more smoothly, the review process may identify additional
97+
necessary changes to the proposal. Minor changes to the proposal do not require
98+
an additional RFC. However, if the proposal changes significantly in a material
99+
way, the authors may be asked to run another RFC.
100+
101+
After Rejection
102+
---------------
103+
Any rejected RFC can be brought back to the community as a new RFC in the
104+
future. The new RFC should either clearly identify new information that may
105+
change the community's perception of the proposal and/or explicitly address the
106+
concerns previously raised by the community. It is helpful to explicitly call
107+
out such information in the subsequent RFC.
108+
109+
Suggestions on Getting a Change Accepted
110+
----------------------------------------
111+
These are some suggestions for how to get a major change accepted:
112+
113+
* Make it targeted, and avoid touching components irrelevant to the task.
114+
115+
* Explain how the change improves LLVM for other stakeholders rather than
116+
focusing on your specific use case.
117+
118+
* As discussion evolves, periodically summarize the current state of the
119+
discussion and clearly separate points where consensus seems to emerge from
120+
those where further discussion is necessary.
121+
122+
* Compilers are foundational infrastructure, so there is a high quality bar,
123+
and the burden of proof is on the proposer. If reviewers repeatedly ask for
124+
an unreasonable amount of evidence or data, proposal authors can escalate to
125+
the area team to resolve disagreements.

llvm/docs/index.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,11 @@ LLVM welcomes contributions of all kinds. To learn more, see the following artic
8686
:hidden:
8787

8888
GettingInvolved
89+
RFCProcess
8990

9091
* :doc:`GettingInvolved`
9192
* :ref:`development-process`
93+
* :doc:`RFCProcess`
9294
* :ref:`lists-forums`
9395
* :ref:`meetups-social-events`
9496
* :ref:`community-proposals`

0 commit comments

Comments
 (0)