On 19/11/2016 23:05, Kalle Sommer Nielsen wrote:
2016-11-19 22:56 GMT+01:00 Rowan Collins <rowan.coll...@gmail.com>:
Again, you're looking at version numbers as primarily a branding thing
("something awesome") rather than a technical thing ("something that breaks
compatibility").
Yes because that has been our past model for a long time. Like I
mentioned, PHP 5.3 should probably have been a major considering the
changes it did.
Agreed that it's the past model, and agreed that 5.3 was misnamed
whichever way you look at it.
The fact that something used to be done a particular way doesn't mean
that was the best way, though. It's also not what the current release
process specifies, in my opinion.
It wasn't until PHP 5.3 that we introduced
E_DEPREPCATED and actively started taking out problematic features
which in the past had caused issues with the usual group of people who
don't care to read the manual, so we gave those features a little
longer life span while informing the developers that we are gonna
remove it.
Basically before we started to get all political of things
I'm not sure what you mean by "political". The big challenge which comes
up again and again, is that take up of new versions of PHP is low. You
can blame the users for that if you like, but the reality is there's no
point rushing your shiny feature into a release that 90% of the user
base won't install.
Well-publicised deprecations, and a strict adherence to compatibility,
build trust that upgrading won't be a major headache, meaning new
features actually get to users *faster*. And to return to the topic at
hand, knowing how long something will be deprecated before it's removed
helps people plan ahead.
If we were to rename past releases to a scheme by SemVer, then that
would pretty much have been a yearly major, that is extremely poor
versioning in my opinion when we retrain such a high backwards
compatibility rate otherwise.
If every release contained breaking changes, then the release process
RFC has failed. It would be extremely poor versioning not because we'd
somehow run out of version numbers, but because it means we've made
upgrading harder than it should be.
Let me quote that SemVer FAQ in full:
/Q: //If even the tiniest backwards incompatible changes to the public
API require a major version bump, won’t I end up at version 42.0.0
very rapidly?//
//
//A: This is a question of responsible development and foresight.
Incompatible changes should not be introduced lightly to software that
has a lot of dependent code. The cost that must be incurred to upgrade
can be significant. Having to bump major versions to release
incompatible changes means you’ll think through the impact of your
changes, and evaluate the cost/benefit ratio involved./
In reality, we had two very successful minor releases after the release
process was agreed: 5.5, and 5.6. I think 7.1 has bent the rules, and I
think that's a shame.
I don't like the thought that PHP 5.4
could have been PHP 6 just because we removed safe_mode, that was
deprecated in 5.3. That would be a disappointing reason just to go for
a new major.
Agreed, so the answer would be not to remove it yet! If it was really
that urgent to remove the feature, then yes, bump the version number to
say so; if it could wait for one more minor release, then let it wait.
It's an odd example though, because for me by far the biggest break in
5.4 was the removal of call-time pass-by-reference, which was widely
used, and very fiddly to remove. But the story of 5.3 and 5.4 is
inextricably tied up with the failure of 6.0, so we can come up with all
sorts of "what if" scenarios and prove very little about the present and
future.
Same as above, I dislike this rapid jumping in versioning. Though this
is my personal opinion, for me as a Core Developer of PHP, I prefer
this scheme as it makes sense to me as it is pretty much what it
always has been.
That's fine, that's what I mean by "version number as branding". But if
we go down that route, we should drop all reference to major versions in
our deprecation and compatibility policy, because that's a fundamentally
different meaning of "major".
For instance, we could have a fixed duration of deprecation, say
deprecated for 2 versions, removed in the next. So any features
deprecated in 2017's release would be removed in 2019's release,
regardless of its version number. In 2018, further features could be
deprecated, to be removed in 2020, and so on.
That's why I mentioned divorcing the Engine and Language versions
I don't think that will work as most people when you say the Zend
Engine that is not into the PHP.net project will maybe know that its
the core of PHP, but nothing more about it so I don't think it makes
much sense to suddenly start label releases as such.
Sure, I was just brainstorming alternative solutions, since we seem to
have very different ideas of what the version number is there for.
Ignoring "Zend Engine" in particular, think about Windows prior to 10:
the internal (kernel) version number had strict rules, and the marketers
could make up whatever name they liked, meaning Windows 7 and 8 were
both internally 6.x.
Regards,
--
Rowan Collins
[IMSoP]
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php