I’m posting here because during RFCSC meetings we frequently see RFCs that seem to have reached agreement but stall out because the authors are working on an implementation and want to wait for that to be ready before merging the RFC. I thought it would be interesting to put this to discussion and see if everyone is on the same page and what the different points of view are.
The question is:
Should implementations block RFCs from entering FCP and being accepted, or should the RFC go to FCP as soon as there is general agreement in the community?
My personal stance is this:
RFCs are a way to document the position of the community. Accepting an RFC means “Given the information we had when when discussing this RFC; the Nix community believes that this is the right path forward.”
Notably they are not a promise that something will be done by anyone in particular (or anyone at all). Someone has to still put in the time and effort to contribute the feature discussed. However they should not expect any resistance to merging the feature once implemented (aside from quality of the implementation itself) as the community has agreed that this is the right direction.
An RFC is also not a law that must be followed forever. In light of new evidence the decision of the RFC may no longer be relevant.
Therefore, I see an implementation as unnecessary for an RFC, and should not block FCP. I do think that prototyping/initial implementation can be helpful to ensure that we have a good understanding of the problem at hand, but once we believe that we understand the problem we should move forward with FCP and accepting the RFC. Worst case we hit an unforseen major issue and a second RFC can be opened explaining why the original was not actually a suitable option. But in the vast majority of cases only small changes need to be made during implementation (that wouldn’t require an RFC).
In fact I may go as far to say that the main point of most technical RFCs should be to ensure that there is agreement on the approach before implementation. If the implementation is already complete you may as well just open a PR and discuss there. (Of course in practice these RFCs with implementations generally grow together, so it is a bit different.) Not every change needs an RFC, they are a tool for avoiding wasting time doing work that may not be accepted.
This general discussion has come up a few times in RFCSC meetings and it seems that in general they agree with my point of view. But I just wanted to take the chance to extend this discussion to more of the Nix community to ensure that we are all on the same page.
If we are on the same page, it may be worth updating the RFC documentation to highlight this. For example it talks about “substantial changes” which I don’t particularly agree with. I see the RFC process more about agreement on potentially controversial ideas. The document does say “RFC documents are intended to be seen as the documentation of a decision and a snapshot of a moment in time” but it is “hidden” in The RFC life-cycle section. In fact the document seems to lack any explanation of what accepting an RFC means.