[Python-Dev] Re: No new features

Donovan Baarda abo at minkirri.apana.org.au
Wed Mar 9 23:41:29 CET 2005

G'day again,

From: "Michael Hudson" <mwh at python.net>
> "Donovan Baarda" <abo at minkirri.apana.org.au> writes:
> >
> > Just my 2c;
> >
> > I don't mind new features in minor releases, provided they meet the
> > following two criteria;
> >
> > 1) Don't break the old API! The new features must be pure extensions
that in
> > no way change the old API. Any existing code should be un-effected in
> > way by the change.
> >
> > 2) The new features must be clearly documented as "New in version
> > This way people using these features will know the minium Python version
> > required for their application.
> No no no!  The point of what Anthony is saying, as I read it, is that
> experience suggests it is exactly this sort of change that should be
> avoided.  Consider the case of Mac OS X 10.2 which came with Python
> 2.2.0: this was pretty broken anyway because of some apple snafus but
> it was made even more useless by the fact that people out in the wild
> were writing code for 2.2.1 and using True/False/bool.  Going from
> 2.x.y to 2.x.y+1 shouldn't break anything, going from 2.x.y+1 to 2.x.y
> shouldn't break anything that doesn't whack into a bug in 2.x.y -- and
> "not having bool" isn't a bug in this sense.

You missed the "minor releases" bit in my post.

major releases, ie 2.x -> 3.0, are for things that can break existing code.
They change the API so that things that run on 2.x may not work with 3.x.

minor releases, ie 2.2.x ->2.3.0, are for things that cannot break existing
code. They can extend the API such that code for 2.3.x may not work on
2.2.x, but code that runs on 2.2.x must work on 2.3.x.

micro releases, ie 2.2.1 ->2.2.2, are for bug fixes only. There can be no
changes to the API, so that all code that runs on 2.2.2 should work with
2.2.1, barring the bugs fixed.

The example you cited of adding bool was an extension to the API, and hence
should have been a minor release, not a micro release.

I just read the PEP-6, and it doesn't seem to use this terminology, or make
this distinction... does something else do this anywhere? I thought this
approach was common knowledge...

Donovan Baarda                http://minkirri.apana.org.au/~abo/

More information about the Python-Dev mailing list