drop support for Python < 2.6 #1658
Labels
No Label
0.2.0
0.3.0
0.4.0
0.5.0
0.5.1
0.6.0
0.6.1
0.7.0
0.8.0
0.9.0
1.0.0
1.1.0
1.10.0
1.10.1
1.10.2
1.10a2
1.11.0
1.12.0
1.12.1
1.13.0
1.14.0
1.15.0
1.15.1
1.2.0
1.3.0
1.4.1
1.5.0
1.6.0
1.6.1
1.7.0
1.7.1
1.7β
1.8.0
1.8.1
1.8.2
1.8.3
1.8β
1.9.0
1.9.0-s3branch
1.9.0a1
1.9.0a2
1.9.0b1
1.9.1
1.9.2
1.9.2a1
LeastAuthority.com automation
blocker
cannot reproduce
cloud-branch
code
code-dirnodes
code-encoding
code-frontend
code-frontend-cli
code-frontend-ftp-sftp
code-frontend-magic-folder
code-frontend-web
code-mutable
code-network
code-nodeadmin
code-peerselection
code-storage
contrib
critical
defect
dev-infrastructure
documentation
duplicate
enhancement
fixed
invalid
major
minor
n/a
normal
operational
packaging
somebody else's problem
supercritical
task
trivial
unknown
was already fixed
website
wontfix
worksforme
No Milestone
No Assignees
3 Participants
Notifications
Due Date
No due date set.
Reference: tahoe-lafs/trac-2024-07-25#1658
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Let's drop support for versions of Python < 2.6. According to distrowatch's tables about the versions of packages that come with distros, this would exclude Tahoe-LAFS 1.10 from being usable with the included Python on the following versions of major distros:
Among other benefits, dropping support for Pythons older than 2.6 would allow us to remove the [dependency on simplejson]source:git/src/allmydata/_auto_deps.py?annotate=blame&rev=76e7f0ad4b0d109a9a92e451ac9b3c9e8a827eb0#L15 and the (complex imperatively decided) [dependency on pysqlite]source:git/src/allmydata/_auto_deps.py?annotate=blame&rev=76e7f0ad4b0d109a9a92e451ac9b3c9e8a827eb0#L92.
See comment:87124 -- apparently Python ≥ 2.6 is already ubiquitous in the *BSD world.
[*] that is, the oldest OS version supported by the OS distributors and still receiving security patches.
I don't understand the "oldest supported" columns for FreeBSD and RedHat, if they're supposed to be referencing the "included" Python.
Another thing that could be dropped is the SHA-256 bindings in pycryptopp, since
hashlib
has SHA-256 since Python 2.5.Twisted is planning to drop support for Python ≤ 2.5 after their next release, which means sometime this year or so:
http://twistedmatrix.com/trac/ticket/5553
Replying to davidsarah:
I changed the title of the "oldest supported" column to "oldest supported version of the operating system". Does it make sense now?
As far as I can tell the FreeBSD column doesn't quite make sense. I'm a little fuzzy, but I think python isn't part of the base system, but is instead in "ports", which is similar to NetBSD. I think the culture is to run relatively recent ports even on older base systems, so my guess is that dropping <=2.5 will not be a significant issue for FreeBSD users.
The chart above doesn't have NetBSD, but python 2.6 has been default in pkgsrc for probably 2 years if not more, and the next quarterly release of pkgsrc (April) will have 2.7 as the default. So dropping support for <=2.5 is fine from that viewpoint also.
Replying to [zooko]comment:5:
No, that wasn't what I was confused about. I was confused as to how it is possible for an entry in the first column, i.e. "excluded version of the operating system", to be greater than or equal to the "oldest supported version of the operating system" -- i.e. FreeBSD 7.2 >= FreeBSD 7.1 and RedHat 5.7 >= RedHat 5.7.
Replying to [davidsarah]comment:7:
I'm still not sure I understand what you were/are confused about. "excluded version of the operating system" is supposed to be the newest release of the operating system that doesn't have Python ≥ 2.6. "oldest supported version of the operating system" is supposed to be the oldest release of the operating system that is supported by the operating system distributors, i.e. the oldest release of the operating system that still gets security patches. Does that help? I apologize for the confusing wording.
Replying to gdt:
I guess I was following distrowatch on that. So you're saying that even users of FreeBSD older than 7.3, such as FreeBSD 7.2 or 7.1 (or even 6?) will be able to deploy a Python 2.6-requiring Tahoe-LAFS without installing a local Python?
According to distrowatch, the NetBSD entry would look like this:
But apparently distrowatch, or my way of reading it, is inaccurate. Could you, gdt, please update the table to reflect NetBSD? Thanks!
sqlite bindings are in Python 2.5, and so is
hashlib.sha256
. When we've had buildslave failures for unsupported syntax, they've usually been for 2.4.x and not 2.5. So is thesimplejson
dependency the only reason to drop support for 2.5?If so, note that the
json
module in the stdlib is not identical tosimplejson
. According to http://stackoverflow.com/questions/712791/json-and-simplejson-module-differences-in-python, the stdlib version is less frequently updated and slower (although I would be more concerned about security-relevant bugfixes than speed).I agree we should definitely drop support for 2.4.x.
zooko wrote:
Oh, ok, that wasn't at all obvious.
distrowatch is confused; NetBSD simply does not include python (at all, and never has). In NetBSD culture, one use pkgsrc to get extras from among the 6000 or so other things that are not part of the operating system and are in pkgsrc. FreeBSD is basically the same way, except I can't speak as authoritatively about it.
On NetBSD, one basically needs a version of pkgsrc (stable ones are released quarterly) that supports the version of the OS one is running (meaning that most packages will build on that OS version), and then it's easy to use whatever is in that pkgsrc version. So people on NetBSD can have python 2.6 or 2.7 very easily, and 2.6 is what's been normal for a while. In NetBSD, at least the stable branch of the last two releases are generally supported by pkgsrc. 6.0 isn't out, so anyone with 4.0, 5.0, 5.1. etc. will be able to have python 2.6 or 2.7 without difficulty, from the current 2011Q4 stable branch, or the April 2012Q1 branch.
But, the notion that "NetBSD 4.0 has python 2.5.2" is confused. What they might mean is that a stable version of pkgsrc associated in time with the release of NetBSD 4.0 had python 2.5.2, but that doesn't matter now.
On FreeBSD, I believe the culture is that one upgrades from 7.x to 7.x+1 quite easily, and you're running old/not-really-maintained-code if you don't. So sure, people need to build python, but that's done automatically when building tha tahoe-lafs port (which either does exist or ought to).
Also, on FreeBSD (or Dragonfly, OpenBSD, Mac, Linux, Solaris, AIX, etc) one can use pkgsrc.
I suspect the problem is that distrowatch either doesn't get it that all the world does not work like GNU/Linux, or is trying to map the world into that model.
But all in all, my belief is that dropping 2.5 is a non-event for the BSD world.
I haven't updated the table, because I don't think it makes sense for other than Linux-style distributions and I don't know how to do it sensibly. There's no Windows row, which would have the same issues, as Windows doesn't include python either.
I found some of my old notes for what we could clean up if we required a newer python version. If we dropped 2.4 and required >=2.5, we could:
DictOfSets
with collections.defaultdict(set)pysqlite2|sqlite3
with stdlibsqlite3
And then >=2.6 would get us stdlib
json
, and could replace our LRU cache (unless we already got rid of it?) withcollections.deque(maxlen=)
. It might even be possible to get a codebase that works with py2.6 and py3.3 simultaneously, since 2.6 adds b"", print-as-function (guarded by*future*
), and "except [FooError](wiki/FooError) as e:
" (although, of course, we kind of have to wait for our dependencies to move to py3 first).Attachment require-python-2.5.darcs.patch (124929 bytes) added
Require Python 2.5. Includes simplifications resulting from being able to use sqlite3 from the standard library. This also drops sqlite3 from the set of versions and paths we report.
Note that it's only dropping support for Python 2.4.x that is in milestone 1.10.
Attachment use-SEEK_END.darcs.patch (104547 bytes) added
Since we now require Python 2.5, we can use os.SEEK_END. (Apply on top of previous patch.)
Zooko read these patches and approved of them, so I committed them (only on trunk, not for 1.9.2): changeset:0fc196ea5fa4ad2f, changeset:a1a1b5bf8a6e1a09, changeset:4ddcde309454179a
Please open separate tickets for any other simplifications that can be made, or if we want to also drop 2.5. (From comment:87130, only the sqlite change has been done.)
drop support for Python < 2.6to drop support for Python < 2.5By the way, requiring 2.6 would not allow eliminating the dependency on simplejson; that was added to the stdlib in 2.7.
Oh, I'd missed comment:87117 and http://twistedmatrix.com/trac/ticket/5553. So there is still a strong incentive to drop support for 2.5, so that we don't have to impose a conditional
"Twisted <= 12.1"
requirement in_auto_deps.py
for Python 2.5.drop support for Python < 2.5to drop support for Python < 2.6Replying to davidsarah:
http://docs.python.org/library/json.html#module-json says that json was added in python2.6 . Some minor features were added in the py2.7 version, but I don't think they'd be useful to us.
According to my notes from the original description in this ticket, plus gdt's comments in comment:87124, there aren't many people who require Python 2.5. We should post to the tahoe-dev list asking someone to speak up if they use Python 2.5. I'll bet nobody does!
In changeset:b82cddef7b7f5eee:
In changeset:b82cddef7b7f5eee:
In source:src/allmydata/test/test_upload.py:
In changeset:5923/cloud-backend:
Fixed in 7008ffa5.
I realized that the patch fixing #1775 depends on a construct added in Python 2.6 (
"except Exception as e"
). I think we had already decided to drop Python 2.5 for Tahoe-LAFS v1.10.