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.