Skip to content

Commit 3cce2e7

Browse files
zimbatmDmitry Bogatov
authored and
Dmitry Bogatov
committed
RFC to describe the RFC process (NixOS#1)
1 parent 6d34607 commit 3cce2e7

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed

rfcs/0001-rfc-process.md

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
---
2+
feature: rfc-process
3+
start-date: 2017-02-12
4+
author: zimbatm
5+
co-authors: teh, MoreTea
6+
related-issues: https://github.com/zimbatm/rfcs/pull/2
7+
---
8+
9+
# Summary
10+
[summary]: #summary
11+
12+
The "RFC" (request for comments) process is intended to provide a consistent
13+
and controlled path for new features to enter the Nix language, packages and
14+
OS, so that all stakeholders can be confident about the direction the
15+
ecosystem is evolving in.
16+
17+
# Motivation
18+
[motivation]: #motivation
19+
20+
There are a number of changes that are significant enough that they could
21+
benefit from wider community consensus before being implemented. Either
22+
because they introduce new concepts, big changes or are controversial enough
23+
that not everybody will agree on the direction to take.
24+
25+
Therefore, the purpose of this RFC is to introduce a process that allows to
26+
bring the discussion upfront and avoid unnecesary implementations. It forces
27+
developers to formulate their ideas without getting bogged down into
28+
implementation details. This RFC is used to bootstrap the process and further
29+
RFCs can be used to refine the process.
30+
31+
# Detailed design
32+
[design]: #detailed-design
33+
34+
Many changes, including bug fixes and documentation improvements can be
35+
implemented and reviewed via the normal GitHub pull request workflow.
36+
37+
Some changes though are "substantial", and we ask that these be put through a
38+
bit of a design process and produce a consensus among the Nix community.
39+
40+
This is the bulk of the RFC. Explain the design in enough detail for somebody
41+
familiar with the ecosystem to understand, and implement. This should get
42+
into specifics and corner-cases, and include examples of how the feature is
43+
used.
44+
45+
## When this process is followed
46+
47+
This process is followed when one intends to make "substantial" changes to the
48+
Nix ecosystem. What constitutes a "substantial" change is evolving based on
49+
community norms, but may include the following.
50+
51+
* Any semantic or syntactic change to the language that is not a bugfix
52+
* Removing language features
53+
* Big restructuring of nixpkgs
54+
* Expansions to the scope of nixpkgs (new arch, major subprojects, ...)
55+
* Introduction of new interfaces or functions
56+
57+
Certain changes do not require an RFC:
58+
59+
* Adding, updating and removing packages in nixpkgs
60+
* Fixing security updates and bugs that don't break interfaces
61+
62+
Pull requests that contain any of the afore mentioned 'substantial' changes may be closed if there is no RFC connected to the proposed changes.
63+
64+
## Description of the process
65+
66+
In short, to get a major feature added to the Nix ecosystem, one should first
67+
go through the RFC process in order to improve the likelyhood of inclusion.
68+
Here are roughly the steps that one would take:
69+
70+
* Fork the RFC repo https://github.com/NixOS/rfcs
71+
* Copy `0000-template.md` to `rfcs/0000-my-feature.md` (where 'my-feature' is
72+
descriptive. don't assign an RFC number yet).
73+
* Fill in the RFC
74+
* Submit a pull request. Rename the rfcs with the PR number. (eg: PR #123 would
75+
be `rfcs/0123-my-feature.md`)
76+
77+
At this point, the person submitting the RFC should find at least one "co-author"
78+
that will help them bring the RFC to completion. The goal is to improve the
79+
chances that the RFC is both desired and likely to be implemented.
80+
81+
Once the author is happy with the state of the RFC, they should seek for
82+
wider community review by stating the readyness of the work. Advertisement on
83+
the mailing-list and IRC is an acceptable way of doing that.
84+
85+
After a number of rounds of review the discussion should settle and a general
86+
consensus should emerge. This bit is left intentionally vague and should be
87+
refined in the future. We don't have a technical commitee so controversial
88+
changes will be rejected by default.
89+
90+
If a RFC is accepted then authors may implement it and submit the feature as a
91+
pull request to the Nix or nixpkgs repo. An 'accepted' RFC is not a rubber
92+
stamp, and in particular still does not mean the feature will ultimately be
93+
merged; it does mean that in principle all the major stakeholders have agreed
94+
to the feature and are amenable to merging it.
95+
96+
Whoever merges the RFC should do the following:
97+
98+
* Fill in the remaining metadata in the RFC header, including links for the
99+
original pull request(s) and the newly created issue.
100+
* Commit everything.
101+
102+
If a RFC is rejected, whoever merges the RFC should do the following:
103+
* Move the rfc to the rejected folder
104+
* Fill in the remaining metadata in the RFC header, including links for the
105+
original pull request(s) and the newly created issue.
106+
* Include a summary reason for the rejection
107+
* Commit everything
108+
109+
## Role of the "co-author"
110+
111+
The goal for assigning a "co-author" is to help move the RFC along.
112+
113+
The co-author should:
114+
* be available for discussion with the main author
115+
* respond to inquiries in a timely manner
116+
* help with fixing minor issues like typos so community discussion can stay
117+
on design issues
118+
119+
The co-author doesn't necessarily have to agree with all the points of the RFC
120+
but should generally be satisfied that the proposed additions are a good thing
121+
for the community.
122+
123+
# Drawbacks
124+
[drawbacks]: #drawbacks
125+
126+
There is a risk that the additional process will hinder contribution more
127+
than it would help. We should stay alert that the process is only a way to
128+
help contribution, not an end in itself.
129+
130+
# Alternatives
131+
[alternatives]: #alternatives
132+
133+
Retain the current informal RFC process. The newly proposed RFC process is
134+
designed to improve over the informal process in the following ways:
135+
136+
* Discourage unactionable or vague RFCs
137+
* Ensure that all serious RFCs are considered equally
138+
* Give confidence to those with a stake in the Nix ecosystem that they
139+
understand why new features are being merged
140+
141+
As an alternative, we could adopt an even stricter RFC process than the one
142+
proposed here. If desired, we should likely look to Python's [PEP] process for
143+
inspiration.
144+
145+
# Unresolved questions
146+
[unresolved]: #unresolved-questions
147+
148+
To be solved in the future:
149+
150+
1. Does this RFC strike a favorable balance between formality and agility?
151+
2. Does this RFC successfully address the aforementioned issues with the current
152+
informal RFC process?
153+
154+
[PEP]: http://legacy.python.org/dev/peps/pep-0001/

0 commit comments

Comments
 (0)