Alex Bradbury | 99fcbf9 | 2019-10-22 12:21:57 -0700 | [diff] [blame] | 1 | # OpenTitan RFC Process |
| 2 | |
| 3 | ## Introduction |
| 4 | |
| 5 | The OpenTitan RFC process is the mechanism by which technical proposals can be reviewed and voted upon by the Technical Committee (TC). |
| 6 | 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. |
| 7 | 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. |
| 8 | |
| 9 | RFCs can't be used for resource allocation or to "force" other people to do some work. |
| 10 | 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. |
| 11 | |
| 12 | 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. |
| 13 | |
| 14 | ## RFC lifetime |
| 15 | |
| 16 | * [Optional: Seek feedback on whether an RFC is desired. |
| 17 | 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.] |
| 18 | * An author (or set of authors) writes an RFC. |
| 19 | 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. |
| 20 | The TC will maintain examples of high quality RFCs to refer to in terms of structure and approach. |
| 21 | * The RFC authors may solicit early feedback while preparing an RFC, possibly before sharing publicly. |
| 22 | * If requested, the TC could help to nominate a small group to shepherd the RFC. |
Alex Bradbury | 80ff95f | 2019-11-04 17:00:37 +0000 | [diff] [blame] | 23 | * 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. |
Scott Johnson | a50eb40 | 2020-07-27 12:07:37 -0700 | [diff] [blame^] | 24 | * The RFC is shared publicly by filing a GitHub issue and tagging with the `RFC:Proposal` label. |
| 25 | * Once the author is happy that the RFC is complete, they submit it to the Technical Committee for review by adding the Github label `TC Review`. |
Alex Bradbury | 99fcbf9 | 2019-10-22 12:21:57 -0700 | [diff] [blame] | 26 | * The Technical Committee will consider active RFCs in each meeting (those that have been marked ready for at least a week). |
| 27 | If an RFC saw large changes in the week it has been "ready" the TC may postpone judgement in order to allow more comment. |
| 28 | They will decide whether to: |
| 29 | * **Accept**: Indicate they are happy for this proposal to be implemented. |
| 30 | May be conditional on certain changes. |
| 31 | * **Reject**: Decided against the proposal at this time |
| 32 | * **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). |
| 33 | * **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). |
Scott Johnson | a50eb40 | 2020-07-27 12:07:37 -0700 | [diff] [blame^] | 34 | * **Abstain with comment**: The TC feel that the issue does not require TC arbitration. |
| 35 | 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. |
Alex Bradbury | 99fcbf9 | 2019-10-22 12:21:57 -0700 | [diff] [blame] | 36 | |
| 37 | 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. |
| 38 | Generally speaking, an RFC should be created when there is demand for one (especially when that request comes from a Committer). |
| 39 | Although it is a power that is not expected to be deployed regularly, RFCs may be unilaterally approved/rejected by the Project Director. |
| 40 | Even in these cases, they would likely still follow the normal review and feedback process. |
| 41 | |
| 42 | ## Potential future RFC process refinements |
| 43 | |
| 44 | 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. |
| 45 | However, there are a range of potential improvements that it may make sense for the Technical Committee and wider contributor community to explore: |
| 46 | |
| 47 | * We currently have no particular rule on RFC format and structure. |
| 48 | It may be useful to at least suggest a structure for certain categories of changes (e.g. outline of headings). |
| 49 | * [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. |
| 50 | * 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. |
| 51 | E.g. the Chair/Vice-Chair may make a determination on whether an RFC has attracted sufficient support for further discussion. |