Hi internals!
In a lot of the recent discussions (e.g. the HTTP_RAW_POST_DATA one) I've
seen the "we can't break backwards compatibility in PHP 5.x.y" argument
crop up again and again.
This rather unfortunate formulation takes root in the releaseprocess RFC
1 and drives all discussions of BC issues into a non-constructive
direction.
Fact is that nearly all changes (by being changes...) break backwards
compatibility to some degree 2 and we do most certainly allow them in
both minor and bugfix releases. Whether they are allowed (and for what
version) depends on the severity (rather than existence) of the breakage.
I would really appreciate it if we could move BC-related discussions away
from "Does it break BC?" (Yes, it does, in some way) to "How much does it
break BC and are we okay with that?"
In the context of the HTTP_RAW_POST_DATA discussion this means thinking
about questions like a) how much code will be negatively affected, b) how
hard will it be for the code to be fixed and c) do the benefits in
performance, memory usage and/or functionality (significantly?) outweigh
the inconvenience of code-adjustments?
As some people have a hard time understanding that small BC breaks are
introduced routinely and intentionally, some examples of changes that are
considered "generally okay" for bugfix and minor releases:
Bugfix x.y.z -> x.y.(z+1):
- Addition of new functions, if the function name is unlikely to already
be in (unconditional) use. E.g. the addition of getallheaders() for the
built-in webserver in PHP 5.5.7. - Changes in the behavior of functions where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior (most
bug fixes minus crashes fall into this category)
Minor x.y.0 -> x.(y+1).0
- Addition of new keywords, if the keyword is not commonly used in code
already. (E.g. "yield", but not "user"). - Deprecation of functions or language features. In practice deprecation
of heavily-used components like ext/mysql is one hell of a BC break, but
we're okay with it for minor versions. (This also includes addition of
other non-fatal errors) - Removal of long-deprecated or little used functionality. E.g. the logo
guid functions were removed in 5.5. - Changes in the behavior of the language where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior.
Thanks,
Nikita
PS: I think that it would be nice to adjust the releaseprocess RFC to
clarify this point, to make things clearer for both contributors and
end-users. The current promise sounds a lot like "You can just update from
5.4 to 5.5 and won't need to make any code changes", but for any
non-trivial (legacy) codebase that's pretty far from the truth.
Nikita Popov wrote:
PS: I think that it would be nice to adjust the releaseprocess RFC to
clarify this point, to make things clearer for both contributors and
end-users. The current promise sounds a lot like "You can just update from
5.4 to 5.5 and won't need to make any code changes", but for any
non-trivial (legacy) codebase that's pretty far from the truth.
We have to face the facts here ... When I started writing PHP I could produce
code that while written for PHP5 still worked on a PHP4 system. Today that is
totally lost - and quite rightly - but even the idea that code written for 5.x
will work on 5.x+1 neatly sidesteps the fact that code written for PHP5.2 will
not run on the majority of PHP deployments today. YES we can configure a later
PHP installation so that legacy code can run, but I would contend that no-one
can create an installation today - in an ISP environment - which will allow
legacy 5.2 applications to co exist with 5.3/4 applications! Which is why ISP's
are having such a hard time moving their clients forward.
Added to this reality is the fact that the browser landscape has also moved on
in a similar manor. While 5 years ago IE6 was the standard, how many of those
applications will actually display on a modern browser? Yes they can be
workable, but certainly not tidy to use.
I have been bashed every time I say that we need a major shift more often, but
while most of the frameworks that use PHP are doing major overhauls every year
with a major version as often as anually, PHP is still pretending that 10 year
old code is compatible. This is simply not the case, so lets get rid of PHP5.6,
get a clean sheet going for PHP6 and allow those of us who have real customers
to support get everything up to a level playing field ready to look at a shift
to PHP6 some time in the future. As yet even PHP5.5 is not on my own game plan.
--
Lester Caine - G8HFL
Contact - http://lsces.co.uk/wiki/?page=contact
L.S.Caine Electronic Services - http://lsces.co.uk
EnquirySolve - http://enquirysolve.com/
Model Engineers Digital Workshop - http://medw.co.uk
Rainbow Digital Media - http://rainbowdigitalmedia.co.uk
hi,
Hi internals!
In a lot of the recent discussions (e.g. the HTTP_RAW_POST_DATA one) I've
seen the "we can't break backwards compatibility in PHP 5.x.y" argument
crop up again and again.
It is not an argument, but a rule we try to respect.
This rather unfortunate formulation takes root in the releaseprocess RFC
[1] and drives all discussions of BC issues into a non-constructive
direction.
As it can see as non constructive, the goal is to actually smooth and
speed up updates, be direct end users or ISPs.
Fact is that nearly all changes (by being changes...) break backwards
compatibility to some degree [2] and we do most certainly allow them in
both minor and bugfix releases. Whether they are allowed (and for what
version) depends on the severity (rather than existence) of the breakage.
We have discussed that already. However I cannot compare new features,
keywords or functions as BC breaks. That's about namespaces or non
guarantee that a given keyword won't be used by PHP in later releases.
I would really appreciate it if we could move BC-related discussions away
from "Does it break BC?" (Yes, it does, in some way) to "How much does it
break BC and are we okay with that?"
Many small acceptable BC breaks do not allow one to update smoothly.
Reducing newer releases adoption rate and increase the common opinion
that all new releases cannot be used with current maintained PHP
applications. I would rather avoid introducing new reasons to support
this belief.
In the context of the HTTP_RAW_POST_DATA discussion this means thinking
about questions like a) how much code will be negatively affected, b) how
hard will it be for the code to be fixed and c) do the benefits in
performance, memory usage and/or functionality (significantly?) outweigh
the inconvenience of code-adjustments?
The "amount of code" affected can hardly be an argument. Especially
when we know that this code is actually used.
As some people have a hard time understanding that small BC breaks are
introduced routinely and intentionally, some examples of changes that are
considered "generally okay" for bugfix and minor releases:Bugfix x.y.z -> x.y.(z+1):
Same as before, please explain why a bug fix can be considered as a BC break.
- Addition of new functions, if the function name is unlikely to already
be in (unconditional) use. E.g. the addition of getallheaders() for the
built-in webserver in PHP 5.5.7.
Was it added in 5.5.x and not present in 5.5.0? That should not have happened.
- Changes in the behavior of functions where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior (most
bug fixes minus crashes fall into this category)
I disagree. Misbehavior must be fixed and it indeed can break BC if
some code relies on buggy behavior. But I do not see what wrong in
fixing bugs. It sounds pretty obvious to me, but if you have arguments
why we should re consider that (aka stop fixing bugs), please post
them :)
Minor x.y.0 -> x.(y+1).0
- Addition of new keywords, if the keyword is not commonly used in code
already. (E.g. "yield", but not "user").- Deprecation of functions or language features. In practice deprecation
of heavily-used components like ext/mysql is one hell of a BC break, but
we're okay with it for minor versions. (This also includes addition of
other non-fatal errors)
Deprecation is a flag matters, more noises in the log is not
considered as a BC break.
- Removal of long-deprecated or little used functionality. E.g. the logo
guid functions were removed in 5.5.
Right, that one is actually a BC break. I was not fund of it but
seriously I cannot imagine production code relying on that. That's why
it fits in the acceptable category.
- Changes in the behavior of the language where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior.
Same argument than the one for general bug fixes.
Thanks,
NikitaPS: I think that it would be nice to adjust the releaseprocess RFC to
clarify this point, to make things clearer for both contributors and
end-users. The current promise sounds a lot like "You can just update from
5.4 to 5.5 and won't need to make any code changes", but for any
non-trivial (legacy) codebase that's pretty far from the truth.
And that's exactly what we try to avoid. As it cannot be avoided 100%,
we should be closed to 100% and not "far away from any code
modification while upgrading".
We can make the RFC even more restrictive but then I'm not sure it
will be that productive, that will defeat your goals or ideas as well.
Cheers,
Pierre
@pierrejoye | http://www.libgd.org
Hi,
While I agree that in general maintaining backward compatibility is a good
thing, should there be a limit to how far that goes?
Refusing anything that causes a BC break except for major releases makes
sense, until you remember that PHP's major releases have a tendency to last
8-10 years if not longer. That's a pretty long time to wait for potential
enhancements / sane changes to the language isn't it?
There's the obvious point that security issues can be exempt from this
particular rule when necessary, and there have been various other breaking
changes (bug fixes or not) in minor point releases to date, but should /
could the requirement of no BC breaks for minor revisions be relaxed? Where
would the line be drawn? Personally, I have no idea.
Cheers.
hi,
On Tue, Nov 19, 2013 at 8:16 PM, Nikita Popov nikita.ppv@gmail.com
wrote:Hi internals!
In a lot of the recent discussions (e.g. the HTTP_RAW_POST_DATA one) I've
seen the "we can't break backwards compatibility in PHP 5.x.y" argument
crop up again and again.It is not an argument, but a rule we try to respect.
This rather unfortunate formulation takes root in the releaseprocess RFC
[1] and drives all discussions of BC issues into a non-constructive
direction.As it can see as non constructive, the goal is to actually smooth and
speed up updates, be direct end users or ISPs.Fact is that nearly all changes (by being changes...) break backwards
compatibility to some degree [2] and we do most certainly allow them in
both minor and bugfix releases. Whether they are allowed (and for what
version) depends on the severity (rather than existence) of the
breakage.We have discussed that already. However I cannot compare new features,
keywords or functions as BC breaks. That's about namespaces or non
guarantee that a given keyword won't be used by PHP in later releases.I would really appreciate it if we could move BC-related discussions away
from "Does it break BC?" (Yes, it does, in some way) to "How much does it
break BC and are we okay with that?"Many small acceptable BC breaks do not allow one to update smoothly.
Reducing newer releases adoption rate and increase the common opinion
that all new releases cannot be used with current maintained PHP
applications. I would rather avoid introducing new reasons to support
this belief.In the context of the HTTP_RAW_POST_DATA discussion this means thinking
about questions like a) how much code will be negatively affected, b) how
hard will it be for the code to be fixed and c) do the benefits in
performance, memory usage and/or functionality (significantly?) outweigh
the inconvenience of code-adjustments?The "amount of code" affected can hardly be an argument. Especially
when we know that this code is actually used.As some people have a hard time understanding that small BC breaks are
introduced routinely and intentionally, some examples of changes that are
considered "generally okay" for bugfix and minor releases:Bugfix x.y.z -> x.y.(z+1):
Same as before, please explain why a bug fix can be considered as a BC
break.
- Addition of new functions, if the function name is unlikely to already
be in (unconditional) use. E.g. the addition of getallheaders() for the
built-in webserver in PHP 5.5.7.Was it added in 5.5.x and not present in 5.5.0? That should not have
happened.
- Changes in the behavior of functions where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior
(most
bug fixes minus crashes fall into this category)I disagree. Misbehavior must be fixed and it indeed can break BC if
some code relies on buggy behavior. But I do not see what wrong in
fixing bugs. It sounds pretty obvious to me, but if you have arguments
why we should re consider that (aka stop fixing bugs), please post
them :)Minor x.y.0 -> x.(y+1).0
- Addition of new keywords, if the keyword is not commonly used in code
already. (E.g. "yield", but not "user").- Deprecation of functions or language features. In practice deprecation
of heavily-used components like ext/mysql is one hell of a BC break,
but
we're okay with it for minor versions. (This also includes addition of
other non-fatal errors)Deprecation is a flag matters, more noises in the log is not
considered as a BC break.
- Removal of long-deprecated or little used functionality. E.g. the logo
guid functions were removed in 5.5.Right, that one is actually a BC break. I was not fund of it but
seriously I cannot imagine production code relying on that. That's why
it fits in the acceptable category.
- Changes in the behavior of the language where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior.Same argument than the one for general bug fixes.
Thanks,
NikitaPS: I think that it would be nice to adjust the releaseprocess RFC to
clarify this point, to make things clearer for both contributors and
end-users. The current promise sounds a lot like "You can just update
from
5.4 to 5.5 and won't need to make any code changes", but for any
non-trivial (legacy) codebase that's pretty far from the truth.And that's exactly what we try to avoid. As it cannot be avoided 100%,
we should be closed to 100% and not "far away from any code
modification while upgrading".We can make the RFC even more restrictive but then I'm not sure it
will be that productive, that will defeat your goals or ideas as well.Cheers,
Pierre
@pierrejoye | http://www.libgd.org
hi,
On Wed, Nov 20, 2013 at 11:01 AM, Jonny Stirling
phoenix@jonstirling.co.uk wrote:
Refusing anything that causes a BC break except for major releases makes
sense, until you remember that PHP's major releases have a tendency to last
8-10 years if not longer. That's a pretty long time to wait for potential
enhancements / sane changes to the language isn't it?
Please check 5.4.0 and 5.5.0 new features. That's not like there were
no improvement.
Cheers,
Pierre
@pierrejoye | http://www.libgd.org
Hi,
No no, I'm not saying that there were no new features or enhancements
between minor releases or even revision points. I'm simply saying that
there can be worthwhile changes that impact BC. Limiting those changes to
the next major release which can be up to a decade in the future could be
considered detrimental to PHP. I'm also not saying that the BC rules
/should/ be relaxed, but asking that if it were, where would it end. By
relaxing the rule, you'd need to add a lot of complexity to compensate.
Just my 2 cents.
Cheers.
hi,
On Wed, Nov 20, 2013 at 11:01 AM, Jonny Stirling
phoenix@jonstirling.co.uk wrote:Refusing anything that causes a BC break except for major releases makes
sense, until you remember that PHP's major releases have a tendency to
last
8-10 years if not longer. That's a pretty long time to wait for potential
enhancements / sane changes to the language isn't it?Please check 5.4.0 and 5.5.0 new features. That's not like there were
no improvement.Cheers,
Pierre
@pierrejoye | http://www.libgd.org
Hi all,
On Wed, Nov 20, 2013 at 7:01 PM, Jonny Stirling
phoenix@jonstirling.co.ukwrote:
While I agree that in general maintaining backward compatibility is a good
thing, should there be a limit to how far that goes?
We have to consider the fact that "always_populate_raw_post_data" is "Off"
by default and setting $HTTP_RAW_POST_DATA is one liner with the patch.
php.ini setting is getting larger and larger. It would be good in the long
run
if we remove unneeded settings.
Regards,
--
Yasuo Ohgaki
yohgaki@ohgaki.net
hi,
On Tue, Nov 19, 2013 at 8:16 PM, Nikita Popov nikita.ppv@gmail.com
wrote:Hi internals!
In a lot of the recent discussions (e.g. the HTTP_RAW_POST_DATA one) I've
seen the "we can't break backwards compatibility in PHP 5.x.y" argument
crop up again and again.It is not an argument, but a rule we try to respect.
This rather unfortunate formulation takes root in the releaseprocess RFC
[1] and drives all discussions of BC issues into a non-constructive
direction.As it can see as non constructive, the goal is to actually smooth and
speed up updates, be direct end users or ISPs.Fact is that nearly all changes (by being changes...) break backwards
compatibility to some degree [2] and we do most certainly allow them in
both minor and bugfix releases. Whether they are allowed (and for what
version) depends on the severity (rather than existence) of the
breakage.We have discussed that already. However I cannot compare new features,
keywords or functions as BC breaks. That's about namespaces or non
guarantee that a given keyword won't be used by PHP in later releases.I would really appreciate it if we could move BC-related discussions away
from "Does it break BC?" (Yes, it does, in some way) to "How much does it
break BC and are we okay with that?"Many small acceptable BC breaks do not allow one to update smoothly.
Reducing newer releases adoption rate and increase the common opinion
that all new releases cannot be used with current maintained PHP
applications. I would rather avoid introducing new reasons to support
this belief.In the context of the HTTP_RAW_POST_DATA discussion this means thinking
about questions like a) how much code will be negatively affected, b) how
hard will it be for the code to be fixed and c) do the benefits in
performance, memory usage and/or functionality (significantly?) outweigh
the inconvenience of code-adjustments?The "amount of code" affected can hardly be an argument. Especially
when we know that this code is actually used.As some people have a hard time understanding that small BC breaks are
introduced routinely and intentionally, some examples of changes that are
considered "generally okay" for bugfix and minor releases:Bugfix x.y.z -> x.y.(z+1):
Same as before, please explain why a bug fix can be considered as a BC
break.
- Addition of new functions, if the function name is unlikely to already
be in (unconditional) use. E.g. the addition of getallheaders() for the
built-in webserver in PHP 5.5.7.Was it added in 5.5.x and not present in 5.5.0? That should not have
happened.That's gonna be reverted.
Revisions are bug fixes only, new features should come to master and
eventually specific branches when discussed and accepted as is.
We cannot afford a new feature / function in revision anymore like we did
in the past, that's too dangerous and clearly out of our release process.
Julien Pauli
Hi internals!
In a lot of the recent discussions (e.g. the HTTP_RAW_POST_DATA one) I've
seen the "we can't break backwards compatibility in PHP 5.x.y" argument
crop up again and again.This rather unfortunate formulation takes root in the releaseprocess RFC
1 and drives all discussions of BC issues into a non-constructive
direction.Fact is that nearly all changes (by being changes...) break backwards
compatibility to some degree 2 and we do most certainly allow them in
both minor and bugfix releases. Whether they are allowed (and for what
version) depends on the severity (rather than existence) of the breakage.I would really appreciate it if we could move BC-related discussions away
from "Does it break BC?" (Yes, it does, in some way) to "How much does it
break BC and are we okay with that?"In the context of the HTTP_RAW_POST_DATA discussion this means thinking
about questions like a) how much code will be negatively affected, b) how
hard will it be for the code to be fixed and c) do the benefits in
performance, memory usage and/or functionality (significantly?) outweigh
the inconvenience of code-adjustments?As some people have a hard time understanding that small BC breaks are
introduced routinely and intentionally, some examples of changes that are
considered "generally okay" for bugfix and minor releases:Bugfix x.y.z -> x.y.(z+1):
- Addition of new functions, if the function name is unlikely to already
be in (unconditional) use. E.g. the addition of getallheaders() for the
built-in webserver in PHP 5.5.7.- Changes in the behavior of functions where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior (most
bug fixes minus crashes fall into this category)Minor x.y.0 -> x.(y+1).0
- Addition of new keywords, if the keyword is not commonly used in code
already. (E.g. "yield", but not "user").- Deprecation of functions or language features. In practice deprecation
of heavily-used components like ext/mysql is one hell of a BC break, but
we're okay with it for minor versions. (This also includes addition of
other non-fatal errors)- Removal of long-deprecated or little used functionality. E.g. the logo
guid functions were removed in 5.5.- Changes in the behavior of the language where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior.Thanks,
NikitaPS: I think that it would be nice to adjust the releaseprocess RFC to
clarify this point, to make things clearer for both contributors and
end-users. The current promise sounds a lot like "You can just update from
5.4 to 5.5 and won't need to make any code changes", but for any
non-trivial (legacy) codebase that's pretty far from the truth.
Hi Nikita,
Thank you for your feedback on the issue.
Personally I think that our current release process RFC only solves half of
the problem.
We were seeing slow adoption rates for new versions and also users
complaining about every second micro version breaking backward
compatibility (some of those concerns were ofc. magnified), but having the
current release process, which promises complying with the current best
practices, aka semantic versioning (http://semver.org/).
I think that the rfc should be a bit more descriptive/exact about what do
we mean by API/ABI BC break, and bugfix, but otherwise it is fine.
Additionally it is also defines the yearly release cycle, and the two+one
year support cycle, which is also quiet nice.
From the userland POV, we covered all the bases, you know what you can
expect from a release and when can you expect a new release.
What we didn't cover is the issue of the major versions.
Currently there is no way to plan any change which requires a BC break and
doesn't qualify as a bugfix.
This causes issues like:
- people are frustrated that there is no way to tell when or if a
contribution will make it into a release if it requires a BC break - which causes people to try and force/sneak in BC breaks into minor
versions - which causes additional stress and work to the RMs and those who are
trying to follow the process, and also erodes the users trust in the new
model when they see that we still don't follow the rules we put forward to
ourselves. - we don't have a place/branch to accept backward incompatible changes,
because we have no way to tell beforehand, whether the next version will be
a minor or major, everything goes into master, then we end up in a
situation, when branching out the new minor version is a PITA, because it
could have everything from master, except those dozend of commits which are
related to that single backward incompatible change that we have there.
We had this discussion before, and I agree with Rasmus and co. that in an
open-source, volunteer-based project we can't really tell beforehand, that
what will be in the next version, before the work is actually done
(otherwise we end up with another PHP6, where there a bunch of promises
what should be there, and the release is stucked when some milestone
feature gets delayed/abandoned), but I do think that we could do stuff like
communicate that we can have a major release like in every 3 years, which
will be supported at least for 3 minor releases.
That way both the userland and the core developers could have some kind ETA
for getting there changes, and we could always skip/delay the major version
if there is nothing which would require a major release(albeit I don't
think that we would ever run short of backward incompatible changes).
tl;dr: I would like to stick with the current release process and don't
start using the previous bad process/exceptions as an excuse to keep adding
backward incompatible changes to our minor versions, but I would like to
extend the release process to cover the lifecycle of major versions.
--
Ferenc Kovács
@Tyr43l - http://tyrael.hu
Hi,
Ferenc, that does seem like a good middle ground to me, though I think it
would have to be "guaranteed" that major releases would be on a 3 year
rolling schedule from the next major release.
My reasoning for this is that if a major release is delayed, then you have
confusion about when the 3 years starts from or end up with dates changing.
In addition, if a major version was to be skipped then, again, confusion
about when the next version is aimed for (3 years from decision to skip or
6 years from previous major release or something else?).
Just a thought.
On Tue, Nov 19, 2013 at 8:16 PM, Nikita Popov nikita.ppv@gmail.com
wrote:Hi internals!
In a lot of the recent discussions (e.g. the HTTP_RAW_POST_DATA one) I've
seen the "we can't break backwards compatibility in PHP 5.x.y" argument
crop up again and again.This rather unfortunate formulation takes root in the releaseprocess RFC
1 and drives all discussions of BC issues into a non-constructive
direction.Fact is that nearly all changes (by being changes...) break backwards
compatibility to some degree 2 and we do most certainly allow them in
both minor and bugfix releases. Whether they are allowed (and for what
version) depends on the severity (rather than existence) of the
breakage.I would really appreciate it if we could move BC-related discussions away
from "Does it break BC?" (Yes, it does, in some way) to "How much does it
break BC and are we okay with that?"In the context of the HTTP_RAW_POST_DATA discussion this means thinking
about questions like a) how much code will be negatively affected, b) how
hard will it be for the code to be fixed and c) do the benefits in
performance, memory usage and/or functionality (significantly?) outweigh
the inconvenience of code-adjustments?As some people have a hard time understanding that small BC breaks are
introduced routinely and intentionally, some examples of changes that are
considered "generally okay" for bugfix and minor releases:Bugfix x.y.z -> x.y.(z+1):
- Addition of new functions, if the function name is unlikely to already
be in (unconditional) use. E.g. the addition of getallheaders() for the
built-in webserver in PHP 5.5.7.- Changes in the behavior of functions where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior
(most
bug fixes minus crashes fall into this category)Minor x.y.0 -> x.(y+1).0
- Addition of new keywords, if the keyword is not commonly used in code
already. (E.g. "yield", but not "user").- Deprecation of functions or language features. In practice deprecation
of heavily-used components like ext/mysql is one hell of a BC break,
but
we're okay with it for minor versions. (This also includes addition of
other non-fatal errors)- Removal of long-deprecated or little used functionality. E.g. the logo
guid functions were removed in 5.5.- Changes in the behavior of the language where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior.Thanks,
NikitaPS: I think that it would be nice to adjust the releaseprocess RFC to
clarify this point, to make things clearer for both contributors and
end-users. The current promise sounds a lot like "You can just update
from
5.4 to 5.5 and won't need to make any code changes", but for any
non-trivial (legacy) codebase that's pretty far from the truth.Hi Nikita,
Thank you for your feedback on the issue.
Personally I think that our current release process RFC only solves half of
the problem.
We were seeing slow adoption rates for new versions and also users
complaining about every second micro version breaking backward
compatibility (some of those concerns were ofc. magnified), but having the
current release process, which promises complying with the current best
practices, aka semantic versioning (http://semver.org/).
I think that the rfc should be a bit more descriptive/exact about what do
we mean by API/ABI BC break, and bugfix, but otherwise it is fine.
Additionally it is also defines the yearly release cycle, and the two+one
year support cycle, which is also quiet nice.
From the userland POV, we covered all the bases, you know what you can
expect from a release and when can you expect a new release.
What we didn't cover is the issue of the major versions.
Currently there is no way to plan any change which requires a BC break and
doesn't qualify as a bugfix.
This causes issues like:
- people are frustrated that there is no way to tell when or if a
contribution will make it into a release if it requires a BC break- which causes people to try and force/sneak in BC breaks into minor
versions- which causes additional stress and work to the RMs and those who are
trying to follow the process, and also erodes the users trust in the new
model when they see that we still don't follow the rules we put forward
to
ourselves.- we don't have a place/branch to accept backward incompatible changes,
because we have no way to tell beforehand, whether the next version
will be
a minor or major, everything goes into master, then we end up in a
situation, when branching out the new minor version is a PITA, because
it
could have everything from master, except those dozend of commits which
are
related to that single backward incompatible change that we have there.We had this discussion before, and I agree with Rasmus and co. that in an
open-source, volunteer-based project we can't really tell beforehand, that
what will be in the next version, before the work is actually done
(otherwise we end up with another PHP6, where there a bunch of promises
what should be there, and the release is stucked when some milestone
feature gets delayed/abandoned), but I do think that we could do stuff like
communicate that we can have a major release like in every 3 years, which
will be supported at least for 3 minor releases.
That way both the userland and the core developers could have some kind ETA
for getting there changes, and we could always skip/delay the major version
if there is nothing which would require a major release(albeit I don't
think that we would ever run short of backward incompatible changes).tl;dr: I would like to stick with the current release process and don't
start using the previous bad process/exceptions as an excuse to keep adding
backward incompatible changes to our minor versions, but I would like to
extend the release process to cover the lifecycle of major versions.--
Ferenc Kovács
@Tyr43l - http://tyrael.hu
On Tue, Nov 19, 2013 at 8:16 PM, Nikita Popov nikita.ppv@gmail.com
wrote:Hi internals!
In a lot of the recent discussions (e.g. the HTTP_RAW_POST_DATA one) I've
seen the "we can't break backwards compatibility in PHP 5.x.y" argument
crop up again and again.This rather unfortunate formulation takes root in the releaseprocess RFC
1 and drives all discussions of BC issues into a non-constructive
direction.Fact is that nearly all changes (by being changes...) break backwards
compatibility to some degree 2 and we do most certainly allow them in
both minor and bugfix releases. Whether they are allowed (and for what
version) depends on the severity (rather than existence) of the
breakage.I would really appreciate it if we could move BC-related discussions away
from "Does it break BC?" (Yes, it does, in some way) to "How much does it
break BC and are we okay with that?"In the context of the HTTP_RAW_POST_DATA discussion this means thinking
about questions like a) how much code will be negatively affected, b) how
hard will it be for the code to be fixed and c) do the benefits in
performance, memory usage and/or functionality (significantly?) outweigh
the inconvenience of code-adjustments?As some people have a hard time understanding that small BC breaks are
introduced routinely and intentionally, some examples of changes that are
considered "generally okay" for bugfix and minor releases:Bugfix x.y.z -> x.y.(z+1):
- Addition of new functions, if the function name is unlikely to already
be in (unconditional) use. E.g. the addition of getallheaders() for the
built-in webserver in PHP 5.5.7.- Changes in the behavior of functions where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior
(most
bug fixes minus crashes fall into this category)Minor x.y.0 -> x.(y+1).0
- Addition of new keywords, if the keyword is not commonly used in code
already. (E.g. "yield", but not "user").- Deprecation of functions or language features. In practice deprecation
of heavily-used components like ext/mysql is one hell of a BC break,
but
we're okay with it for minor versions. (This also includes addition of
other non-fatal errors)- Removal of long-deprecated or little used functionality. E.g. the logo
guid functions were removed in 5.5.- Changes in the behavior of the language where a) the old behavior was
considered buggy and b) not much code was relying on the old behavior.Thanks,
NikitaPS: I think that it would be nice to adjust the releaseprocess RFC to
clarify this point, to make things clearer for both contributors and
end-users. The current promise sounds a lot like "You can just update
from
5.4 to 5.5 and won't need to make any code changes", but for any
non-trivial (legacy) codebase that's pretty far from the truth.Hi Nikita,
Thank you for your feedback on the issue.
Personally I think that our current release process RFC only solves half of
the problem.
We were seeing slow adoption rates for new versions and also users
complaining about every second micro version breaking backward
compatibility (some of those concerns were ofc. magnified), but having the
current release process, which promises complying with the current best
practices, aka semantic versioning (http://semver.org/).
I think that the rfc should be a bit more descriptive/exact about what do
we mean by API/ABI BC break, and bugfix, but otherwise it is fine.
Additionally it is also defines the yearly release cycle, and the two+one
year support cycle, which is also quiet nice.
From the userland POV, we covered all the bases, you know what you can
expect from a release and when can you expect a new release.
What we didn't cover is the issue of the major versions.
Currently there is no way to plan any change which requires a BC break and
doesn't qualify as a bugfix.
This causes issues like:
- people are frustrated that there is no way to tell when or if a
contribution will make it into a release if it requires a BC break- which causes people to try and force/sneak in BC breaks into minor
versions- which causes additional stress and work to the RMs and those who are
trying to follow the process, and also erodes the users trust in the new
model when they see that we still don't follow the rules we put forward
to
ourselves.- we don't have a place/branch to accept backward incompatible changes,
because we have no way to tell beforehand, whether the next version
will be
a minor or major, everything goes into master, then we end up in a
situation, when branching out the new minor version is a PITA, because
it
could have everything from master, except those dozend of commits which
are
related to that single backward incompatible change that we have there.We had this discussion before, and I agree with Rasmus and co. that in an
open-source, volunteer-based project we can't really tell beforehand, that
what will be in the next version, before the work is actually done
(otherwise we end up with another PHP6, where there a bunch of promises
what should be there, and the release is stucked when some milestone
feature gets delayed/abandoned), but I do think that we could do stuff like
communicate that we can have a major release like in every 3 years, which
will be supported at least for 3 minor releases.
That way both the userland and the core developers could have some kind ETA
for getting there changes, and we could always skip/delay the major version
if there is nothing which would require a major release(albeit I don't
think that we would ever run short of backward incompatible changes).tl;dr: I would like to stick with the current release process and don't
start using the previous bad process/exceptions as an excuse to keep adding
backward incompatible changes to our minor versions, but I would like to
extend the release process to cover the lifecycle of major versions.
Hi
I agree that we keep telling people "no no I don't want to merge your patch
as it breaks BC", but we have no idea as when we'll release a new major ,
so that all those little patches can show up.
I agree with Ferenc, saying that we need to plan major releases.
For example, for 5.6 , we could also have branched a major, aka, a 6.0 ,
and break lots of things, like cleaning the INI settings like Yasuo says in
a reply to this topic.
We have new contributors, new ideas, new patch and code, running (but
breaking things). But, we have no idea about a new major, where we could
merge and release them...
So let's concentrate on an RFC update about our release process, clarifying
things about major release schedule.
The "3 years" thrown here might seem as a good basis.
Julien.Pauli
Personally I think that our current release process RFC only solves half of
the problem.
We were seeing slow adoption rates for new versions and also users
complaining about every second micro version breaking backward
compatibility (some of those concerns were ofc. magnified), but having the
current release process, which promises complying with the current best
practices, aka semantic versioning (http://semver.org/).
Then, on 21/11/2013 10:59, Julien Pauli wrote:
I agree that we keep telling people "no no I don't want to merge your patch
as it breaks BC", but we have no idea as when we'll release a new major ,
so that all those little patches can show up.I agree with Ferenc, saying that we need to plan major releases.
For example, for 5.6 , we could also have branched a major, aka, a 6.0 ,
and break lots of things, like cleaning the INI settings like Yasuo says in
a reply to this topic.
As somebody fairly new to the community (as opposed to the language) I'd
like to lend my support to this line of reasoning. Semantic Versioning
is good at saying what should not be in a minor release, but doesn't
really say what should be in a major release - that is a question of
vision and ambition.
If you'll excuse the pun, I think the "elephpant in the room" here is
the failure of the PHP 6 Unicode project. Abandoning that work was
probably the right decision, and the choice of features in 5.3 and 5.4
flowed naturally from that decision, but it has had a couple of
unfortunate effects:
- Declaring that all 5.x releases after 5.4 are to be backwards
compatible is a bit like making a New Year's Resolution in June: it is a
perfectly sound aim, but it all sounds a bit fuzzy when you try to
explain it. - There is a general unease at the idea of launching a PHP 6.0 into the
world - not an unusual thing, as I noted in an old blog post on "The
Golden Rules of Version Naming" [1] - but particularly acute having
failed on the previous attempt.
PHP 5.3 was branched over 6 years ago [2] and the PHP 6 Unicode
implementation officially abandoned 3.5 years ago [3]; contrast that
with the 6 years between PHP 4.0 and PHP 5.0 (and only 5 years between
the radically different PHP 1.0 and 4.0!), and the current limit of 3
years for support of new releases. Time, as the self-help books would
say, to seek closure and move on.
The feeling in the air at the moment seems to be that in order for PHP
to move beyond 5.x there would need to be some bold, world-shattering
feature, to replace the Unicode work. Yet features are proposed and
abandoned because they are too big a change for a minor release, but
somehow not enough to justify a major release.
There are two solutions to that (which aren't necessarily mutually
exclusive):
a) Choose a bold, world-shattering feature, and rally the troops. There
are plenty of things that could be considered here, but I'll leave my
musing on those for elsewhere.
b) Declare that, just as minor versions now happen every year, major
versions will happen on a regular basis, whether or not the language has
radically changed, to allow the evolution of the language to proceed
without maintaining an ever-growing list of deprecated quirks.
If PHP is to remain relevant to the world, it needs two things: it needs
to give users time to catch up, as the current release process does for
minor versions; but it also needs to give those developing the language
itself a chance to improve it with modern, well-designed features.
Well, that's my two $minor_currency_units anyway.
[1] http://rwec.co.uk/q/versions
[2] http://news.php.net/php.internals/32451
[3] http://news.php.net/php.internals/47120
--
Rowan Collins
[IMSoP]
a) Choose a bold, world-shattering feature, and rally the troops. There
are plenty of things that could be considered here, but I'll leave my
musing on those for elsewhere.
How about we collect various features that unfortunately break
backwards-compatibility in a branch, and then eventually release 6.0
once a world-shattering feature comes along?
--
Andrea Faulds
http://ajf.me/
25.11.2013 1:08 пользователь "Andrea Faulds" ajf@ajf.me написал:
a) Choose a bold, world-shattering feature, and rally the troops. There
are plenty of things that could be considered here, but I'll leave my
musing on those for elsewhere.How about we collect various features that unfortunately break
backwards-compatibility in a branch, and then eventually release 6.0 once a
world-shattering feature comes along?--
Andrea Faulds
http://ajf.me/--
I would suggest the size_t and 64 bit rework that has to be done on all the
extensions too, it was just reported recently that --disable-all
--enable-cli works besides a few edge cases.
This could be your next big feature for releasing PHP6 :)
a) Choose a bold, world-shattering feature, and rally the troops. There
are plenty of things that could be considered here, but I'll leave my
musing on those for elsewhere.How about we collect various features that unfortunately break
backwards-compatibility in a branch, and then eventually release 6.0
once a world-shattering feature comes along?
That seems to be the current approach, but it has some real drawbacks:
- people don't want to spend time on such features if they're just going
to be left hanging around on a branch for years - it adds extra effort maintaining such a branch in the face of other
features which do make it into releases, but end up touching the same code - it's not particularly helpful for users if the number of features
marked "deprecated" continues to grow, but nobody can say when they'll
actually be removed, and thus whether we should really care any more
than we do about "strict standards"
More fundamentally, it assumes that a world-shattering feature will
somehow "come along" from Somewhere Outside, rather than it being
something that you all (it seems presumptuous to include myself in a
"we") need to actively choose to do.
Why do you think now is not the moment to start planning a major
release? That's not an accusation, I'm genuinely interested in your
answer (and anyone else's):
- Is there an absolute timescale you would like to wait for 5.x to
mature? Then let's discuss that timescale. - Do you not feel there's enough will or talent to drive the project
beyond modest goals? What should be done to improve that? - Do you think there are no ideas floating around that would be worthy
of a major release? I'm sure we could brainstorm plenty; I have half a
dozen floating around my head, with varying chances of catching on... - Do you just think that actually the language is Good Enough, and we
should just carry on refining 5.x for the foreseeable future? In which
case, deprecation notices, and unreleased features committed to master,
are kind of pointless.
If people don't think now is the right time to plan PHP 5+1, that's fine
by me; but I think it would be useful to have a line of reasoning, which
could be tested in future for other values of "now".
--
Rowan Collins
[IMSoP]
a) Choose a bold, world-shattering feature, and rally the troops. There
are plenty of things that could be considered here, but I'll leave my
musing on those for elsewhere.How about we collect various features that unfortunately break
backwards-compatibility in a branch, and then eventually release 6.0
once a world-shattering feature comes along?
Or when you have a good number of not-too-big-but-not-small-either features.