Re: [Zope3-dev] Backward compatibility and major releases (series) update

2007-08-23 Thread Dieter Maurer
Jim Fulton wrote at 2007-8-22 15:57 -0400:
> ...
>I eventually came to the conclusion that our original conclusion was  
>sound, but that we should only introduce backward incompatibilities  
>when the need is very dire, as it will cause lots of pain.

Very good!



-- 
Dieter
___
Zope3-dev mailing list
Zope3-dev@zope.org
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com



[Zope3-dev] Backward compatibility and major releases (series) update

2007-08-22 Thread Jim Fulton


A while ago, we had a discussion about backward compatibility and  
decided that only major releases should be backward compatible.  So,  
for example, a 1.2 release should be backward compatible with a 1.1  
release, but a 2 release could be backward incompatible with a 1  
release.  We then said we wanted a nice way to spell depending on a  
major release.  (The current way to spell depending on a major  
release is "foo >=R.dev is the major release number.)


We recently had an opportunity to experience this with  
zc.relationship. zc.relationship 2 was released and some packages  
were updated to require zc.relationship 1.  Unfortunately, not all of  
the packages we use were updated and this caused version conflict  
errors.  (This was partly a result of setuptools weak conflict  
resolution algorithm.) My initial response was, "oh, we need to  
update all of the other packages that depend on zc.relationship to  
require version 1."  But then I started wondering how we would  
migrate to version 2 and realized that it was going to be rather  
hard.  All of the dependent packages would have to move in lock step  
and we'd be back to a monolith.  This was enough to make me think  
that backward incompatible changes are just untenable.  I gave a hint  
to this in some later email threads.


Since then, I've looked at a number of packages that we've split out  
from Zope that have excessive dependencies.  zope.component is a  
great example.  The excessive dependencies (at least the hard ones to  
deal with) are a result of poor factoring of functionality at a time  
when dependencies didn't matter.  Unfortunately, I think the only way  
to fix some of these is to split off functionality, which will  
introduce backward incompatibility.


I eventually came to the conclusion that our original conclusion was  
sound, but that we should only introduce backward incompatibilities  
when the need is very dire, as it will cause lots of pain.


Jim

--
Jim Fulton  mailto:[EMAIL PROTECTED]Python 
Powered!
CTO (540) 361-1714  
http://www.python.org
Zope Corporationhttp://www.zope.com http://www.zope.org



___
Zope3-dev mailing list
Zope3-dev@zope.org
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com