Skip to content

[RFC 0093] Propose RFC Categories #93

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

Closed
wants to merge 29 commits into from
Closed
Show file tree
Hide file tree
Changes from all 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
33 changes: 20 additions & 13 deletions 0000-template.md → 0000-template-feature.md
Original file line number Diff line number Diff line change
@@ -1,58 +1,65 @@
---
feature: (fill me in with a unique ident, my_awesome_feature)
identifier: (fill me in with a unique ident, my_awesome_feature)
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)
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.

category: feature
---

<!--
If you are proposing a feature to Nix, Nixpkgs, Hydra or any other
software developed by the nix community, this is the template
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? -->
36 changes: 36 additions & 0 deletions 0000-template-informational.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
identifier: (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]()
category: informational
---

<!--
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
judgement for your particular case. -->
Copy link
Contributor

Choose a reason for hiding this comment

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

We should probably at least keep a "Motivation" section. Even if that motivation is "To disseminate information with no further explicit action."

99 changes: 99 additions & 0 deletions 0000-template-process.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
---
identifier: (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]()
category: 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

<!--
Stakeholders are people who have an interest in the outcome of this RFC.

Please 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.
Comment on lines +68 to +73
Copy link
Contributor

Choose a reason for hiding this comment

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

I do appreciate the fact that having a separate "process" category allows us to add guidelines to this document, thereby making it clearer what is expected.

I am not sure that I would want to go through this kind of jargon to want to do that though. I'd remove mentions of BPMN, plotting time requirements and even of the word "stakeholders". The corporate-sounding language rubs me the wrong way, personally.

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 think usage of language should be both neutral and concise. We concluded in the shepherd meeting, that stakeholder is the most concise english word available here, even though originating from a organizational-philosophical context.

I think time burdon have repetedly come up as a counter argument in many process amendements, especially time requirements on maintainers.

In my opinion, suggesting to explicitly treat maintainer's interests and conscientiously assess time requirements that any change places on them might help to promote better informed discussions.


Typical stakeholders involve: maintainers, end users, corporate users
-->

# 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 what degree does your proposal
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 -->
28 changes: 28 additions & 0 deletions INDEX.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Feature RFCs
- [replace-unicode-quotes](rfcs/0004-replace-unicode-quotes.md)
- [musl-libc](rfcs/0023-musl-libc.md)
- [run-phase-changes-for-better-nix-shell-use](rfcs/0032-run-phase-changes-for-better-nix-shell-use.md)
- [config-option](rfcs/0042-config-option.md)
- [deprecate_url_syntax](rfcs/0045-deprecate-url-syntax.md)
- [dynamic-ids](rfcs/0052-dynamic-ids.md)
- [commonmark-docs](rfcs/0072-commonmark-docs.md)

# Process RFCs
- [rfc-process](rfcs/0001-rfc-process.md)
- [release-manager-nixos](rfcs/0015-release-manager.md)
- [nix-core-team](rfcs/0025-nix-core-team.md)
- [staging-workflow](rfcs/0026-staging-workflow.md)
- [rfc-process-team-amendment](rfcs/0036-rfc-process-team-amendment.md)
- [unprivileged-maintainer-teams](rfcs/0039-unprivileged-maintainer-teams.md)
- [rfcsc-rotation](rfcs/0043-rfcsc-rotation.md)
- [disband-nix-core](rfcs/0044-disband-nix-core.md)
- [mark-stale-issues](rfcs/0051-mark-stale-issues.md)
- [retired-committers](rfcs/0055-retired-committers.md)
- [retired-committers-amendment](rfcs/0071-retired-committers-amendment.md)
- [rfc_categories](rfcs/0093-rfc-categories.md)

# Informational RFCs
- [platform_support_tiers](rfcs/0046-platform-support-tiers.md)
- [nixos-release-schedule](rfcs/0080-nixos-release-schedule.md)
- [nixos-release-stablization](rfcs/0085-nixos-release-stablization.md)

54 changes: 30 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# 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

Expand All @@ -17,13 +17,18 @@ community norms, but may include the following.
* 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

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,25 +78,25 @@ 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 classify each
RFC as _feature_, _process_ or _informational_. All follow the same
high-level process as described above, but each category requires a different
"mode of discussion", templates, criteria and judgment that it is beneficial
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
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.
with the goal of eventual inclusion into Nix, Nixpkgs or the Ecosystem.

0. Have a cool idea or an important information!
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
0. Have a cool idea or an important information!
0. Have a cool idea or important information!

But I don't think this change is necessary. All RFCs are ideas.

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.
Expand Down Expand Up @@ -141,7 +146,8 @@ with the goal of eventual inclusion into Nix or Nixpkgs.*
11. In most cases, the FCP period is quiet, and the RFC is either merged or
closed. However, sometimes substantial new arguments or ideas are raised,
the FCP is canceled, and the RFC goes back into development mode.
12. In case of acceptance, the RFC Steering Committee merges the PR.
12. In case of acceptance, the RFC Steering Committee merges the PR and adds it
to the [INDEX.md](./INDEX.md).
Otherwise the RFC's pull request is closed. If no
consensus can be reached on the RFC but the idea in general is accepted, it
gets closed, too. A note is added that is should be proposed again, when the
Expand All @@ -165,15 +171,15 @@ 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
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
3 changes: 2 additions & 1 deletion rfcs/0001-rfc-process.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
---
feature: rfc-process
identifier: rfc-process
start-date: 2017-02-12
author: zimbatm
co-authors: teh, MoreTea
related-issues: https://github.com/zimbatm/rfcs/pull/2
category: process
---

# Summary
Expand Down
3 changes: 2 additions & 1 deletion rfcs/0004-replace-unicode-quotes.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
---
feature: replace-unicode-quotes
identifier: replace-unicode-quotes
start-date: 2017-03-19
author: layus
co-authors: zimbatm
related-issues:
- https://github.com/NixOS/nix/pull/1140
- https://github.com/NixOS/nix/issues/915
- https://github.com/NixOS/nix/pull/910
category: feature
---

# Summary
Expand Down
3 changes: 2 additions & 1 deletion rfcs/0015-release-manager.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
---
feature: release-manager-nixos
identifier: release-manager-nixos
start-date: 2017-07-18
author: Robin Gloster (@globin)
co-authors: Franz Pletz (@fpletz)
related-issues: --
category: process
---

# Summary
Expand Down
Loading