For years I've been following the adventures of Zope, an open source application server that is particularly adept at content
management. The Zope engine and its layered applications are written in Python, and the whole system is built on top of a
Python-based object database called ZODB. Having done a lot of Zope development myself, I know firsthand how powerful and
productive this arrangement can be. Admittedly it's an unorthodox approach that an enterprise IT planner might be reluctant
to bet on. But as I learned recently on a visit to Zope's headquarters in Fredericksburg, Va., some big organizations are
doing just that. NATO's worldwide intranet, for example, is based on Zope.
I first began using Zope in 1999, about a year after its release. It was quality software then, and has steadily matured ever
since. Zope Corp. (formerly Digital Creations) is the primary developer of the Zope engine, now nearing its 2.7 release. Zope
supports the company's consulting and training services and is the platform for layered commercial products. These include
Zope4Media, a content management system for print and broadcast media (used, most notably, by Boston.com), and Zope Z4I (Zope4Intranets),an
advanced intranet portal toolkit that's delivered along with a four-day training course. For two days last week I attended
that course, which was taught by ace Zope developer and trainer Casey Duncan.
As with many portal systems, Z4I enables users to rearrange the portlets shown on their home pages and to vary the views displayed
within them. By default, a user's home page includes a portlet that displays recently added documents. Another student in
the class wondered how to create a view to count recently added documents by type. Duncan built the view on the spot and wrote
so little code to do it that I was able to mirror his solution into my own instance of Z4I as he typed.
In a deeply object-oriented system such as Zope, you can often solve hard problems in a few lines of code. The trick, of course,
is to figure out which lines of code are needed, and where to put them. As layers of abstraction accrete, this can get even
trickier. Z4I, for example, relies on an underlying content management framework and a page-templating system. These are freely
available add-ins to the base product, and both inherit behavior from it. According to Jim Fulton, the architect of Zope and
CTO of Zope Corp., the forthcoming Zope 3, expected to reach beta later this year, is a ground-up rewrite that will scrape
away and "mercilessly refactor" many layers of sediment.
I see hopeful signs that the effort will be a success. First, the Zope 3 project is aggressively test-driven. Even at the
alpha stage there are already thousands of unit tests. Second, Zope 3 features are being slipstreamed into the 2.x series.
Z4I, for example, uses Zope 3's schemas to support the creation of custom content types with automatically generated editing
forms and displays.
At some point Zope 2.x will include all of Zope 3. "We'll charge twice as much," said Fulton, jokingly referring to fact that
twice zero is zero. So I expect a smooth transition, during which the Zope team and the worldwide community of open source
Zope developers will continue to evolve the 2.x series. As a longtime Zope user and developer I'm happy to report that the
prospects for this excellent product appear brighter than ever.