# OpenTitan RFC Process

## Introduction

The OpenTitan RFC process is the mechanism by which technical proposals can be reviewed and voted upon by the Technical Committee (TC).
More generally, the RFC process ensures changes are appropriately reviewed, gives the contributor community opportunity to give feedback, and helps ensure alternative implementation options are also evaluated.
Many other open source projects implement such a process with varying degrees of formality, e.g. Python Enhancement Proposals, RFCs in the LLVM community, and more.

RFCs can't be used for resource allocation or to "force" other people to do some work.
E.g. "Implement IP block X" is not a useful RFC unless either the proposer is willing to do that work or someone else is interested in pursuing it.

This document outlines the basic structure of the RFC process, with the expectation that it will evolve over time based on the experience of active contributors.

## RFC lifetime

* [Optional: Seek feedback on whether an RFC is desired.
  This is recommended for a lengthy "out of the blue" proposal, to ensure time isn't wasted writing up a detailed proposal for something that is out of scope or that can't be decided upon at this stage.]
* An author (or set of authors) writes an RFC.
  This might be triggered simply by an idea, by a discussion in a meeting, or by a request from a Committer after submitting a PR.
  The TC will maintain examples of high quality RFCs to refer to in terms of structure and approach.
* The RFC authors may solicit early feedback while preparing an RFC, possibly before sharing publicly.
   * If requested, the TC could help to nominate a small group to shepherd the RFC.
* If the RFC potentially contains information that could be certification-sensitive (guidance to be shared), send a note to security@opentitan.org first for feedback.
* The RFC is shared publicly by filing a GitHub issue and tagging with the `RFC:Proposal` label.
* Once the author is happy that the RFC is complete, they submit it to the Technical Committee by converting the label to `RFC:TC Review`.
* The Technical Committee will consider active RFCs in each meeting (those that have been marked with `RFC:TC Review` for at least a week).
  If an RFC saw large changes in the week it has been "ready" the TC may postpone judgment in order to allow more comment.
  They will decide whether to:
   * **Accept**: Indicate they are happy for this proposal to be implemented.
     May be conditional on certain changes.
     The TC will change the label from `RFC:TC Review` to `RFC:Approved` in this outcome.
   * **Reject**: Decided against the proposal at this time.
     The label `RFC:TC Review` will be removed by the TC.
   * **Postpone**: The proposal seemed to have the right level of detail and form, but the project won't be making a decision on it at this time (e.g. refers to work that is scheduled too far in the future).
     The TC will revert the label from `RFC:TC Review` back to `RFC:Proposal`.
     In the case where the TC has not had sufficient time to complete review during a meeting, the label `RFC:TC Review` will remain in place until the review has completed.
   * **Request revision**: The TC feel they could make an accept/reject decision if certain changes were made (e.g. fleshing out a description of alternate approaches, considering changes to the approach etc).
     The TC will revert the label from `RFC:TC Review` back to `RFC:Proposal` until revisions have been completed.
   * **Abstain with comment**: The TC feel that the issue does not require TC arbitration.
     The TC may leave comment suggesting the next action for the RFC, perhaps indicating where the issue should be resolved, such as in one of the other committees.
     The TC will remove the `RFC:TC Review` label in this case.

RFCs should be created at least for any major new piece of code (e.g. IP block), or cross-cutting changes that need careful consideration.
Generally speaking, an RFC should be created when there is demand for one (especially when that request comes from a Committer).
Although it is a power that is not expected to be deployed regularly, RFCs may be unilaterally approved/rejected by the Project Director.
Even in these cases, they would likely still follow the normal review and feedback process.

## Potential future RFC process refinements

The process has been kept as simple as possible to start with, closely mimicking the informal consensus approach being used in the early stages of the OpenTitan project.
However, there are a range of potential improvements that it may make sense for the Technical Committee and wider contributor community to explore:

* We currently have no particular rule on RFC format and structure.
  It may be useful to at least suggest a structure for certain categories of changes (e.g. outline of headings).
* [Rust RFCs](https://rust-lang.github.io/rfcs/) and the [Kotlin Evolution and Enhancement Process](https://github.com/Kotlin/KEEP) both introduce the idea of a "Shepherd", which we may want to adopt.
* If the volume of RFCs increased to the point it was too time consuming for the Technical Committee to handle each review request, the TC may delegate some responsibility for pre-filtering.
  E.g. the Chair/Vice-Chair may make a determination on whether an RFC has attracted sufficient support for further discussion.
