-
-
Notifications
You must be signed in to change notification settings - Fork 159
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC 0093] Propose RFC Categories #93
Changes from 7 commits
9fe54e6
cd48c4d
fdc9d5d
141b575
986d268
db237d5
4478db4
be5eb70
653c373
8359e65
b2d5489
e9bea2a
d8172a6
bca690e
3017cb6
0a7063a
9861b53
defa62d
5a91b5f
f6b1f0e
c5817cd
9649d54
e817588
91a7376
dee0b81
5145689
2268ea8
6ed720b
140779e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
--- | ||
information: (fill me in with a unique ident, my_new_fact) | ||
start-date: (fill me in with today's date, YYYY-MM-DD) | ||
author: (name of the main author) | ||
co-authors: (find a buddy later to help out with the RFC) | ||
shepherd-team: (names, to be nominated and accepted by RFC steering committee) | ||
shepherd-leader: (name to be appointed by RFC steering committee) | ||
relates-to: | ||
- [RFC 0000 my_other_information]() | ||
--- | ||
|
||
<!-- | ||
If you are seeking to gather consensus on a fact, or seek general acceptance about | ||
a new information, then use this template. | ||
The fact or information should be sufficiently important to require an RFC process | ||
Some examples are, without being an exhaustive list: | ||
- Start a talk, meetup, or social networking account that will be expected to | ||
officially “represent nix” | ||
Comment on lines
+19
to
+20
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This seems to happen so infrequently that I'm not sure it's a good example of something we should change the RFC process for. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. In this context of a template comment, I think, it does add to give the reader an aproximate sense of what can be considered informational. Removing it, IMO, would not further the reader's understanding, here. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think the point is that there are a lot of rare types of things, but together they are not so infrequent. I agree that this category is somewhat vague and "miscellaneous" but I think that is useful to have. Worst case we find this category isn't useful, and split, merge or remove it. I think that with the current proposal the changing of categories (or removing them altogether) is cheap if we don't find value. |
||
- Document design issues, or recording the decision to _not_ act upon something. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Isn't a design issue also a technical one? I imagine someone would propose a design in a standard RFC, and whether it gets accepted or rejected, we have a "paper-trail" of the discussion and its conclusion. Why would we need a separate RFC to "enshrine" the output of the discussion? Who would write that? What happens to the design decisions that no one writes an informational RFC about? In general, can't we document designs in the documentation? And what are examples of things we would not act upon, but write an informational RFC about? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The problem with current RFCs are that they start from a "change" (hence also change -> idea renaming). However, there currently doesn't seem to be a venue for officializing tribal practice. Such acknowledgments not always root in a failed proposal for change. I don't have any good examples. This is an exemplary list item for the general concept of informational RFCs. I have redacted this list (or taken from bors) to convey a general idea of what could be "informational". I didn't intent to make every item water tight. Maybe "informational" is indeed a misnomer, on the other hand going through past RFCs, there are a few that seem to somehow fit into this category, for example RFC46. I'd rather be concerned if the reader get's a general and useful enough idea of what could be informational RFCs. I guess the defining element is that they are not centered around a proposed action but around generating consensus about a proposed "fact"/"information". |
||
- Proposing an experiment. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This seems like a strange loophole. If the experiment is technical, then it should be a technical RFC, shouldn't it? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "feature" RFCs are intended to record official changes to |
||
- Record high-stake proof-generated insight. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't understand what this means. I'd either remove it or reword it to make it clearer. |
||
--> | ||
|
||
# Summary | ||
[summary]: #summary | ||
|
||
<!-- One paragraph to resume this document. --> | ||
|
||
In order to address "X", I/we propose to "Y". | ||
|
||
# My Structure | ||
|
||
<!-- This template does not have a recommended structure, please use your best | ||
judgment for your particular case. --> | ||
blaggacao marked this conversation as resolved.
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
--- | ||
process: (fill me in with a unique ident, my_new_process) | ||
start-date: (fill me in with today's date, YYYY-MM-DD) | ||
author: (name of the main author) | ||
co-authors: (find a buddy later to help out with the RFC) | ||
shepherd-team: (names, to be nominated and accepted by RFC steering committee) | ||
shepherd-leader: (name to be appointed by RFC steering committee) | ||
modifies: | ||
- [RFC 0000 my_old_process]() | ||
--- | ||
|
||
<!-- | ||
If you are proposing to change a process with regard of how the nix community | ||
conducts, then use this template. Some examples are, without being an exhaustive list: | ||
- Change the RFC process, the organization of the issue tracker or the forum | ||
- Change community workflows or other comunity infrastructure | ||
- Amend the code of conduct and similar high level normative documents | ||
Comment on lines
+17
to
+19
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What do we gain by having these process changes live in a separate namespace than the technical ones? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Most importantly: a different template that focuses on process change. The hope is also, that participants will be assisted in having more informed discussion by the acknowledging explicitly the rfc category all by itself. |
||
--> | ||
|
||
# Summary | ||
[summary]: #summary | ||
|
||
<!-- One paragraph to resume this document (motivation and future process). --> | ||
|
||
In order to address "X", I/we propose to "Y". | ||
|
||
# Classification | ||
[classification]: #classification | ||
|
||
<!-- Please check the relevant boxes (typically one) -- or add your own. --> | ||
|
||
- [ ] general habits and decision making | ||
- [ ] core technical protocols & processes | ||
- [ ] contributer efficiency support | ||
|
||
# Motivation | ||
[motivation]: #motivation | ||
|
||
<!-- What's wrong? Please feel encouraged to benchmark us against other | ||
(open source or other) ecosystems. --> | ||
|
||
# Current Process | ||
[as-is]: #current-process | ||
|
||
<!-- Describe the current process as it is observed out in the wild. | ||
If there has been a previous RFC for this process, please mention it, | ||
but prefer the state of the world "as-is". In a final paragraph, please | ||
describe its shortcomings and how they relate to the motivation. | ||
Make use of BPMN 2.0 notation, if you'd find that useful. --> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. BPMN 2.0 notation? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'll clarify that, There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How well does this integrate into markdown/github? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Reading through https://gitlab.com/gitlab-org/gitlab/-/issues/22365, it might be that https://kroki.io/ is a suitable answer that at least circles around your question. I think it makes sense to put a practical suggestion here on how to include such a diagram. Processes without diagrams are like bread without butter. |
||
|
||
# Future Process | ||
[to-be]: #future-process | ||
|
||
<!-- Describe the future process how you imagine it to be. | ||
In a final paragraph, please describe how this would satisfy the motivation. | ||
Please be explicit, if it only party addresses the motivation. | ||
Make use of BPMN 2.0 notation, if you'd find that useful. --> | ||
|
||
# Roles & Stakeholders | ||
|
||
<!-- Describe in abstract terms the roles involved in this process | ||
and how they are affected by this process change. Plotting estimated | ||
/ abstract time requirements of _as-is_ against _to-be_ is a plus. | ||
The idea is to get a better sense of the stakeholders of this process | ||
and their respective interestes and estimate the associated total | ||
costs imposed (mostly in time, can be negative) to the community.--> | ||
|
||
# Pros & Cons | ||
[evaluation]: #pros-and-cons | ||
|
||
<!-- Within your judgment, prefer bullet points over prose. --> | ||
|
||
## Pros | ||
|
||
|
||
## Cons | ||
|
||
|
||
# Conclusion | ||
[conclusion]: #conclusion | ||
|
||
<!-- In the greater scheme of things, to wat degree does your proposal | ||
blaggacao marked this conversation as resolved.
Show resolved
Hide resolved
|
||
satisfy the motivation. Is it meaningful? Is it important? Is it urgent? --> | ||
|
||
# Updates | ||
[updates]: #updates | ||
|
||
<!-- This space is reserved for linking or in-lining future updates to this | ||
process --> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,39 @@ | ||
# Nix RFCs (Request For Comments) | ||
|
||
Many changes, including bug fixes and documentation improvements can be | ||
Many ideas, including bug fixes and documentation improvements can be | ||
implemented and reviewed via the normal GitHub pull request workflow. | ||
|
||
Some changes though are "substantial", and we ask that these be put through a | ||
bit of a design process and produce a consensus among the Nix community. | ||
Some ideas though are "substantial", and we ask that these be put through a | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure why we're replacing changes with ideas throughout this document. This seems like a potentially contentious choice, with little upside, so I'd rather leave this out. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As stated above, probably the main purpose of informational RFCs is to record consensus on something that does not primarily originate in a change. My best word for that something has been: "idea". Maybe there is a better word? |
||
bit of a public process and produce a consensus among the Nix community. | ||
|
||
## When this process is followed | ||
|
||
This process is followed when one intends to make "substantial" changes to the | ||
Nix ecosystem. What constitutes a "substantial" change is evolving based on | ||
This process is followed when one intends to apply "substantial" ideas to the | ||
Nix ecosystem. What constitutes a "substantial" idea is evolving based on | ||
community norms, but may include the following. | ||
|
||
* Any semantic or syntactic change to the language that is not a bug fix | ||
* Removing language features | ||
* Big restructuring of Nixpkgs | ||
* Expansions to the scope of Nixpkgs (new arch, major subprojects, ...) | ||
* Introduction of new interfaces or functions | ||
* Making changes to important of formalised community processes | ||
* Record important proof-generated insights that affect the whole community | ||
* Propose an important experiment that affects the whole community | ||
* Document important design issues that affect the whole community | ||
* Start a talk/account/etc. that "officially represents the nix community" | ||
|
||
Certain changes do not require an RFC: | ||
|
||
* Adding, updating and removing packages in Nixpkgs | ||
* Fixing security updates and bugs that don't break interfaces | ||
* Starting any talk/account/etc. that does not officially represent nix | ||
* Making process changes to (language) sub-systems without being relevant | ||
to the community as a whole | ||
* Conducting experiments, recording insights or documenting design issues in | ||
(language) sub-systems that don't affect the community as a whole. | ||
|
||
Pull requests that contain any of the aforementioned 'substantial' changes may | ||
Pull requests that contain any of the aforementioned 'substantial' ideas may | ||
be closed if there is no RFC connected to the proposed changes. | ||
|
||
## Terminology | ||
|
@@ -73,28 +83,28 @@ the RFC has received ample discussion and enough of the tradeoffs have been | |
discussed. The Shepherd Team will propose to either accept or reject the RFC | ||
after the FCP. | ||
|
||
##### RFC Categories | ||
In order to do do justice to the different aspects of documents that merit | ||
generation of broad community consensus via the RFC process, we cassify each | ||
blaggacao marked this conversation as resolved.
Show resolved
Hide resolved
|
||
RFC into _feature_, _process_ and _informational_ RFCs. All follow the same | ||
blaggacao marked this conversation as resolved.
Show resolved
Hide resolved
|
||
high-level process as described above, but each category requires a different | ||
"mode of discussion", templates, critarias and judgment that it is benefical | ||
blaggacao marked this conversation as resolved.
Show resolved
Hide resolved
|
||
to the overall RFC process to identify those categories explicitly. | ||
|
||
|
||
## Process from Creation to Merge | ||
|
||
*In short, to get a major change included in Nix or Nixpkgs, one must | ||
*In short, to get a major change included in Nix, Nixpkgs or the Ecosystem, one must | ||
blaggacao marked this conversation as resolved.
Show resolved
Hide resolved
|
||
first get the RFC merged into the RFC repository as a markdown file under the | ||
`rfcs` directory. At that point the RFC is accepted and may be implemented | ||
with the goal of eventual inclusion into Nix or Nixpkgs.* | ||
|
||
0. Have a cool idea! | ||
1. Fill in the RFC. Put care into the details: RFCs that do not present | ||
convincing motivation, demonstrate understanding of the impact of the design, | ||
or are disingenuous about the drawbacks or alternatives tend to be | ||
poorly-received. You might want to create a PR in your fork of the RFCs | ||
repository to help you flesh it out with a few supporters or chat/video | ||
conference with a few people involved in the topic of the RFC. | ||
2. In case your RFC is a technical proposal, you might want to prepare a | ||
prototype of your idea to firstly make yourself aware of potential pitfalls | ||
and also help reviewers understand the RFC. Code may be able to explain some | ||
issues in short. | ||
corresponding directory. At that point the RFC is accepted and may be implemented | ||
with the goal of eventual inclusion into Nix, Nixpkgs or the Ecosystem.* | ||
blaggacao marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
0. Have a cool idea r an important information! | ||
blaggacao marked this conversation as resolved.
Show resolved
Hide resolved
|
||
1. Identify its category: _feature_, _process_ or _informational_. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Where is the guidance for picking the category? It appears to be at the start of the template so that should be specified so that a potential author knows where to look. |
||
2. Start with the correct template and follow the instructions and comments. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please specify where the templates live. |
||
3. Submit a pull request. As a pull request the RFC will receive design feedback | ||
from the larger community, and the author should be prepared to revise it in | ||
response. | ||
response. Leave them in draft while you're still actively working on them. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This one is a bit contentious too IMO. If RFC stands for Request For Comments, then it should be implied that you're requesting feedback, and that it's not necessarily fully done the moment you post it. So why create draft RFCs at all? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There is currently a draft label to denote the draft stage. This is indeed orthogonal to this RFC, but I thought it might help the RFC steering commitee once things scale up (if they do). Should I remove this as a strictly unrelated change? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it will require more definition of "you're still actively working on them" means. For example you appear to be actively working on this RFC but it is suitable to be non-draft. I think since this is orthogonal it is best to leave it out. More smaller RFCs are better. |
||
4. For the nomination process for potential members of the RFC Shepherd Team, | ||
that is specific to each RFC, anyone interested can either nominate another | ||
person or themselves to be a potential member of the RFC Shepherd Team. This | ||
|
@@ -152,28 +162,41 @@ with the goal of eventual inclusion into Nix or Nixpkgs.* | |
![RFC Process](./rfcs/0036-rfc-process.png) | ||
![Review Process](./rfcs/0036-review-process.png) | ||
|
||
### Tips | ||
|
||
###### Create Prototypes | ||
blaggacao marked this conversation as resolved.
Show resolved
Hide resolved
|
||
In case your RFC is a technical proposal, you might want to prepare a | ||
prototype of your idea to firstly make yourself aware of potential pitfalls | ||
and also help reviewers understand the RFC. Code may be able to explain some | ||
issues in short. | ||
|
||
###### Motivation First | ||
In any case, it can be a good idea to elaborate the motivation first, while | ||
leaving the PR in draft. This helps to ensure, that when the solution is | ||
discussed in the future, interested participants can have a clear and refined | ||
picture of the problem that you try to address. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I disagree on this one, as mentioned above. Also, why is this RFC touching so many parts of the RFC process? It would be better if it only focused on adding the concept of categories, IMO. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Some time ago, I acknowledged that two stage discussions are usually more informed and productive. In my experience, it tremendously helps with forming consensus, when first focusing on the motives and then, after a while, proceeding to the implementation. If the stages are not separated enough, discussion can (stressfully for all participants) take place on different levels and on different spots on the causality vector. In short: convoluted. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am not opposed to this addition but in the interest of keeping the RFC as small as possible it may be best to defer this or propose it as a separate RFC. |
||
|
||
## The RFC life-cycle | ||
|
||
Once an RFC is accepted the authors may implement it and submit the feature as a | ||
pull request to the Nix or Nixpkgs repo. Being accepted is not a rubber stamp, | ||
and in particular still does not mean the feature will ultimately be merged; it | ||
does mean that in principle all the major stakeholders have agreed to the | ||
feature and are amenable to merging it. In general though this means that the | ||
implementation will be merged as long as there are no substantial technical | ||
Once an RFC is accepted the authors may implement it and for example submit the | ||
feature as a pull request to the Nix or Nixpkgs repo. Being accepted is not a | ||
rubber stamp, and in particular still does not mean the feature will ultimately | ||
be merged; it does mean that in principle all the major stakeholders have agreed | ||
to the feature and are amenable to merging it. In general though this means that | ||
the implementation will be merged as long as there are no substantial technical | ||
objections to the implementation. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe
|
||
|
||
Furthermore, the fact that a given RFC has been accepted implies nothing about | ||
what priority is assigned to its implementation, nor does it imply anything | ||
about whether a Nix/Nixpkgs developer has been assigned the task of implementing | ||
the feature. While it is not necessary that the author of the RFC also write the | ||
implementation, it is by far the most effective way to see an RFC through to | ||
about whether a Nix/Nixpkgs community member has been assigned the task of | ||
implementing the RFC. While it is not necessary that the author of the RFC also | ||
does the implementation, it is by far the most effective way to see an RFC through to | ||
completion: authors should not expect that other project developers will take on | ||
responsibility for implementing their accepted feature. | ||
|
||
Minor modifications to accepted RFCs can be done in follow-up pull requests. We | ||
strive to write each RFC in a manner that it will reflect the final design of | ||
the feature; but the nature of the process means that we cannot expect every | ||
strive to write each RFC in a manner that it will reflect the final state of | ||
blaggacao marked this conversation as resolved.
Show resolved
Hide resolved
|
||
the world; but the nature of the process means that we cannot expect every | ||
merged RFC to actually reflect what the end result will be after implementation. | ||
|
||
In general, once accepted, RFCs should not be substantially changed. Only very | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@blaggacao Please update the shepherd-team/shepherd-leader.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the template, not the RFC itself.