This is an old revision of the document!

PHP RFC: Abolish Narrow Margins


When the RFC process was enshrined in internal law, we were very aware that setting the bar too high for new features may reduce the number of contributors we had. We decided that it was acceptable for a “non-language feature” to be merged with only a slim majority of 50%+1.

The nomenclature “language feature” is misleading and confusing, for new contributors and old alike - some people think it is synonymous with “syntax”, others think it anything that is merged into /Zend, others think it anything that faces the end user. Various definitions have co-existed in the minds of contributors because we have never taken the effort to define exactly what “language feature” includes or excludes.

Anything merged into php-src is by definition a core part of PHP, regardless of the folder it goes into, or whether it has direct implications for our users. This is not a debatable fact: If it is distributed with PHP, it is core software.


RFC's come in the following two categories:

  • Proposals to amend or create policy documents
  • Proposals to merge code into php-src

This RFC proposes that all RFC's need to meet the same high standard.: Any vote that would result in merges into the source repository, or amend or create policy documentation must require a super majority of 2/3.

This change means that the main vote in any RFC must have a super majority.

Subsidiary votes come in the following two categories:

  1. Vote to resolve implementation details - ie. Choose between version X and version Y of an implementation for a main vote.
  2. Vote that could have been run as a separate RFC ie. Their passing would result in merges into the source repository or changes to policy documentation that would otherwise not take place, regardless of the outcome of the main vote.

A subsidiary vote of type 1 may require a slim majority (as per the current definition).

A subsidiary vote of type 2 must require a super majority (as per the current definition).

These new rules are unambiguous, and much more suited to a project the size and scope of PHP.

These rules shall apply to any RFC whose vote ends after this RFC is accepted, should this RFC be accepted.

Normative text

If this RFC is accepted, the original voting RFC will be amended as follows.

Under the “Required Majority” heading, the following text is REMOVED:

Given that changes to languages (as opposed to changes to apps or even frameworks) are for the most part irreversible - the purpose of the vote is to ensure that there's strong support for the proposed feature. It needs to be clear that there are a lot more people actively supporting the proposal, vs. people actively opposing it. We also need to ensure, as much as possible, that the decision isn't based on some arbitrary circumstances (such as a temporary marginal majority for a certain school of thought). For these reasons, a feature affecting the language itself (new syntax for example) will be considered as 'accepted' if it wins a 2/3 of the votes. Other RFCs require 50% + 1 votes to get 'accepted'.

And instead the following text is ADDED:

The primary vote of an RFC, determining overall acceptance of the proposal, may only have two voting options and requires a 2/3 majority. This means that the number of Yes votes multiplied by two must be greater than or equal to the number of No votes.

Additionally, an RFC may have secondary votes, which are used to decide implementation details. Such votes may have more than two options and may be decided by simple plurality. This means that the voting option with the most votes wins. (In the unlikely case that there is not a single option with most votes, the question will have to be resolved through some other way.)

For procedural reasons, multiple RFCs may be combined into one, in which case there may be multiple primary votes. Combining multiple RFCs into one does not allow turning a primary vote into a secondary vote.

No changes to other sections of the voting RFC are made.

Proposed Voting Choices

A straight yes/no vote, 2/3 super majority required to pass.

If this RFC passes the vote, the original voting RFC will be amended (under the heading Required Majority) to reflect current requirements, and have the version changed.

Discussion Topics

  • Suggestion that we should raise standard even higher (75%): rejected on the grounds that the bar is high enough at 2/3, we don't want less contributions, we want clearer outcomes.
  • Suggestion that we should introduce quorum: this is not the topic of this RFC.
  • Suggestion that we should change who can vote: this is not the topic of this RFC.
  • Suggestion that we should always require a reason to accompany a negative vote: this is not the topic of this RFC.


rfc/abolish-narrow-margins.1549469535.txt.gz · Last modified: 2019/02/06 16:12 by nikic