[Python-Dev] Proto-PEP for maintaining backward compatibility

Neal Norwitz neal@metaslash.com
Thu, 06 Jun 2002 15:03:04 -0400

This is a multi-part message in MIME format.
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Guido van Rossum wrote:

> Maybe you should mention some of the most common things you need to avoid
> to preserve backwards compatibility with 1.5.2, 2.0, 2.1?

Updated version attached.  Not sure if the Tools should remain in there.

Content-Type: text/plain; charset=us-ascii;
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;

Title: Backward Compatibility for Standard Library
Version: $Revision:$
Last-Modified: $Date:$
Author: neal@metaslash.com (Neal Norwitz)
Status: Draft
Type: Informational
Created: 06-Jun-2002
Python-Version: 2.3


    This PEP describes the packages and modules in the standard
    library which should remain backward compatible with previous
    versions of Python.


    Authors have various reasons why packages and modules should
    continue to work with previous versions of Python.  In order to
    maintain backward compatibility for these modules while moving the
    rest of the standard library forward, it is necessary to know
    which modules can be modified and which should use old and
    possibly deprecated features.

    Generally, authors should attempt to keep changes backward
    compatible with the previous released version of Python in order
    to make bug fixes easier to backport.

Features to Avoid

    The following list contains common features to avoid in order
    to maintain backward compatibility with each version of Python.
    This list is not complete!  It is only meant as a general guide.

    Note the features to avoid were implemented in the following
    version.  For example, features listed next to 1.5.2 were
    implemented in 2.0.

        Version    Features
        -------    --------
          1.5.2    string methods, Unicode, list comprehensions, 
                   augmented assignment (eg, +=), zip(), import x as y,
                   dict.setdefault(), print >> f, calling f(*args, **kw),
                   plus 2.0 features

          2.0      nested scopes, rich comparisons, function attributes,
                   plus 2.1 features

          2.1      use of object or new-style classes, iterators, 
                   using generators, nested scopes, or //
                   without from __future__ import ... statement,
                   plus 2.2 features

          2.2      bool, True, False, basestring, enumerate(), {}.pop(),
                   PendingDeprecationWarning, Universal Newlines,
                   plus 2.3 features

Backward Compatible Packages, Modules, and Tools

    Package/Module     Maintainer(s)          Python Version
    --------------     -------------          --------------
    compiler           Jeremy Hylton               2.1
    distutils          Andrew Kuchling             1.5.2
    email              Barry Warsaw                2.1
    sre                Fredrik Lundh               1.5.2
    xml (PyXML)        Martin v. Loewis            2.0
    xmlrpclib          Fredrik Lundh               1.5.2

    Tool                         Maintainer(s)   Python Version
    ----                         -------------   --------------
    scripts/freeze/modulefinder  Thomas Heller       1.5.2


    This document has been placed in the public domain.

Local Variables:
mode: indented-text
indent-tabs-mode: nil
sentence-end-double-space: t
fill-column: 70