Skip to content

PHP technical committee RFC #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 38 commits into from
May 8, 2023
Merged
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
2324865
Add initial PHP technical committee RFC
bukka Mar 3, 2023
a57dcf1
Update rfc/php_technical_committee.wiki
bukka Mar 3, 2023
4b1c8de
Update rfc/php_technical_committee.wiki
bukka Mar 3, 2023
3307cad
Reword and update some parts
bukka Mar 3, 2023
6b992c1
Update TC proposal
bukka Mar 5, 2023
561a326
Update other sections in TC RFC
bukka Mar 5, 2023
0674116
Update some wording - feedback to Larry
bukka Mar 5, 2023
df81d62
Extend the TC RFC
bukka Mar 8, 2023
7e98feb
TC RFC: Improve wording and clarify some cases better
bukka Mar 10, 2023
2ea814e
Spelling fixes.
Crell Mar 15, 2023
6489ca9
Revise wording and flow of the proposal.
Crell Mar 15, 2023
743f490
Define issues to include PRs, as that makes it easier to refer to bot…
Crell Mar 15, 2023
3c3c321
Wording fixes.
Crell Mar 15, 2023
14e5b02
Minor tweaks and spelling fixes from Jakub
Crell Mar 15, 2023
bf2af66
Refine caveats on the TC slightly.
Crell Mar 15, 2023
d63aa3c
Combine RM-as-election-manager clause back into the elections part, f…
Crell Mar 15, 2023
862ad5f
Fix some wiki formatting issues
bukka Mar 16, 2023
6c7b290
Update rfc/php_technical_committee.wiki
bukka Mar 16, 2023
03f5be0
Fix TC feedback
bukka Mar 16, 2023
59e02b5
Use files for OWNERS as there might be more of them
bukka Mar 16, 2023
248b071
Some further maintainer clarifications
bukka Mar 16, 2023
57ba0c9
Remove bylaws term
bukka Mar 16, 2023
08929c2
Add Larry to authors
bukka Mar 16, 2023
a3b3967
Set TC vote as private
bukka Mar 16, 2023
2e05415
Reword introduction in TC RFC
bukka Mar 17, 2023
67f3eb5
Update rfc/php_technical_committee.wiki
bukka Mar 18, 2023
858aba3
Increase the TC voting period to two weeks
bukka Mar 18, 2023
8fd3ad9
Clarify vacancies
bukka Mar 22, 2023
1a579e6
Update TC vote
bukka Mar 22, 2023
c96690e
Clarify removal of TC
bukka Mar 22, 2023
f21942e
Update rfc/php_technical_committee.wiki
bukka Apr 3, 2023
32db419
Update rfc/php_technical_committee.wiki
bukka Apr 3, 2023
1d1ecd0
Update rfc/php_technical_committee.wiki
bukka Apr 3, 2023
880c7eb
Update rfc/php_technical_committee.wiki
bukka Apr 3, 2023
c4a9ce6
TC updates related to feedback
bukka Apr 3, 2023
30d9515
Update rfc/php_technical_committee.wiki
bukka Apr 8, 2023
ae77414
Fix formatting in TC
bukka Apr 8, 2023
c12969b
Use only CODEOWNERS for extension maintainers
bukka Apr 8, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
179 changes: 179 additions & 0 deletions rfc/php_technical_committee.wiki
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
====== PHP RFC: PHP Technical Committee ======
* Version: 1.0
* Date: 2023-03-03
* Author: Jakub Zelenka ([email protected]), Larry Garfield ([email protected])
* Status: Under Discussion

===== Introduction =====

The Open Source project that develops the PHP language and its reference implementation uses an RFC process to discuss
and vote on proposed changes. This was created mainly for user facing changes. It works well for that purpose but it is
not that effective for deciding about purely technical changes that impact PHP internals and extension APIs. It is not
clear how it should resolve technical conflicts between core developers.


===== Proposal =====

This RFC proposes an introduction of the PHP Technical Committee (TC) that would decide about all technical aspects of
php-src when there is a disagreements between core developers.
Comment on lines +17 to +18
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This RFC proposes an introduction of the PHP Technical Committee (TC) that would decide about all technical aspects of
php-src when there is a disagreements between core developers.
This RFC proposes an introduction of the PHP Technical Committee (TC) that would mediate code contribution conflicts between core developers proposing or committing changes to php-src.

"Decide about all technical aspects" is vague and will be argued back and forth. The goal is to mediate conflict which arise due to changes to php-src.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The technical aspects are actual defined so it should be clear what it is and if it is not, we should update the definition. The current statement is more vague IMO as it basically covers RFC proposed changes which is explicitly limited later in the RFC. It means that TC should never decide about commits that introduce user visible changes unless there are technical issues with that.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Btw. I'm fine if this gets rephrased in the way that will still make clear that the RFC user visible changes are not part of the decision.


==== Definitions ====

The text contains various terms that need further clarification to prevent future wording dispute. Here are their
definitions:

* php-src - Source code in https://github.com/php/php-src/.
* core developer - Anyone with write commit access to php-src.
* dev branch - php-src branch consisting of PHP- prefix and major and minor version number (e.g. PHP-8.2).
* maintainer - person responsible for core subsystem (e.g. extension or SAPI) that is listed in the php-src CODEOWNERS files.
* issue - php-src GitHub issue, including pull requests.
* process changes - Any changes impacting how the PHP project is managed.
* pull request - php-src GitHub pull request.
* RM - PHP release managers.
* user facing changes - Changes in PHP language and its semantics, user visible functions, classes, interfaces, constants and other user visible constructs.
* technical change - Any change to php-src that has no user-facing change, including the implementation details of an RFC-accepted user facing change.
* technical aspect - The portions of pull request or commit in php-src or commit to php-src master and dev branches that would be technical changes.
* technical decision - Decision on a technical aspect.
* TC - PHP Technical Committee.

To further clarify some of the defined terms, following subsection provides some useful examples.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
To further clarify some of the defined terms, following subsection provides some useful examples.
To further clarify some of the defined terms, the following subsection provides some useful examples.


=== Changes ===

It is important to clarify difference between user facing change and technical changes. As it is defined, the technical
change is any php-src change that is not a user facing change. However, the implementation of user facing change is
still a technical change. Put another way, the //definition// of the user interface is user facing only, while the
//implementation// itself is a technical change.

For example if there is a proposal to add accessors for PHP classes, then everything that is visible to user space
like the constructs and their usage in PHP code is a user facing change. The actual C implementation and tests are
a technical change.

==== TC membership ====

The TC consists of five elected members. Any core developer is eligible to run for the TC. One member of the TC,
selected by the TC members themselves, is the TC Secretary.

The TC Secretary is responsible for:

* Administering the election of the next set of TC members.
* Documenting and communicating any decisions of the TC.
* In case of a tie, the Secretary's vote will be considered the winning position.

=== Elections ===

The election process takes place annually, concurrent with the election of the Release Managers in approximately
March/April. (The exact date may vary year to year.) The sitting TC Secretary officially begins the process with
a call for nominations. The nomination period lasts for one month.

During that week, any eligible core developer may self-nominate by posting to the Internals mailing list. If the
candidate is paid to work on php-src or PHP extensions, they must state in their nomination which company or
organization they work for to prevent potential conflicts of interest. Failure to do so will result in
disqualification, as determined by the TC Secretary.

Once nominations are over, the voting process will begin. Eligible voters are the same as for any RFC.

If there are five or fewer nominees, there is no vote and all nominated individuals are elected.

If there are six or more nominees, a two week vote using the Single Transferable Vote method will take place. The five
winning candidates at the end of the vote are elected.

The newly elected TC members will elect from their own number a TC Secretary by simple majority.

=== Vacancies ===

Any TC member may resign at any time via an email to the Internals mailing list. If the resigning member is the TC
Secretary, then the TC will elect a new Secretary from its number.

Should a TC member become inactive for more than 30 days, the TC may declare that member's seat vacant, by a majority vote.
If the vote passes, the TC member is removed.

If the number of TC members is reduced to three or fewer and there are more than two months until the next regularly
scheduled election, the Secretary must call for a special election for the vacant seats. The election process is the
same as for any other election, but the newly elected TC members will serve only until the next regular election.

Should the number of TC members fall to zero, the senior-most Release Manager of the latest stable release will step
in to act as TC Secretary and immediately call for a new vacancy election.

==== Work flow ====

The TC is primarily a reactive body, and is not expected to proactively search for issues.

Should a dispute or question about a change arise, the TC may be called on to resolve it.

- Any core developer (including a TC member) may ask for TC resolution of an issue by adding the label ''tc-hold'' to it and @-mentioning the TC GitHub team.
- An issue with the ''tc-hold'' tag MUST NOT be merged.
- The TC members will confer in whatever manner they deem most convenient, public or private or both.
* The TC SHOULD consult with relevant other individuals, including the core developers involved in the issue, Release Managers, and impacted maintainers as appropriate.
- The TC MUST deliver a decision within one month, via the mechanism described below.
- The TC Secretary MUST announce the decision and reasoning for it on the issue in question and remove the ''tc-hold'' tag.
- The decision of the TC is binding. That means a relevant change MUST NOT be merged until and unless it conforms with the TC's decision. Depending on the decision, the core developer involved may merge the issue, close it, or revise it accordingly.

If an issue has been marked ''tc-hold'' for more than two weeks with no response or acknowledgement from the TC, the
developer SHOULD post to the Internals mailing list a notification of absence.

If a notification of absence receives no response from the TC or any member of it for 30 days, then the entire TC is automatically removed. New elections must then be immediately called as described above.

The election of a new TC will "reset the clock" on any outstanding ''tc-hold'' issues.

==== Decision process ====

=== User-facing changes ===

The RFC process will continue to be used for user facing changes. However, it will no longer be used for
non-user-facing technical decisions.

TC members have no special role or authority in the RFC process.

=== Process changes ===

The RFC process will continue to be used for process changes, including changes to the role of the TC.

=== Technical changes ===

As noted, the TC has no special role or authority on user-facing changes. The TC may, however, decide on the
implementation of those features. In other words the TC can decide about implementation and C ABI and API but
not about PHP API.

The TC SHOULD NOT block the merging of a user-facing change approved by the RFC process, unless the provided
implementation would result in introduction of new bugs, side effects not mentioned in the RFC, significant performance
penalties not mentioned in RFC, or if there is an equivalent implementation in progress that the TC finds more appropriate.

The TC SHOULD give due consideration and weight to previous decisions regarding technical aspects, either by the TC
or by RFCs prior to the TC's creation. However, it is NOT REQUIRED to abide by them, and may make decisions as it
sees best to ensure the quality and maintainability of the code at the time the decision is made.

Technical aspects on which the TC may make a decision include, but are not limited to:

* Whether a given pull request implements a feature or resolves a bug.
* Whether a given change qualifies as user-facing, and thus requires an RFC.
* Whether a given technical aspect or implementation approach is acceptable.

=== TC voting ===

Once an issue has been brought to the TC, the Secretary will facilitate a discussion period lasting two weeks or until all TC members have had time to offer their input, whichever comes first. Once the Secretary feels the issue has been sufficiently discussed, the Secretary will call a vote of the TC members. The vote will be private and conducted however the TC chooses.

The vote will last for two weeks or until all TC members have voted, whichever comes first. All votes are
simple-majority, with no quorum on a binary question (which could be yes/no or either/or, depending on the situation,
as determined by the Secretary). Members may explicitly abstain, and refraining from voting counts as an abstention.
Abstentions do not count toward the result.

In case of a tie, the Secretary's vote will be considered the winning position.

Alternatively, if there is clear consensus among the TC members the Secretary may opt to skip the vote and report the
consensus decision, provided all members have been given time to weigh in. Any member of the TC may require that a vote
be held.

===== Proposed Voting Choices =====

As per the voting RFC a yes/no vote with a 2/3 majority is needed for this proposal to be accepted.

Voting started on 2023-XX-XX and will end on 2023-XX-XX.

===== References =====

Links to external references, discussions or RFCs

===== Rejected Features =====

Keep this updated with features that were discussed on the mail lists.