Update the Python 3 stack in Fedora from Python 3.3 to Python 3.4.
- Name: Slavek Kabrda
- Email: <firstname.lastname@example.org>
- Release notes owner:
- Targeted release: Fedora 21
- Last updated: August 26, 2013
- Tracker bug: <will be assigned by the Wrangler>
Python 3.4 adds numerous features and optimizations. See the upstream notes at http://www.python.org/dev/peps/pep-0429/#features-for-3-4 and http://docs.python.org/dev/whatsnew/3.4.html.
Benefit to Fedora
Fedora aims to showcase the latest in free and open source software - we should have the most recent release of Python 3.
Compare with the Python 3.3 feature page.
We need to wait for Python 3.4 to reach feature freeze (planned for 3.4.0 beta 1: November 24, 2013), so that the bytecode format for .pyc files is frozen, together with the ABI for extension modules.
At that point we can rebase python3 to the latest release candidate of that code. We would then need to rebuild all python 3 packages. See https://fedoraproject.org/wiki/Python3#Python_3_already_in_Fedora
For bonus points, we ought to tell "file" and "rpmlint" about the new bytecode format for .pyc files.
Note that the suffix of some files should change, and this may require slight packaging tweaks in the various packages that ship Python 3 code:
- bytecode files changing from .cpython-33.pyc (and .cpython-33.pyo) to .cpython-34.pyc (and .cpython-34.pyo)
- extension modules changing from .cpython-33m.so to .cpython-34m.so and .cpython-33dm.so to .cpython-34dm.so
Notes about porting from Python 3.3 can be found at http://docs.python.org/dev/whatsnew/3.4.html#porting-to-python-3-4.
- Proposal owners:
This change is isolated to Python 3 stack, which is not yet crucial for Fedora. Still, as the time of moving Fedora to Python 3 is hopefully approaching, we need to do this very cautiously. I will prepare Python 3.4 prerelease RPMs in a private repo and will do a test rebuild of all Python 3 dependent packages, filing bugs/sending patches to upstreams. This will give us a good notion of how drastic this change will be and whether or not we really want to undergo it. Overall, the change should have roughly this schedule:
- After change is accepted: Start building Python 3.4 prereleases in a private repo, continuously upgrading with latest upstream prerelease versions.
- November 24, 2013 (3.4.0 beta 1: feature freeze): Start rebuilding Python 3 dependent packages in the repo.
- January 19, 2014 (3.4.0 candidate 1) Request a side tag in Koji and start rebuilding there.
- February 23, 2014 (3.4.0 final) If everything goes went well up to this point, merge into F21.
- Other developers:
I'll gladly accept any help with rebuilding/porting/patching/bug reporting of dependent packages as well as suggestions for Python 3.4 packaging itself. When we're sure that we really want to do the transition, it'd be great if package owners rebuild their packages themselves in the Koji sidetag.
- Release engineering:
We will require a side tag in Koji for this.
- Policies and guidelines:
User written Python 3 scripts/applications may require a small amount of porting, but mostly Python 3.3 is forward compatible with Python 3.4.
How To Test
Interested testers do not need special hardware. If you have a favorite Python 3 script, module, or application, please test it with Python 3.4 and verify that it still works as you expect.
My own test plan:
- Smoketest of the interpreter
- Run the upstream regression test suite (this is done during %check)
Users should not notice any difference, other than the availability of the 3.4 interpreter
See notes in "Scope" above.
As mentioned in "Scope" above, we will be building everything in Koji sidetag, so we may decide not to merge it in F21, if anything seems to be wrong.
- Contingency mechanism: Don't merge Koji sidetag into F21.
- Contingency deadline: TBD (probably F21 beta change deadline)
- Blocks release?: We will merge to F21 only under the condition that reasonably small amount of packages doesn't build/work with Python 3.4. (will be decided before merge)