Before I submit the below new PLIP to make PLIP #2812 really work and to make new things happen in a natural manner, I want to fish with this pre-discussion for constructive comments on this new PLIP and for seconders to support this new PLIP.
PLIP (Plone Improvement Proposal)
The EOL of Python 2.7 leads to migration issues and work overload. Unsolicited work needs to be done. Furthermore this work is experienced as needless. Without value being added. This PLIP proposes maintaining of Py2 support. This PLIP has been announced in the comments at PLIP #2812. The goal of PLIP #2812 is to lift off work from the core developers, the release team, the framework team, admins, etc. The goal of this new PLIP is to make the goal of PLIP #2812 really happen. And to make new things happen. In a natural manner.
Maintain Py2 support and invest in a new Py2 supplier.
The motivation of this PLIP has to do with the EOL of Python 2.7. The PEP that EOL'ed Python 2 is experienced as an obstacle to the flow of things that are naturally happening, rather than that it make (new) things happen.
Plone Legacy and its third party products is a rich codebase suitable for almost all everyday business on the web. The EOL of Python 2.7 makes this unusable for online production buildouts. It can not be advised anymore because there are no Py2 security updates available from April 2020 onwards.
Migration to Python 3 is not an easy task and at the expense of resources, causing an obstacle for further and extended use and development of buildouts. Advanced Enterprise Plone Legacy buildouts can be created and maintained by admins without skills (so to speak). Migration to Python 3 is work for codemonkeys and Python Ninja’s. Python 2.7 is secure, there are no known security issues. It is dynamic and modular. It is state of the art. Almost perfect. With the __future__module Python 3 features can be backported to Py 2.
The print function in Python 3 is presented as the key difference between Python 2 and Python 3. Python 2’s print statement has been replaced by the print() function. Exactly this fact gives the impression that Python 3 is not needed because with the __future__module print can also be a function in Py2. That makes Py2 more easy than Python 3. Furthermore Python 3 has only one intuitive way of doing things as compared to Python 2. This makes Python 3 less flexible than Py2.
According to the discussion at PLIP #2812 even Plone 6 runs on Py2. In preparation of this new PLIP the question has been asked what Plone really needs from Python 3 that Python 2 can not provide. There came no answer. So it seems self evident to maintain Py2 support and invest in a new Py2 supplier to lift off work from the core developers, the release team, the framework team, admins, etc. And to make new things happen. In a natural manner.
Assumptions are that:
Py 2 can provide by way of __future__module and/ore other (new) modules ore way in the todays and future needs of Plone;
Py2 can do almost all the really neat things that Python 3 can do even when it doesn’t have it yet;
The new Py2 supplier delivers quality Py2 with security updates;
Investing in a new Py2 supplier is less work than all the migration work done by all Plone users on all there sites, every time a Python version is EOL’ed;
Plone Legacy has a rich egg supply on PyPy;
Almost all issue’s users experience with Plone Legacy have been answered by the Plone Community in the Plone Fora;
Maintaining an up to date Py2 fork is less work than migrating to Python 3 and every other Python version next by all Plone users on all Plone sites;
Plone want to strengthen its position in the market.
Proposal & Implementation
The proposal is: maintain Py2 support and invest in a new Py2 supplier.
The implementation of the first part of this proposal is easy. Everybody knows Py2. Py2 is well established. Till today Plone relies on Py2. Even version 6 runs on Py2. Maintaining Py2 support is continuing todays work without interruption. Nobody need to read about Python 3 migration efforts and learn its methodology for Python migration.
The implementation of the second part of this PLIP can also be easy. It can also be more complex. The second part of this PLIP can be implemented by contracting a new Py2 supplier. This supplier can be certified by Plone. The supplier can be selected by issuing a tender.
There is a Py2 fork active on GITHUB. Plone 4.3.19 can be installed on this fork with some changes in the versions. Documents et cetera can not be added in to a Plone site yet when this fork is used. This seemingly has to do with RestrictedPython. The feasibility of this part of the PLIP depends on the quality and compatibility (with RestrictedPython ) of the new Py2 supplier.
Optional Plone can maintain its own Py2-fork to lift off work from the core developers, the release team, the framework team, admins etc. Python 2 is FOSS. PlonePy, Plonethon ore Plython 2 can be a backwards-compatible fork of the Python 2.7.18 interpreter (expected April 2020) with new syntax, builtins, and libraries backported from Python 3.x. This way python code and C-extensions targeting Python 2.7 and below can run unmodified on the new Plone owned Py2-fork and produce the same output. This way Plone can also use new features from Python 3.x.
Forking Python 2.7.18 in to a Plone owned Py2-git is easy. Plone is compatible with this fork out of the box. The main work on this fork is (for the time being) to keep the security up to date. In terms of development work ‘only’ new things Plone want in its Py2-fork needs to be done.
Goods and/or services produced as a result of this PLIP are Plone Current and Plone Legacy with its rich ready to use egg supply on PyPy, and with the ability to use Python 3+ features, for everybody without the need to invest in migration to future Py-versions. This PLIP also can strengthen the position of Plone in the market as leading Enterprise CMS. The new Plone compatible Py2 supplier can make Python (TM) obsolete.
The risks of accepting this PLIP are:
the same risks as the use of Python 2.7;
the risk of increased workload on sales, services, after sales and accountancy’;
the risk of loosing track on future development by Python(TM);
the risks that comes with every Py 2 supplier.
The risk of not accepting this PLIP are:
that Plone is going to have a rich and growing legacy codebase with huge economical potential that is not being utilized, every time again when Python(TM) EOL’s a Python version;
that all Plone users need to invest in migration heavily every time a Python-version is being EOL'ed, without the experience of added value;
that users are going to get more unwanted and/ore unneeded migration work from there Py- supplier;
loss of market share ore lake of growth of market share ore an obstacle to get a bigger market share;
increased workload on developers, release teams, framework team, admins, and other Plone users.
the need of specialized admins and service providers to host and maintain Plone sites.
that Plone is in fact not FOSS because Python(TM) is in fact not FOSS because of imposed and unsolicited migration efforts at the expenses of resources, and its do or die methodology for migration.
All Plone users and everybody else with an interest in a Py2-fork with Python 3 features backported targeting Python 2.7 and below. According to recent reports 50% of the companies don’t have a plan for Python 2 EOL. So there is a demand and an attractive market for a new Py 2 supplier.