Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:93921 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 51616 invoked from network); 12 Jun 2016 21:10:09 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 12 Jun 2016 21:10:09 -0000 Authentication-Results: pb1.pair.com smtp.mail=me@daveyshafik.com; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=davey@php.net; sender-id=unknown Received-SPF: error (pb1.pair.com: domain daveyshafik.com from 209.85.215.41 cause and error) X-PHP-List-Original-Sender: me@daveyshafik.com X-Host-Fingerprint: 209.85.215.41 mail-lf0-f41.google.com Received: from [209.85.215.41] ([209.85.215.41:34687] helo=mail-lf0-f41.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 53/25-12403-FAFCD575 for ; Sun, 12 Jun 2016 17:10:08 -0400 Received: by mail-lf0-f41.google.com with SMTP id j7so50208534lfg.1 for ; Sun, 12 Jun 2016 14:10:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=php-net.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=NK1CnyiXVVldULoimaFo6HnmqH0+4Q0bM9ktSmZQmtg=; b=wvi8DyvwwJLOOYMHbOWYMjuUgi8pN+tP5j3WZdaWDqnge1NiZuzb1nbisrcUTgHTOP McjViMEJV8AUWnxiUKJ8mAWIX5niY89oQOYjYyio6IqFmEu2YRK9a0bBxJjNQ3c9MCcj JUpgxrEm7B0IWZfXxltF7Vu6SNJtBfPtYSt1VCJ61CjbtT855a1FW3vLTsu2vn+qeoHO oD0iT4xor5VkRGGmRxOawbeMWOWi8WwP/TBA7qpCw2Dg067MjNN+t0DxOsYEKdjLGVmt Y54/RqZZEUiFfwpaLwRrDDoeyJQGzSo303c2RAJUAeNid/7NKwTjoLISEIMiswFsgPKd jdRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=NK1CnyiXVVldULoimaFo6HnmqH0+4Q0bM9ktSmZQmtg=; b=hMjSytbI9EK9ljcVyqs3kfhhHFmyW9WxaAzk922TT3Exz5F2JGsT6gJiLyP8r+eJ2f d6pKMFRlF7nFREf7UwLZWKNWjrRrjQRAAAWgkGCMBmED6xir0gt+IV8oWvaOkGKTiyR2 iIWBTGM4WxpDG5m61utLXb1oFWgX3kuVIWxd3zxQ8PmSD/PFiBgN1WlpBpF5a7++pHeA ptNwYVKv0z+rQcA/qwj8vnZNJcPD0/+Umzj5UEftVRA0baQ1OdbSI/SE2qQnb6RON0Om czLCiqPLKsvkH5BsiUGGiY1kUoAs9wH2mgxEVClsYdzTLoj2FXRo1YInSqDixi7Y+pDb SkMg== X-Gm-Message-State: ALyK8tLRFJN3T8u/1IxAgHmuYLPHFtzNFlFQW21g2dDhIaclhbBHZrGtc7o1/PEDbkFCr2Z8F7PekUSS4Eg++1kr X-Received: by 10.25.169.134 with SMTP id s128mr2504215lfe.84.1465765803691; Sun, 12 Jun 2016 14:10:03 -0700 (PDT) MIME-Version: 1.0 References: <6c03dafd-093a-0087-6312-96fede93c5f0@gmail.com> In-Reply-To: Date: Sun, 12 Jun 2016 21:09:54 +0000 Message-ID: To: Ferenc Kovacs , Rowan Collins , Anatoliy Belsky , Joe Watkins Cc: PHP Internals Content-Type: multipart/alternative; boundary=001a11410ee20da6ca05351b3277 Subject: Re: [PHP-DEV] Is the "No BC Breaks in Minor Releases" policy enforceable? From: davey@php.net (Davey Shafik) --001a11410ee20da6ca05351b3277 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Apologies for top-post, am mobile. I have discussed this with Joe briefly, and with a few others while at PHPSC on Saturday. My opinion: - I like and agree with the change despite voting no - I voted no ONLY due to the BC break and were I the sole RM and had I the power I would chose to veto this change because of that. It's one thing to break BC of undocumented weirdness such as the multiple defaults in switches stuff. It's entirely another to change the behavior of something that is documented in the language specification. While code doing this is obviously wrong, if observed behavior is correct, then the fact it is technically incorrect doesn't matter. Yes, this could mean code is running with unintended side effects but there are two outcomes for code currently hitting this warning: 1) the exception will be uncaught and fatal error instead of a warning 2) the exception will be caught by an unintended catch block - which could potentially have unintended side effects, negating the only valid reason for breaking BC. Obviously Joe voted yes and disagrees with me on this. =C2=AF\_(=E3=83=84)_/=C2=AF - Davey On Sun, Jun 12, 2016 at 21:48 Ferenc Kovacs wrote: > Hi, > > my interpretation is that no rfc with BC breaks should target a minor > version. > Our interpretation(based on past decisions and mailing list discussion) o= f > BC break is changing any userland API except where we excplicitly stated > that the previous behavior is undefined (and we also allow extensions to = be > moved to pecl, which from user POV can be a BC break but we allow that > explicitly). > I see a trend with php 7.1 that people try to add everything which we > couldn't finish in 7.0 as it would be a complementary php 7.0 release, no= t > a standard minor release which should abide our release process( > https://wiki.php.net/rfc/releaseprocess ). > Let me summon Anatol as he was the 7.0 release manager and Joe and Davey > as they are the RMs for 7.1, let's see what do they think about this. > > On Sun, Jun 12, 2016 at 6:42 PM, Rowan Collins > wrote: > >> tl;dr: >> >> - We have an RFC [too_few_args] about to pass that seems to break our >> published Release Process. >> - Is the vote invalid, or do we need to change the Process? >> - The opinions of those who voted "Yes" are particularly requested. >> >> >> Hi All, >> >> The RFC to Replace "Missing argument" warning with "Too few arguments" >> exception [too_few_args] looks certain to pass (it currently stands at 3= 6:8 >> in favour), and contains the following: >> >> Backward Incompatible Changes: "The BC break in intended." >>> >> > Proposed PHP Version(s): "PHP 7.1" >> >> This appears to be in direct contradiction with the Release Process RFC >> [releaseprocess] adopted in 2010, which states: >> >> "x.y.z to x.y+1.z ... Backward compatibility must be kept" >>> >> >> There are two interpretations of this: >> >> 1) The policy in [releaseprocess] is binding, and the vote on >> [too_few_args] is invalid. Either the results should be ignored, or >> silently taken as acceptance of the feature in 8.0, and implementation >> postponed. However, there is no provision in the RFC for enforcement, an= d >> the RMs are explicitly denied such a role: >> >> "The roles of the release managers are about being a facilitator ... Bu= t >>> they are not: Decide which features, extension or >>> >> SAPI get in a release or not" >> >> 2) There is some reason that [releaseprocess] can be ignored in this >> case. However, there is no mechanism I can see in [releaseprocess], nor = any >> justification in [too_few_args] or on its associated mailing list thread= s. >> >> >> It is often argued that "No BC" is too broad, and thus unenforceable. It >> is probably impossible to give a water-tight definition of what is >> acceptable, but we can state some general principles. >> >> The Introduction to [releaseprocess] implies the following aim: >> >> - To ensure a smooth and predictable upgrade process between minor >> releases. >> >> From this, I would consider the general spirit of the BC rule to be: >> >> - Any reasonably written PHP application which runs successfully under >> PHP x.y.z should run successfully under PHP x.y+1.z without significant >> modification. >> >> For instance, a program which runs fine under 5.3 may need invasive >> changes to remove call-time pass-by-reference before it runs on 5.4; >> preventing this seems to be the intent of the rule. >> >> >> Here is where things begin to get subjective, but the following seem >> reasonable to me, and seem to match most decisions made up until now: >> >> - Notices, Warnings, etc, may change severity, but must not become Error= s >> or Exceptions. >> - An Error may be removed, or downgraded to a Warning, etc, if there is >> good reason to do so, e.g. new behaviour gracefully handles a previously >> unhandled case. (Many of the cases below boil down to this.) >> - The defined behaviour of operators must not change. >> - New operators, or application of operators to new situations, may be >> added, where such application would previously have been a error. >> - New keywords, functions, and classes may be reserved in the global >> namespace, because PHP "owns" this namespace. However, this must be done >> with care, and following the naming guide. >> - New arguments or type cases may be added to built-in functions. >> - Old arguments must not be removed from built-in functions. >> - Functions must not be removed, except for the special case of moving a >> "bundled" extension to PECL, such that loading the PECL module restores >> full compatibility. >> - Accidental and undocumented behaviour ("bugs") may be changed if some >> effort is made to demonstrate that it is not widely relied on. >> - The above rules may be broken only with careful justification, e.g. to >> remove a major security issue. >> >> Note that [releaseprocess] already states that justification must be >> provided for BC breaks, even where it allows them: >> >> 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. >> >> >> If the above set of rules were adopted as binding, the vote on >> [too_few_args] would be invalid, because: >> >> - it promotes a warning to an error >> - the behaviour it is changing is documented and long-standing >> - it does not justify itself as a necessary exception to the rules >> >> I would be very interested to hear from those of you who voted "Yes" on >> [too_few_args] as to how you would formulate the rules instead. >> >> >> References: >> [too_few_args] https://wiki.php.net/rfc/too_few_args >> [releaseprocess] https://wiki.php.net/rfc/releaseprocess >> >> Regards, >> >> -- >> Rowan Collins >> [IMSoP] >> >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php >> >> > > > -- > Ferenc Kov=C3=A1cs > @Tyr43l - http://tyrael.hu > --001a11410ee20da6ca05351b3277--