How To Create an RFC
Newcomers to PHP core development should read The Mysterious PHP RFC Process and How You Can Change the Web before starting the RFC process.
If you don't have the skills to fully implement your RFC and no-one volunteers to code it, there is little chance your RFC will be successful. To learn about PHP core development see References about Maintaining and Extending PHP.
- Email firstname.lastname@example.org to measure reaction to your intended proposal. State who would implement the feature, or whether the proposal is only a “concept”. Proceed with an RFC if feedback is not negative or if a detailed RFC will clarify the proposal. Mail list subscription is at http://php.net/mailing-lists.php. (Reminder: always "bottom post" your replies. Never “top post”.)
- Get wiki RFC karma (this is only required if you don't have a VCS account for php.net. PHP developers can log on with their credentials and already have the necessary karma to create RFCs):
- Register for a wiki account at https://wiki.php.net/start?do=register.
- Email email@example.com requesting RFC karma for your wiki account. In the email, remind people about the RFC you plan to create. Note that RFC karma does not automatically give you karma to vote. See https://wiki.php.net/rfc/voting#rfc_proposer
- Create the RFC:
- Log into the wiki with your wiki account.
- Navigate to a URL like https://wiki.php.net/RFC/my_RFC (use your feature name in the URL).
- Push the “Create this page” button, fill out the supplied template and save.
- Edit https://wiki.php.net/RFC and link your RFC under the “In Draft” status.
- Write the RFC.
- When your RFC is ready for discussion:
- Change the status of your RFC page to “Under Discussion”
- Change its section on https://wiki.php.net/RFC to “Under Discussion”
- Send an email to firstname.lastname@example.org introducing your RFC.
- Listen to the feedback, and try to answer/resolve all questions. Update your RFC to document all the issues and discussions. Cover both the positive and negative arguments. Put the RFC URL into all your replies.
- When discussion ends, and a minimum period of two weeks has passed since you mailed email@example.com in step 4, consider one day heads up mail on the mailing list and then you can move your RFC to “Voting” status. There should be no open questions in the RFC. Review https://wiki.php.net/RFC/voting#voting first. Consider whether the feature concept should be voted on before you invest time in implementation. Or perhaps an implementation is needed to show the feature is feasible; in this case, make it clear whether or not the current implementation is being voted on.
- Update your RFC page to “Voting” status
- Add the doodle voting macro, for example:
<doodle title="RFC name here" auth="your_username_here" voteType="single" closed="false"> * Yes * No </doodle>
- Add the voting start and end dates to the text of the RFC.
- Move your RFC on https://wiki.php.net/RFC to “Voting”.
- Send an email to firstname.lastname@example.org announcing the start of voting for your RFC. Start a new mail thread and put “[VOTE]” in the subject. Set a deadline for voting; the minimum period is two weeks.
- Based on the result of the votes and the discussion there are three possible outcomes:
- Your RFC is accepted: update the status of your RFC page and its section on https://wiki.php.net/RFC to “Accepted” and close the vote via changing closed=“false” to closed=“true” in the voting macro. When the code is merged, update the RFC and section to state which PHP version the code was merged into.
- Your RFC is declined: update the status of your RFC page and its section on https://wiki.php.net/RFC to “Declined” and close the vote via changing closed=“false” to closed=“true” in the voting macro.
- A serious issue with your RFC needs to be addressed: update the status of your RFC page and its section on https://wiki.php.net/RFC to “Under Discussion” and continue again from step 5.
- When your feature is implemented in PHP, update the RFC with:
- the version(s) it was merged to
- a link to the git commit(s)
- a link to the PHP manual entry for the feature
- a link to the language specification section (if any)