What’s new in Zope 4.0

The article explains the new high-level features and changes found in this version of Zope.

You can have a look at the detailed change log to learn about all minor new features and bugs being solved in this release.

Version numbering increase

Version numbers for Zope have been confusing in the past. The original Zope project iterated through version one to two up to version 2.13. In parallel a separate project was launched using the name Zope 3. Zope 3 wasn’t a new version of the original Zope project and in hindsight should have used a different project name. These days this effort is known as BlueBream.

In order to avoid confusion between the separate Zope 3 project and a new version of this project, it was decided to skip ahead and use Zope 4.0 as the next version number. The increase in the major part of the version also indicates the number of backwards incompatible changes found in this release.

Python versions

Zope 4 supports both Python 2.7 and Python 3.4, 3.5 or 3.6. While PyPy is supported by some of the underlying dependencies, it is incompatible with a couple of the foundational C extensions. As a result Zope as a whole is not compatible with PyPy.

The Python 3 support currently covers the core dependencies shipped with Zope and is limited to the new WSGI based publisher. The new external ZServer project is currently limited to Python 2.7 compatibility and likely to stay that way.

Python 3 support is also only offered for new installations of Zope, as there is so far no database migration tool in place.

View components without Acquisition

In Zope 2.12 Zope Toolkit view components changed and stopped inheriting from Acquisition base classes, as Acquisition got aware of __parent__ pointers, which meant that aq_parent(view) worked, without the view having to mix-in an Acquisition base class. For backwards compatibility a new AcqusitionBBB class was mixed in, to continue to support calling view.aq_parent. This backwards compatibility class has been removed in Zope 4, so view.aq_parent no longer works and you have to use aq_parent(view). The same applies for other view components like view page template files or viewlets.

Chameleon based page templates

Chameleon is an alternative implementation of the page template language supporting additional features and impressive template rendering speed.

So far it was available via the five.pt project. In Zope 4 the code from five.pt has been merged into Zope core and the Chameleon based engine is now the default, removing the need to install five.pt manually.

Memory use

Zope 4 depends on a new DateTime release. The new release has been optimized for better memory use. Applications using a lot of DateTime values like the Plone CMS have seen total memory usage to decrease by 10% to 20% for medium to large deployments.