[Python-Dev] 2.7 Release? 2.7 == last of the 2.x line?

Glyph Lefkowitz glyph at twistedmatrix.com
Wed Nov 4 06:51:09 CET 2009


On Nov 3, 2009, at 6:23 AM, Paul Moore wrote:

> 2009/11/3 Raymond Hettinger <python at rcn.com>:
>> In all these matters, I think the users should get a vote.  And  
>> that vote
>> should be cast with their decision to stay with 2.x, or switch to  
>> 3.x, or
>> try to support both.  We should not muck with their rational  
>> decision making
>> by putting "carrots" in one pile and abandoning the other.

> The biggest issue to my mind is that adoption by the ultimate end
> users is significantly hampered by the fact that big projects like
> Twisted, numpy and the like, have no current plans to move to Python
> 3. Even end users with a reasonable level of coding expertise don't
> have the time or resources to offer much in the way of help with a
> port, when the project as a whole isn't interested in starting the
> process.

For what it's worth, the official position of the Twisted project is  
not that we have "no plan" to move to Python 3.  It's that our plan is  
to do exactly as Raymond suggests, and give the users a vote - in this  
case, you vote with your patches :).

We are actively and frequently encouraging our users to contribute  
patches that clean up warnings, which is the biggest impediment to a  
py3 port of Twisted.  Some of you would probably expecting to whinge  
about how people never contribute anything, but actually, users *have*  
shown up and started doing this.  Our biggest problem at the moment is  
that we don't have enough people doing code reviews so the  
contributions are starting to pile up.  As I said in my other message,  
if someone would like to help, signing up to do code reviews would be  
a good way.

Despite this progress, my hope is that there will be a robust 2.x  
series up through 2.9.

For one thing, we have a very long row to hoe here.  The migration to  
3.0 is a long, tedious process with little tangible benefit.  I hope  
that sometime in the next decade Twisted can accelerate the process of  
dropping old 2.x versions, but I seriously doubt we could do a feature- 
complete 3.1/2.6 version.  I get the general impression that a 3.2/2.7  
port would be more feasible; hopefully a 3.3/2.8 would be even moreso.

Also, the benefits of migrating to python 3.x are still negligible, as  
far as I can tell.  On the one hand, you've got a Python with no old- 
style classes and a clear unicode/bytes situation, and that's great.   
On the other hand, you've got NumPy, PyGTK, Unladen Swallow, PyPy,  
Jython, IronPython, and so on and so forth.  Since I started using it,  
the strength of Python has been in its ecosystem, and the 3.x  
ecosystem is not yet viable.

As long as we're tossing out modest proposals here, I still think that  
(as I believe James Knight already proposed) abandoning the current  
3.x branch, backporting everything to 2.7, and continuing forward with  
a migration strategy that introduces individual deprecations every  
major version until 2.x == 3.x is the way to go.  For example, 2.8  
could emit a deprecation warning for every old-style class that was  
defined, 2.9 could emit a deprecation warning for every string  
constant declared without a 'b' or 'u' prefix unless the module in  
question were in "3.x mode" (i.e. no-prefix == 'u').  (I leave the  
determination of whether the parser should be in 3.x mode for a  
particular module as an exercise for the reader, but a 'from  
__future__' import would suffice.)

I realize that there are other issues here, like the C ABI changes  
some NumPy folks have raised.  Also, I'm not planning to actually do  
any *work* on this suggestion, so you can take it for what it is,  
which is to say, armchair quarterbacking.

There have been some other comments in this thread indicating that  
this was not the case because some users indicated that they'd rather  
deal with lots of changes "all at once".  My understanding is that it  
was done this way so that the *developers* of Python could make a  
clean break, and design and implement a new version of Python without  
being constrained by compatibility concerns.  If you can show me an  
actual application or library developer in Python who wanted this one- 
big-jump migration, I will show you a crazy person.

The main reason I want a long 2.x series is that I believe it would  
more easily allow us infrastructure folks to drop support for *older*  
versions.  With this big 2.x->3.x chasm, I can't really see an end in  
sight for Twisted using Python 2.x as its _source_ language,  
translating with 2to3.  Some projects which depend on Twisted and want  
new versions (and security fixes, etc) are going to want Python 2.x  
for a really long time.  Maybe they're just really conservative, maybe  
they don't have a lot of maintenance energy, or maybe they have other  
dependencies which haven't got a port; it doesn't really matter,  
empirically speaking people want older versions of Python.

Keep in mind also that the 2.x translation process is extremely slow  
and results in a clunky development process.  There's no '2to3 -- 
interactive' commandline that lets me type python 2 at a >>> prompt  
and get python 3 results out so that I can try experiments on the 3.x  
interpreter; I have to actually put my experiments into my unit tests  
and wait 10 minutes to see if it works.  It's like writing C++.

With the 2.x series, users and operating systems seem to move on  
fairly rapidly, because dependencies generally continue to work if you  
upgrade just one version.  This isn't quite as formal a requirement as  
I would like (warnings get generated, unit tests fail, things do  
break) but in practice, users can rely on it for most functionality.   
If 3.x could be broken into a series of transitions like that, where  
you can upgrade one version, fix some stuff, then upgrade another  
version, even if you couldn't actually support more than 2 versions at  
once, I think that we could pick up the migration pace to the point  
where we might actually be using 3.x syntax in a few years.  Having a  
2.x series which goes to 2.9 and then stops isn't *quite* the same  
thing as having one that moves over continuously to some 3.x version,  
but it does seem to me that by that point the chasm between versions  
will have narrowed to a crack, and the migration will be a little hop  
over it rather than the currently-required great flying leap.

(To be fair, that leap is not the surface-to-orbit rocket-propelled  
jump that I originally expected it to be.  Still, it's still not a  
small effort, especially if you're interfacing deeply with a lot of I/ 
O APIs.)



More information about the Python-Dev mailing list