@@ -6,14 +6,88 @@ implemented and reviewed via the normal GitHub pull request workflow.
6
6
Some changes though are "substantial", and we ask that these be put through a
7
7
bit of a design process and produce a consensus among the Nix community.
8
8
9
- The "RFC" (request for comments) process is intended to provide a consistent
10
- and controlled path for new features to enter the language and standard
11
- libraries, so that all stakeholders can be confident about the direction the
12
- ecosystem is evolving in .
9
+ This is the bulk of the RFC. Explain the design in enough detail for somebody
10
+ familiar with the ecosystem to understand, and implement. This should get
11
+ into specifics and corner-cases, and include examples of how the feature is
12
+ used .
13
13
14
- ## TODO
14
+ ## When this process is followed
15
15
16
- The first RFC will define the process around RFCs.
16
+ This process is followed when one intends to make "substantial" changes to the
17
+ Nix ecosystem. What constitutes a "substantial" change is evolving based on
18
+ community norms, but may include the following.
19
+
20
+ * Any semantic or syntactic change to the language that is not a bugfix
21
+ * Removing language features
22
+ * Big restructuring of nixpkgs
23
+ * Expansions to the scope of nixpkgs (new arch, major subprojects, ...)
24
+ * Introduction of new interfaces or functions
25
+
26
+ Certain changes do not require an RFC:
27
+
28
+ * Adding, updating and removing packages in nixpkgs
29
+ * Fixing security updates and bugs that don't break interfaces
30
+
31
+ Pull requests that contain any of the afore mentioned 'substantial' changes may be closed if there is no RFC connected to the proposed changes.
32
+
33
+ ## Description of the process
34
+
35
+ In short, to get a major feature added to the Nix ecosystem, one should first
36
+ go through the RFC process in order to improve the likelyhood of inclusion.
37
+ Here are roughly the steps that one would take:
38
+
39
+ * Fork the RFC repo https://github.com/NixOS/rfcs
40
+ * Copy ` 0000-template.md ` to ` rfcs/0000-my-feature.md ` (where 'my-feature' is
41
+ descriptive. don't assign an RFC number yet).
42
+ * Fill in the RFC
43
+ * Submit a pull request. Rename the rfcs with the PR number. (eg: PR #123 would
44
+ be ` rfcs/0123-my-feature.md ` )
45
+
46
+ At this point, the person submitting the RFC should find at least one "co-author"
47
+ that will help them bring the RFC to completion. The goal is to improve the
48
+ chances that the RFC is both desired and likely to be implemented.
49
+
50
+ Once the author is happy with the state of the RFC, they should seek for
51
+ wider community review by stating the readyness of the work. Advertisement on
52
+ the mailing-list and IRC is an acceptable way of doing that.
53
+
54
+ After a number of rounds of review the discussion should settle and a general
55
+ consensus should emerge. This bit is left intentionally vague and should be
56
+ refined in the future. We don't have a technical commitee so controversial
57
+ changes will be rejected by default.
58
+
59
+ If a RFC is accepted then authors may implement it and submit the feature as a
60
+ pull request to the Nix or nixpkgs repo. An 'accepted' RFC is not a rubber
61
+ stamp, and in particular still does not mean the feature will ultimately be
62
+ merged; it does mean that in principle all the major stakeholders have agreed
63
+ to the feature and are amenable to merging it.
64
+
65
+ Whoever merges the RFC should do the following:
66
+
67
+ * Fill in the remaining metadata in the RFC header, including links for the
68
+ original pull request(s) and the newly created issue.
69
+ * Commit everything.
70
+
71
+ If a RFC is rejected, whoever merges the RFC should do the following:
72
+ * Move the rfc to the rejected folder
73
+ * Fill in the remaining metadata in the RFC header, including links for the
74
+ original pull request(s) and the newly created issue.
75
+ * Include a summary reason for the rejection
76
+ * Commit everything
77
+
78
+ ## Role of the "co-author"
79
+
80
+ The goal for assigning a "co-author" is to help move the RFC along.
81
+
82
+ The co-author should:
83
+ * be available for discussion with the main author
84
+ * respond to inquiries in a timely manner
85
+ * help with fixing minor issues like typos so community discussion can stay
86
+ on design issues
87
+
88
+ The co-author doesn't necessarily have to agree with all the points of the RFC
89
+ but should generally be satisfied that the proposed additions are a good thing
90
+ for the community.
17
91
18
92
## License
19
93
0 commit comments