Skip to content

RFC to describe the RFC process #1

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

Merged
merged 39 commits into from
Mar 18, 2017
Merged
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
81cca13
RFC to describe the RFC process
zimbatm Feb 12, 2017
d7e0e45
Introduce requirement for "buddy"
zimbatm Feb 12, 2017
254918a
Fix nbp's nit
zimbatm Feb 13, 2017
08b081a
First stab at defining the buddy responsibilities
zimbatm Feb 15, 2017
1a37875
Add more reasons for RFC
zimbatm Feb 15, 2017
6563750
Update non-RFC list
zimbatm Feb 15, 2017
65d32e1
Gender neutrality FTW
zimbatm Feb 15, 2017
60435ae
More gender neutrality
zimbatm Feb 15, 2017
48e3cef
Remove the notion of "core team"
zimbatm Feb 16, 2017
2d315c6
Rename buddy to co-author
zimbatm Mar 1, 2017
b3db396
Move RFC numbering to the author
zimbatm Mar 1, 2017
983dca3
nit: use bullets for all lists
zimbatm Mar 1, 2017
f85da8d
Fix RFC number
zimbatm Mar 1, 2017
f57da71
Temporary Revert "Fix RFC number"
zimbatm Mar 1, 2017
d70b98a
Added teh as co-author
zimbatm Mar 5, 2017
3972bd9
Clarify the role of the co-author
zimbatm Mar 5, 2017
02853d4
Clarify that it's bootstrapping
zimbatm Mar 8, 2017
ba9b2f1
Add MoreTea as a co-author
zimbatm Mar 8, 2017
1dd4761
Try metadata
zimbatm Mar 8, 2017
eeba755
metadata try2
zimbatm Mar 8, 2017
7b2e539
Describe the process a bit better
zimbatm Mar 8, 2017
84657e0
Clarify unresolved questions
zimbatm Mar 8, 2017
678670c
typo
zimbatm Mar 8, 2017
097c1d4
tyyyypooo
zimbatm Mar 8, 2017
b674159
Add link to implementation PR
zimbatm Mar 8, 2017
9322c2e
Capitalize Nix
zimbatm Mar 11, 2017
4464a7e
Refine motivation explanation
zimbatm Mar 11, 2017
92cb660
language adjustment
zimbatm Mar 11, 2017
0f4a464
Remove controversial change
zimbatm Mar 11, 2017
b1d580b
engrish fix
zimbatm Mar 11, 2017
e6de427
Avoid using 'you'
zimbatm Mar 11, 2017
ad8bb6c
Title fix
zimbatm Mar 11, 2017
dd962df
typo
zimbatm Mar 11, 2017
9faf879
Removed bullet point
zimbatm Mar 11, 2017
1eb8a17
fix engrish
zimbatm Mar 11, 2017
fb723ea
engrish
zimbatm Mar 11, 2017
c28db71
Refine description of the process
zimbatm Mar 11, 2017
9830d2d
Describe the rejected state
zimbatm Mar 11, 2017
0b188c5
typos
zimbatm Mar 18, 2017
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
154 changes: 154 additions & 0 deletions rfcs/0000-rfc-process.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
---
feature: rfc-process
start-date: 2017-02-12
author: zimbatm
co-authors: teh, MoreTea
related-issues: https://github.com/zimbatm/rfcs/pull/2
---

# Summary
[summary]: #summary

The "RFC" (request for comments) process is intended to provide a consistent
and controlled path for new features to enter the Nix language, packages and
OS, so that all stakeholders can be confident about the direction the
ecosystem is evolving in.

# Motivation
[motivation]: #motivation

There are a number of changes that are significant enough that they could
benefit from wider community consensus before being implemented. Either
because they introduce new concepts, big changes or are controversial enough
that not everybody will agree on the direction to take.
Copy link
Member

Choose a reason for hiding this comment

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

Therefore, the purpose of this RFC is ...

Copy link
Member Author

Choose a reason for hiding this comment

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


Therefore, the purpose of this RFC is to introduce a process that allows to
bring the discussion upfront and avoid unnecesary implementations. It forces
developers to formulate their ideas without getting bogged down into
implementation details. This RFC is used to bootstrap the process and further
RFCs can be used to refine the process.

# Detailed design
[design]: #detailed-design

Many changes, 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.

This is the bulk 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, and include examples of how the feature is
used.

## 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
community norms, but may include the following.

* Any semantic or syntactic change to the language that is not a bugfix
* Removing language features
* Big restructuring of nixpkgs
* Expansions to the scope of nixpkgs (new arch, major subprojects, ...)
* Introduction of new interfaces or functions

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 afore mentioned 'substantial' changes may be closed if there is no RFC connected to the proposed changes.

## Description of the process

In short, to get a major feature added to the Nix ecosystem, one should first
go through the RFC process in order to improve the likelyhood of inclusion.
Here are roughly the steps that one would take:

* Fork the RFC repo https://github.com/NixOS/rfcs
* Copy `0000-template.md` to `rfcs/0000-my-feature.md` (where 'my-feature' is
descriptive. don't assign an RFC number yet).
* Fill in the RFC
* Submit a pull request. Rename the rfcs with the PR number. (eg: PR #123 would
be `rfcs/0123-my-feature.md`)
Copy link
Member

Choose a reason for hiding this comment

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

I don't think we should use PR numbers because I can imagine that at some point we may want to make minor changes and those changes could go through PR's. If you want to link to a discussion, I think it is better to be explicit about it in the RFC.

Copy link
Member

Choose a reason for hiding this comment

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

We might be keeping the number of the PR that first introduced the RFC. There are some advantages to having a stable identifier already when the discussion starts, and keeping it forever. (I sometimes slightly struggle with this "renaming" of IETF RFCs.)

Copy link
Member

Choose a reason for hiding this comment

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

Maintainers of this rfc repo can assign a RFC number when a PR is opened so it can be used directly. I agree it makes sense to always include the PR number in the RFC.

Copy link
Member Author

Choose a reason for hiding this comment

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

What alternative numbering system do you propose? Numbering by PR makes it easy to avoid having two RFCs with the same number. It's not a big deal if RFCs are not numbered continuously.

Copy link
Member

Choose a reason for hiding this comment

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

Continuous numbering with RFC repo maintainers assigning a RFC number after a draft of the RFC has been approved and merged.

I think PEP 1 may be a good source of inspiration, although I am not familiar with RFC's in other projects so I can't really compare.

Copy link
Member Author

Choose a reason for hiding this comment

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

I don't really see the advantage. Numbering by PR allows the author to obtain his number without having to coordinate with other people. It's an implementation detail but github tends to lose comments on renaming of a file so if the author can submit his PR and rename straight away then it makes this easier. On this very PR I couldn't rename it because comments had already started on the file.


At this point, the person submitting the RFC should find at least one "co-author"
that will help them bring the RFC to completion. The goal is to improve the
chances that the RFC is both desired and likely to be implemented.

Once the author is happy with the state of the RFC, they should seek for
wider community review by stating the readyness of the work. Advertisement on
the mailing-list and IRC is an acceptable way of doing that.

After a number of rounds of review the discussion should settle and a general
consensus should emerge. This bit is left intentionally vague and should be
refined in the future. We don't have a technical commitee so controversial
changes will be rejected by default.

If a RFC is accepted then authors may implement it and submit the feature as a
pull request to the Nix or nixpkgs repo. An 'accepted' RFC 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.

Whoever merges the RFC should do the following:

* Fill in the remaining metadata in the RFC header, including links for the
original pull request(s) and the newly created issue.
* Commit everything.

If a RFC is rejected, whoever merges the RFC should do the following:
* Move the rfc to the rejected folder
Copy link
Member

Choose a reason for hiding this comment

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

If the status is rejected then what's the point of putting it in a separate folder? And how about other statuses? Will they also be put in separate folders?

Copy link
Member

Choose a reason for hiding this comment

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

What other statuses? In the beginning they're unmerged and they should get either merged (among accepted) or "merged" into the rejected folder.

Copy link
Member

@vcunat vcunat Mar 16, 2017

Choose a reason for hiding this comment

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

From previous discussion it seemed useful that we somehow "permanently record" each rejected proposal with a summary of arguments, including why it was rejected. Keeping all the information just in PR discussion threads has some disadvantages.

Copy link
Member Author

Choose a reason for hiding this comment

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

Just to restate the goal: the goal is to keep a record of any unsuccessful PRs because on github it's possible for the submitter of the PR to remove the original code and then the context is lost.

In that regards, the rejected folder should contain any RFC that is not accepted. It would also include abandoned RFCs. If you have a better name for it I'm happy to change it.

Copy link
Member

Choose a reason for hiding this comment

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

I'm of the opinion we should merge RFC's sooner and assign them a draft status.

* Fill in the remaining metadata in the RFC header, including links for the
original pull request(s) and the newly created issue.
* Include a summary reason for the rejection
* Commit everything

## Role of the "co-author"

The goal for assigning a "co-author" is to help move the RFC along.

The co-author should:
* be available for discussion with the main author
* respond to inquiries in a timely manner
* help with fixing minor issues like typos so community discussion can stay
on design issues

The co-author doesn't necessarily have to agree with all the points of the RFC
but should generally be satisfied that the proposed additions are a good thing
for the community.

# Drawbacks
[drawbacks]: #drawbacks

There is a risk that the additional process will hinder contribution more
than it would help. We should stay alert that the process is only a way to
help contribution, not an end in itself.

# Alternatives
[alternatives]: #alternatives
Copy link
Member

Choose a reason for hiding this comment

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

I do not understand why Alternatives is even a section in an RFC. What purpose does it serve?

If I understand correctly, when we are discussing about designs, we want explore multiple alternatives, including the first Design & drawbacks, and have one for each alternative. Or we should discuss the alternatives as part of the pull request for adding modifications to the RFC.

Copy link
Member Author

Choose a reason for hiding this comment

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

The idea is to list prior-art. This mainly shows that the author has done research. I agree that it would be nice to also have a justification of why those aren't adequate but that's not a strict requirement. Some of them might be obvious (eg: already discarded).

Copy link
Member

Choose a reason for hiding this comment

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

If its for prior-art then I'm of the opinion it should be mentioned before the actual proposal, and should be discussed at that point.

@nbp
If I would write a report where I investigate possible solutions, then I would do also as you say, have a section per alternative, and then a discussion where one (or none) is chosen. I can imagine that in a NEP (that's how we're going to call them, right? Nix Enhancement Proposal) that choice has already been made by the authors of the NEP and therefore they're only discussed briefly either before or after the actual proposal.

Copy link
Member Author

Choose a reason for hiding this comment

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

Submitting a RFC is already a pretty big barrier for community work, I'm a bit concerned of putting a too formal process in place.


Retain the current informal RFC process. The newly proposed RFC process is
Copy link
Member

Choose a reason for hiding this comment

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

ah, so it was intended to be informal, I didn't get that :)

Copy link
Member Author

Choose a reason for hiding this comment

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

And I aswered to all your other comments :)

designed to improve over the informal process in the following ways:

* Discourage unactionable or vague RFCs
* Ensure that all serious RFCs are considered equally
* Give confidence to those with a stake in the Nix ecosystem that they
understand why new features are being merged

As an alternative, we could adopt an even stricter RFC process than the one
proposed here. If desired, we should likely look to Python's [PEP] process for
inspiration.

# Unresolved questions
[unresolved]: #unresolved-questions

To be solved in the future:
Copy link
Member

Choose a reason for hiding this comment

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

Is there an RFC process for updating the RFC process?

Copy link
Member Author

Choose a reason for hiding this comment

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

Anther RFC why ? :D
To be real, in most cases I think we can just submit a PR with the proposed changes to the README.md


1. Does this RFC strike a favorable balance between formality and agility?
2. Does this RFC successfully address the aforementioned issues with the current
informal RFC process?

[PEP]: http://legacy.python.org/dev/peps/pep-0001/