Description
Proposer : Johannes Raggam
Seconder : Philip Bauer
Abstract
This PLIP is about updating Plone's framework dependencies (ZCA, ZTK and Zope) to the latest possible versions.
Motivation
Plone 5 still uses ages old ZTK dependencies and Zope2. While the ZTK dependencies are still actively developed and most of them already Python 3 compatible, the development for Zope 2 has nearly stopped. The successor of Zope2 is Zope 4. The major release version indicates that backwards incompatible refactoring has happened: long deprecated stuff was removed, some performance improvements and bugfixes were done, a few features were added.
To be able to move forward with Plone, we have to modernize our framework dependencies. Also, this PLIP is a precondition for Python 3 compatibility.
Assumptions
- We are not able to switch to Pyramid / SubstanceD soon.
- Modernizing our framework dependencies will help with such a possible switch in the future.
- A recent set of ZTK packages is a precondition for Python 3 compatibility.
- Patching and hacking the ZPublisher is better done with a cleaned up version.
Proposal & Implementation
PLIP configuration: https://github.com/plone/buildout.coredev/blob/5.0/plips/plip-zope4.cfg
Jenkins PLIP job: http://jenkins.plone.org/view/PLIPs/job/plip-zope4/
The PLIP buildout configuration extends versions.cfg
and sources.cfg
from the Zope project. We added the option auto-checkout = *
to check out all sources with mr.developer to get the very latest versions for each dependency. Only some test dependencies are installed as egg. For easier tracking, the eggs are installed in the plips/eggs folder.
We started to fix test failures and created branches and pull requests for all of our changes. Not everything is pull-requested yet. Many of the failures came from moved imports, removed functionality (e.g. no doctest suite any more in zope.testing, as we can use the stdlib for that) but also bugfixes in production code. E.g:
- Compatibility with PythonScripts zopefoundation/zope.publisher#10
- zopefoundation/Zope@3320082
- Interface comparison with emtpy __name__ reports incorrect equality zopefoundation/zope.interface#31
All fixes are made backwards compatible for our current set of dependencies.
At the Alpine City Sprint most of the failures could be fixed. There are only a few test failures left. Also, there are a lot of test isolation problems, but that's another story.
Two packages are not yet updated: Products.ZCatalog and ZODB 4. We still have to decide, if these packages are part of this PLIP. Updating them involves finding a solution for the "ZCatalog Regression: indexing None Values" problem: zopefoundation/Products.ZCatalog#5
We propose this PLIP for inclusion in Plone 6.
Deliverables
- Test fixes.
- Bug fixes.
- Green Jenkins build.
- Upgrade guide based on changes on packages within this PLIP.
- Check monkey patches for their compatibility with Zope 4.
- [ ] Replace dependency on "Zope2" with "Zope". Eventually provide a Zope2 shim. - not necessary - Zope version 4.0 is still named Zope2
.
Risks
Zope 4 is currently in alpha state, there is no release yet and development activity is - as with Zope2 - not very high.
We need to show more responsibility for Zope 2 and related packages.
Participants
- Johannes Raggam ( @thet / PLIP proposer / Alpine City Sprint Zope 4 Team)
- Philip Baiuer ( @pbauer / PLIP seconder / Alpine City Sprint Zope 4 Team)
- Gil Forcada ( @gforcada / Jenkins Zope 4 PLIP Job)
- Maurits van Rees ( @mauritsvanrees / Tracking down and fixing Compatibility with PythonScripts zopefoundation/zope.publisher#10 )
- Jens Klein ( @jensens / Tracking down Zope 2 product initialization bug: zopefoundation/Zope@3320082 )
- Alexander Loechel ( @loechel / Began working on Products.RestrictedPython bringing to Python 3. Not part of this PLIP)
Python 3
Python 3 compatibility is not part of the PLIP. A major showstopper for Python 3 compatibility is Products.RestrictedPython. @loechel worked on that during the Alpine City Sprint 2016, which resulted in this document: zopefoundation/RestrictedPython@45c50cb
Also, ZODB 4 is a precondition for Python 3 compatibility.
Notes
Some experiments to install Plone 5 on Zope 4 started back in 2013: https://dev.plone.org/ticket/13822
At the Plone conference 2015 I demoed a running installation of Plone 5 on Zope 4 with the package: https://github.com/collective/experimental.zope4 and started to fix some failing tests.
A major effort on working on this PLIP was done at the Alpine City Strategic Sprint 2016 in Innsbruck: http://www.coactivate.org/projects/alpinecitysprint-2016
Related to this PLIP: "WIP try ZODB3" plone/buildout.coredev#137
Metadata
Metadata
Assignees
Type
Projects
Status