Skip to content
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

Closed
wants to merge 29 commits into from
Closed
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
9fe54e6
Start: Propose RFC Categories
May 20, 2021
cd48c4d
Add some "meat" (feedback @asymmetric)
May 20, 2021
fdc9d5d
Fixup wordings / typos
May 20, 2021
141b575
Differentiate RFC templates
Jun 11, 2021
986d268
Move all "legacy" RFCs into correct categories
Jun 11, 2021
db237d5
Update Readme with RFC Categories (implied) changes
Jun 11, 2021
4478db4
Polish wording a bit, update where in order
Jun 12, 2021
be5eb70
fixup: typo
Jun 12, 2021
653c373
fixup: typo
Jun 12, 2021
8359e65
Add Shepherds
blaggacao Jul 11, 2021
b2d5489
Revert "Move all "legacy" RFCs into correct categories"
blaggacao Jul 21, 2021
e9bea2a
... and use metadata instead as discussed in last shepherd meeting
blaggacao Jul 21, 2021
d8172a6
Exemplify and extend motivation ("more meat")
blaggacao Jul 21, 2021
bca690e
Update templates & clarify "stakeholder"
blaggacao Jul 21, 2021
3017cb6
fix RFC46 categorization after having a closer look
blaggacao Jul 21, 2021
0a7063a
Examples & Interactions wording
blaggacao Jul 21, 2021
9861b53
Update 0000-template-informational.md
Jul 21, 2021
defa62d
Update 0000-template-process.md
Jul 21, 2021
5a91b5f
Update README.md
Jul 21, 2021
f6b1f0e
fix: wordings
Jul 26, 2021
c5817cd
fix: wordings
Jul 26, 2021
9649d54
fixup: typo
Jul 26, 2021
e817588
fix: wordings
Jul 26, 2021
91a7376
fix: wordings
Jul 26, 2021
dee0b81
fix: wordings
Jul 26, 2021
5145689
Revert readme related changes
blaggacao Aug 30, 2021
2268ea8
Re-add related readme changes
blaggacao Aug 30, 2021
6ed720b
Fix metadata
blaggacao Aug 30, 2021
140779e
Add index as suggested to make this RFC immediately more useful
blaggacao Aug 30, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 18 additions & 12 deletions 0000-template.md → 0000-template-feature.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,51 +8,57 @@ shepherd-leader: (name to be appointed by RFC steering committee)
related-issues: (will contain links to implementation PRs)
Copy link
Member

@Mic92 Mic92 Jul 10, 2021

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.

Copy link
Contributor

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.

---

<!--
If you are proposing a feature to Nix, Nixpkgs, Hydra or any other
software developped by the nix community, this is the template
blaggacao marked this conversation as resolved.
Show resolved Hide resolved
you want to use.
-->

# Summary
[summary]: #summary

One paragraph explanation of the feature.
<!-- One paragraph explanation of the feature. -->

# Motivation
[motivation]: #motivation

Why are we doing this? What use cases does it support? What is the expected
outcome?
<!-- Why are we doing this? What use cases does it support? What is the expected
outcome? -->

# Detailed design
[design]: #detailed-design

This is the core, normative part of the RFC. Explain the design in enough
<!-- This is the core, normative part of the RFC. Explain the design in enough
detail for somebody familiar with the ecosystem to understand, and implement.
This should get into specifics and corner-cases. Yet, this section should also
be terse, avoiding redundancy even at the cost of clarity.
be terse, avoiding redundancy even at the cost of clarity. -->

# Examples and Interactions
[examples-and-interactions]: #examples-and-interactions

This section illustrates the detailed design. This section should clarify all
<!-- This section illustrates the detailed design. This section should clarify all
confusion the reader has from the previous sections. It is especially important
to counterbalance the desired terseness of the detailed design; if you feel
your detailed design is rudely short, consider making this section longer
instead.
instead. -->

# Drawbacks
[drawbacks]: #drawbacks

Why should we *not* do this?
<!-- Why should we *not* do this? -->

# Alternatives
[alternatives]: #alternatives

What other designs have been considered? What is the impact of not doing this?
<!-- What other designs have been considered? What is the impact of not doing this? -->

# Unresolved questions
[unresolved]: #unresolved-questions

What parts of the design are still TBD or unknowns?
<!-- What parts of the design are still TBD or unknowns? -->

# Future work
[future]: #future-work

What future work, if any, would be implied or impacted by this feature
without being directly part of the work?
<!-- What future work, if any, would be implied or impacted by this feature
without being directly part of the work? -->
35 changes: 35 additions & 0 deletions 0000-template-informational.md
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
Copy link
Contributor

Choose a reason for hiding this comment

The 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.

Copy link
Contributor Author

Choose a reason for hiding this comment

The 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.

Copy link
Contributor

Choose a reason for hiding this comment

The 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.
Copy link
Contributor

Choose a reason for hiding this comment

The 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?

Copy link
Contributor Author

Choose a reason for hiding this comment

The 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.
Copy link
Contributor

Choose a reason for hiding this comment

The 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?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"feature" RFCs are intended to record official changes to nixpkgs, nix, etc. worthy of an RFC process. An experiment wouldn't necesarily fit into that category,neven if it's a technical experiment.

- Record high-stake proof-generated insight.
Copy link
Contributor

Choose a reason for hiding this comment

The 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
92 changes: 92 additions & 0 deletions 0000-template-process.md
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
Copy link
Contributor

Choose a reason for hiding this comment

The 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?

Copy link
Contributor Author

Choose a reason for hiding this comment

The 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. -->
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BPMN 2.0 notation?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll clarify that, BPMN 2.0 is a specific imppementation (one of the more widely used) to graphically denote processes (= "process diagrams").

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How well does this integrate into markdown/github?

Copy link
Contributor Author

@blaggacao blaggacao Jul 24, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How well does this integrate into markdown/github?

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 -->
89 changes: 56 additions & 33 deletions README.md
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
Copy link
Contributor

Choose a reason for hiding this comment

The 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.

Copy link
Contributor Author

Choose a reason for hiding this comment

The 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
Expand Down Expand Up @@ -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_.
Copy link
Contributor

Choose a reason for hiding this comment

The 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.
Copy link
Contributor

Choose a reason for hiding this comment

The 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.
Copy link
Contributor

Choose a reason for hiding this comment

The 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?

Copy link
Contributor Author

@blaggacao blaggacao Jul 21, 2021

Choose a reason for hiding this comment

The 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?

Copy link
Contributor

Choose a reason for hiding this comment

The 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
Expand Down Expand Up @@ -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.
Copy link
Contributor

Choose a reason for hiding this comment

The 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.

Copy link
Contributor Author

Choose a reason for hiding this comment

The 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.

Copy link
Contributor

Choose a reason for hiding this comment

The 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.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe s/feature/change/? It may also make sense to indicate that not all RFCs prompt change. How about:

Once an RFC is accepted it may be implemented if any further work is required. This may be via a pull request to the nix or Nixpkgs repo or via other means. Being accepted is not a rubber stamp, and in particular still does not mean the change will ultimately be enacted; it does mean that in principle all the major stakeholders have agreed to the
change and are amenable to its implementation as long as there are no substantial technical objections to the implementation.


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
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading