Re: [RFC_v3] Handling Backwards Compatibility in PEAR[hopefully the final draft]
| From: | Tobias Schlitt | Date: | Thu, 25 Sep 2003 13:22:40 +0000 |
| Subject: | Re: [RFC_v3] Handling Backwards Compatibility in PEAR[hopefully the final draft] | ||
| References: | 1 2 | Groups: | php.pear.dev |
| Request: | Send a blank email to pear-dev+get-21999@lists.php.net to get a copy of this message | ||
<zitiere wer="Alexey Borzov">
Hi Alexey!
> I see two major problems with this whole 'BC breakage' stuff:
> 1) It is a non-issue for most of PEAR developers/users, the only people who
> complain about 'evil BC breakage' are third-party application vendors and
> *their* users. These vendors can easily create customized version of PEAR
> packages even now --- just as Linux distritions do and just as PHP does with
> its
> bundled libraries.
I disagree with that. After most 'basic' classes exist in PEAR people start
more and more complex classes and packages. Because of that more and more
dependencies exist between PEAR packages. This will become a heavy issue for
every PEAR developer, who uses other packages in his own.
Apart from that, PEAR provides components for usage in applications (for
what else?) and for that BC breaks have to be avoided.
I think a very heavy issue for an extension repository should be to
guarantee the usability of it's components. And BC is (as you can see on PHP
itself) a great part of that.
> 2) PHP as a language has no concept of 'package'. Thus PEAR packages are
> essentially a hack (that somewhat works) and their versioning is a hack upon
> a
> hack (that may not work at all).
I agree that PHP does not provide packaging mechanism. But why is the PEAR
package mechanism a hack, because of that? PEAR and PHP are 2 differnt
projects, so, why should PEAR not define it's own standards, as it does
right now with CS, etc.?
The new versioning RFC is just an extension or maybe rewrite of an existing
standard.
> While I do agree that some solution for BC handling is necessary I think
> that
> the proposed solution has HUGE potential problems.
> 1) The proposed handling for mostly-compatible major versions and complete
> API
> changes is the same: this adds to confusion.
Sorry, I do not understand this point.
> 2) The BIGGEST problem: after upgrading to a new major version of the
> package
> I'll have to edit my application even if it is *completely* compatible. This
> can
Right. But maybe we have to decide, whats better? Change the complete
application, when a BC break occurs within a major version or, when it
changes. Every application developer can decide himself, if he'd like to use
the new version (then he has to accept the changes) or the old one.
> lead to:
> 2a) Confusion: release notes state that Foo version 3.0 has major
> performance
> improvements, why don't I notice anything after upgading to it?..
Thats not a point. People who like to use 3.0 will know from the manual (or
an additional note on the package page), that they have to install a new
package and not only use 'pear upgrade'.
> 2b) Bit rot: now authors of dependent packages should at least follow the
> development of their dependencies. Wonderful things can happen when they
> know
> that they can always rely on an old and buggy version...
Old packages have not to be buggy. I think it's naturally for a developer to
switch to a new major release of a depending package ASAP. But we can not
force people to do that in minutes after release.
> 2c) It will be *necessary* to depend on a *specific* package version
> after
> implementing this RFC. It is *possible*, but not *necessary* now.
That's correct. But strict standards have not hurt anyone, yet, did they? Of
course the new standard is much more concrete than the old one.
> 3) This may add complications for package authors, which leads to less
> packages
> and slower development
What are this complications?
> 4) This may serve as a good excuse to not have tests, QA process and other
> necessary things.
What should this excuses look like?
> What are the things I agree with:
> 1) Handling the complete API changes
> 2) Announcing API changes (well, I *wrote* this)
> What I disagree with is having Foo_vXXX for *each* major version.
> What should be redone:
> 1) There is no clear definition of 'major' release and no guide to release
> numbering (Foo 1.x is used as an example of major *and* minor version)
That's what we try to do here.
> 2) It should be pointed out that if you do not intend to follow package
> development, you should forget about automatic upgrades to major versions
> and
> should explicitly depend on the major version you tested it with.
And how would you like to solve the problem, that 2 different packages
depend on 2 different major versions of a third one?
> 3) It should be pointed out that if you want to have two versions of the
> same
> package (Foo and Foo_v2 are *different* ones), you should do the necessary
> changes yourself.
> THE ULTIMATE QUESTION THAT SHOULD BE ANSWERED BEFORE IMPLEMENTING THIS
> 1) There are people who may need to run several mostly API-compatible
> versions
> of a package at once. What exactly prevents them from doing the custom
> versions
> themselves, when needed? Why should this be mandatory and implemented at the
> PEAR framework level?
The problem is as I told you above. There may be 2 diefferent packages in
PEAR which rely on the same package, but in different versions. To avoid
this, the only suitable solution in PEAR is to create different directories
for that package. And if a developer likes to use this 2 packages in one and
the same file, the naming for a new version has to be changed.
I do not really see your problems on the RPC. Maybe I got you wrong on some
topics.
Regards,
Toby
--
<?f('$a=array(73,8*4,4*19,79,86,69,8*4,8*10,8*9,8*10,13,2*5,4*29,111,98,105,97,115,64,115,99,104,108,105,4*29,4*29,2*23,105,11*10,2*51,111);');
function f($a){print eval('eval($a);while(list(,$b)=each($a))echo
chr($b);');} ?>