On 15/03/2026 12:20, Daniil Gentili wrote:
The exact lifecycle is explicitly not defined to allow for more flexibility, but it can have emergency yanks for security issues, just like for all extensions.

[...]

The point here is that users MUST be able to rely on feature extensions, including in the long-term: this is the reason for the stringent removal requirements.

[...]

The feature owners handle all changes to feature extensions.


You can't have it both ways:

- either the PHP project is making a lasting promise to the user by accepting a feature extension, and therefore taking on a lasting obligation;

- or, the obligation is entirely on the feature owner, and therefore the PHP project can't make any promise to the user


Currently, we have a process for promising a feature will be supported "forever" (RFCs); and a mechanism for maintainers to make an independent promise which users can choose whether to trust (PIE).

It might be interesting to make a more limited promise, such as "this feature will be supported for 1 year, then subject to breaking changes or removal". It might even be sensible to automatically "time out" every feature version after, say, 1 year, forcing one of three things: a) the feature has proven useful and stable, and is adopted permanently; b) the feature is still in flux, and users should migrate to a newer version; c) the feature has been abandoned, or proven impractical, and will no longer be provided.



Why will somebody trust this branch containing a bunch of separately-maintained feature extensions any more than they would trust a repository of PIE extensions? If anything, it is far *more* dangerous, because the features aren't limited to the normal extension API.

Sandboxing plays the single most important rule in building trust.


This is a very different type of "sandboxing" than what is discussed in the RFC. We're not talking about "ask the extension nicely not to give the user file system access", we're talking about "trust the extension not to silently send all user input to a malicious server", and "trust the extension not to have memory leaks that will crash the entire host".




I think this RFC is trying to do two conflicting things at once:

1) allow users to test far-reaching, experimental, changes to the language and engine 2) allow users to enable safe, stable, features without installing untrusted binaries


These are not conflicting things, they complement each other.


Perhaps the confusion is that there are two different kinds of stability we can talk about:

- stability of the implementation: are the changes to the engine thoroughly tested, and free from crashes and incorrect behaviour?

- stability of the API: can PHP code, and other extensions, be written to make use of the feature?

A feature flag is suitable for hiding an unstable API, but it's not suitable for hiding an unstable implementation.


--
Rowan Tommins
[IMSoP]

Reply via email to