Skip to content

Add changes to the release process #19

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

Open
wants to merge 16 commits into
base: main
Choose a base branch
from

Conversation

bukka
Copy link
Member

@bukka bukka commented May 9, 2025

This is to mostly match the current process and set some rules for it. The will be accompianed by the RFC.

@bukka
Copy link
Member Author

bukka commented May 9, 2025

The RFC for this is: https://wiki.php.net/rfc/policy-release-process-update

@bukka bukka force-pushed the release-process-update branch from 71e342f to 79facd3 Compare May 9, 2025 11:05
This is to mostly match the current process and set some rules for it
@bukka bukka force-pushed the release-process-update branch from 79facd3 to 5e4a08c Compare May 9, 2025 11:12
- Extensions support MAY be ended (moved to PECL).

- Syntax backward compatibility SHOULD be preserved - every PHP program that
compiles SHOULD continue to compile.
Copy link
Member

Choose a reason for hiding this comment

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

Given this is a SHOULD, I would find it useful to spell out when it is ok to violate this guideline. Namely, any breaking change should go through the RFC process. It should ultimately be up to the community to decide what BC breaks are acceptable. (I see this is later clarified).

Copy link
Member Author

Choose a reason for hiding this comment

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

This is already explicitly noted in Feature selection and development section:

However, any change that breaks user-facing backward compatibility MUST go through the RFC process.

| | <https://wiki.php.net/rfc/release_cycle_update>`_ |
| | - `RFC: Policy Release Process Update |
| | <https://wiki.php.net/rfc/policy-release-process-update>`_ |
+--------------+---------------------------------------------------------------+
Copy link
Member

Choose a reason for hiding this comment

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

Can we not use list-table? changes to formatted tables become very noisy.

Copy link
Member Author

Choose a reason for hiding this comment

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

It doesn't seem to allow cell formatting (I need multiple lines for Updates)... But if you can put working nicer format, I'm happy to change it. I spent already quite a bit of time to get it to some acceptable state as it this sort of formatting quite suck in RST.

Copy link
Member

Choose a reason for hiding this comment

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

I would just have done this:

*Original RFC:* `Request for Comments: Release Process <https://wiki.php.net/rfc/releaseprocess>`_

*Updated By:*

- `RFC: Release Cycle Update <https://wiki.php.net/rfc/release_cycle_update>`_
- `RFC: Policy Release Process Update <https://wiki.php.net/rfc/policy-release-process-update>`_

It doesn't have to be complicated.

Copy link
Member Author

Choose a reason for hiding this comment

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

I tried and it looks ugly.

Copy link
Member Author

Choose a reason for hiding this comment

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


- Backwards compatibility breaks in minor versions MUST NOT result in silent
behavioral differences. Instead any breaking change MUST be "obvious" when
executing the program.
Copy link
Member

Choose a reason for hiding this comment

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

Can you clarify what this looks like in practice? This makes sense when introducing new error cases, i.e. things that now throw an exception. But it doesn't make much sense to change the behavior of non-error cases while then emitting some notice or warning, if the code isn't otherwise considered problematic. If it is problematic, behavior should not change and a deprecation should be emitted instead, so it can later be removed.

Copy link
Member Author

Choose a reason for hiding this comment

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

I think the point here is that it should never change for non error cases. For such cases, the deprecation would be used which is not considered as a BC break.

Copy link
Member Author

Choose a reason for hiding this comment

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

I noted the error bit there. Let me know if it's ok. Maybe it should be SHOULD?

Copy link
Member

Choose a reason for hiding this comment

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

@iluuu1994 Given I was the one who suggested this, to give an example: https://wiki.php.net/rfc/static_variable_inheritance would have been an illegal BC break with this policy.

@bukka
Copy link
Member Author

bukka commented Jun 10, 2025

@iluuu1994 @TimWolla @jorgsowa @derickr I went through it again today and added notes about SAPI support. Otherwise it looks ready to me unless you have some further points?

Copy link
Member

@derickr derickr left a comment

Choose a reason for hiding this comment

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

LGTM, except for that one nit.


The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in `BCP 14
Copy link
Member

Choose a reason for hiding this comment

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

In this document, or in these documents? Not a real problem, but we ought to fix that.

Copy link
Member

@TimWolla TimWolla left a comment

Choose a reason for hiding this comment

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

Sorry, dropped the ball on the mailing list, but unfortunately no one else replied there either. I'm mostly okay with the contents, but feel that the “what are acceptable BC breaks” section could still get some love. Perhaps we should discuss this in foundation Slack to get at least some additional opinions?

Comment on lines +140 to +149
- Syntax backward compatibility SHOULD be preserved - every PHP program that
compiles SHOULD continue to compile.

It is critical to understand the consequences of breaking BC, APIs or ABIs (only
internals related). It should not be done for the sake of doing it. RFCs
explaining the reasoning behind a breakage and the consequences along with test
cases and patch(es) should help.
- Backward compatibility breaks in minor versions MUST NOT result in silent
behavioral differences. Instead any breaking change MUST be "obvious" when
executing the program. It means it SHOULD either throw exception or
trigger error.

See the following links for explanation about API and ABI:
- Userland API backward compatibility breaks SHOULD be limited to
extensions, or the API of functions within an extension.
Copy link
Member

Choose a reason for hiding this comment

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

I'd like to see something about “BC breaks must be simple to work-around in a cross-version way”, e.g. what I mentioned in https://externals.io/message/127328#127335.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants