[Zope-dev] Re: Zope vs. Cocoon

Stefano Mazzocchi cocoon-dev@xml.apache.org
Tue, 26 Feb 2002 19:40:36 +0100


"Craeg K. Strong" wrote:
> 
> Hello:
> 
> I am the author of this paper (mea culpa! :-)  and I thought I
> would respond to your comments.  First off, thanks for thorough and
> thoughtful review.  My responses are embedded below:

Craeg,

I have to thank you for giving us such good opportunity to learn and
improve. I must admit I'm very positively surprised to have such good
first-hand information on Zope.

See my comments intermixed below:

> >>The paper concludes that, despite a few annoying limitations, Zope
> >>is a much more powerful, mature, and well-documented environment
> >>and probably holds a one to two year lead over Cocoon and other
> >>similar Java-based publishing environments.
> >>
> >
> >This quote says it all and there are a few things that I have to admit
> >myself:
> >
> >1) well-documented: cocoon documentation is currently very poor compare
> >to Zope's or compared to other successful technologies (say PHP). It is
> >clear that without good docs, there is no good product.
> >
> >But Cocoon has been released final 3 months ago and it's growth rate is
> >clearly impressive, even for my apache experience.
> >
> >Anyway, I would venture to forecast that in a year, Cocoon will *easily*
> >cover this difference, also because many books are planned to appear.
> >
> This is good news.  Zope now has four (English language) books out, plus
> two more in the works.  I see there is a Cocoon
> book to be published in June, but from what I understand it covers the
> Cocoon1 architecture ?

No, I can guarantee you that all books that will come out will cover
Cocoon 2.x.
 
> >2) mature: granted, you can't have a 3 months-old technology and
> >consider it 'mature'. At the same time, we've been working on this for
> >two years and we know where we're going. There is very little doubt that
> >Cocoon will mature and solidify soon.
> >
> Based on experiences with Cocoon1 and the traffic on cocoon-dev, I would
> agree.

Thanks.

> >3) powerful: on the technological side of things I dare to disagree with
> >them. Those 'few annoying limitations' they describe, I found them 'very
> >deep architectural mistakes'.
> >
> >They cite XSLT support, but that's nothing compared to the fact that
> >there is no way for you to create a Zope site without the user 'knowing
> >it'. No matter how hard you try, it shows. It's 'zopy', they all look
> >the same, much like 'this is a manila-site'
> >
> >Some don't think this 'cloning restriction' a severe limitation, I think
> >this is not a annoyance, but the *first* rule.
> >
> I agree that this is a very important consideration.  However, I cannot
> agree with your observation.  Zope powers many
> more sites than those of which you may be aware.   Unfortunately, I
> don't know too many of them personally, but here are a few:
> 
> http://www.activestate.com
> http://www.homegain.com
> http://www.arielpartners.com    (I couldn't resist :-)

Granted: I was wrong. I'm happy that I've opened my eyes on this.

> According to news at the latest Python conference
> (http://www.python10.org), Zope is now powering the websites for one
> of the major US television networks (ABC? for the life of me, I can't
> remember which).   Hopefully one of the Zopistas out there
> can help me out...

No need for this, you have changed my mind and now I'll be paying *much*
more attention to Zope (and I'm sure many on this list will, as well!) 
 
> >But this hits a very serious point: comparing Zope and Cocoon is like
> >comparing apples with oranges, technologically.
> >
> >Boths are fruits, as both publish web content, but Zope is a 'publishing
> >environment' while Cocoon is a 'publishing framework'.
> >
> >An 'environment' is an application that you customize, a 'framework' is
> >the foundation of your own application.
> >
> I might define those words differently, but be that as it may.  

Please, forget what I said above. It was based on an early checkout of
Zope where I was probably mislead to think it was more a CMS than a
publishing framework.

> Here is
> some information about the Zope architecture:
> 
> - both Zope and Cocoon2 come with an example/tutorial that can be
> customized.  Just because Zope's tutorial
>   is more fully fledged does not mean that it cannot be as radically
> changed.

Ok.
 
> - Zope consists of an integrated object-oriented database (ZODB) and a
> webserver (ZServer, based on Medusa).
>    It is possible to use ZODB with Apache in lieu of ZServer.

ok
 
> - Zope provides a 100% object-oriented abstraction for web publishing.
>  URLs are turned into method calls on objects.  The
>    objects are stored in ZODB.  Of course, you can create your own
> classes that obtain their content from the file system,
>    rather than the ZODB (almost like a symbolic link or alias).

ok, interesting concept. Worth analysing in deeper detail.
 
> - Any kind of python object can be stored in ZODB.  You can define your
> own objects, or use one of their predefined
> classes.  Therefore, you immediately have access to all the python
> libraries, such as the XML libraries.

The need of object persistency has always been great in almost all OOP
languages... the JCP turned down the proposal to add orthogonal
persistency to Java right from the language, they thought that
serialization was good enough.

At the same time, I've always been scared away by OODBMS: the concept is
nice and clear, but I've came up with the conclusion that OODBMS for
data are somewhat useless... sure, they handle semi-structured data
better than the relational model, but providing extensibility and
polymorphism at the data level is, IMO, way too close to 'flexibility
syndrome'

But what you are painting is more a persistent layer to the underlying
logic, than a OODB for Zope data... or am I wrong? In that case, I agree
this is not a bad idea: one of the very useful Avalon blocks we designed
was an 'Object Store'
 
> - Because of acquisition, you can add behavior to objects without
> changing their class definitions.

Can you please elaborate more on this?

> - Because (much of) Zope content is contained in the ZODB, it is
> convenient to use ZServer because it provides access
> to objects contained in ZODB via FTP/webDAV.  This makes it possible,
> for example, to edit the contents of any Zope object
> (provided you have sufficient permissions) using Emacs-FTP (see
> http://www.cs.indiana.edu/elisp/ange/ange-ftp_toc.html)
> as if it were a local file.

Yes, we have proposed a WebDAV view to the Xindice guys that will give
similar operativity.
 
> - The latest version of Zope (2.5.1beta1) is now using the "standalone"
> version of ZODB.  Both ZServer and ZODB are
> now modular pieces that can be used separately or together, as desired.
>  Doubtless, many people will continue to use them in
> their integrated form.
> 
> >This is why I liked Zope as an environment, but didn't like Zope as a
> >framework: as an environment, all sites look similar, as a framework,
> >all sites might be totally different.
> >
> >Just ask you this simple question: could you power cnn.com with zope
> >without noticing any difference? could you with Cocoon?
> >
> 100% yes for both.

Cool, than it's great to compare them (and learn from each-other
mistakes)

> >If you take a look at the table of feature comparison, you'll see that
> >Cocoon 'can' provide the functionality that Zope already has, but has a
> >module, an extension, or, as they say 'with lots of work'.
> >
> >This is a good thing!
> >
> >I believe that Zope is mis-placed architecturally, it's an hybrid
> >between a CMS and a publishing framework. And does some of everything,
> >but both poorly, compared to specialized solutions.
> >
> Actually, there is a CMS available for Zope: the Zope Content Management
> Framework (see http://cmf.zope.org).
> It is a layer on top of Zope that provides additional functionality such
> as workflow, syndication, "portlets", and reskinning.
> Apache Jetspeed provides some similar functionality to Zope CMF (though
> not all).

ok
 
> We chose not to use the Zope CMF because of its architecture: it is not
> based on
> standard XML technologies and, in our opinion, brings us too far into
> the "proprietary language land."

Ok

> That was an important consideration for us.  In fact, I can tell you for
> certain that, if Zope were to disappear
> tomorrow (god forbid!), we could rehost our entire
> website in Cocoon2 without too much trouble because >90% of it uses
> XML/XSLT technologies.    Having said that,
> we are quite happy to have all of Zope's functionality available to us.

Ok, understood.

> >This is why I'd love to see Cocoon web applications modular: so that
> >people will start adding 'out-of-the-box functional modules' that zope
> >currently ships and people expect.
> >
> >Forrest was born to provide such a module for information publishing of
> >OSS communities.
> >
> >But you could have a 'webmail module', a wiki module, a weblog module, a
> >calendar module and so on.
> >
> >But let's look at the features that Zope provides out of the box and
> >Cocoon doesn't:
> >
> >1) Integrated Object-oriented database with support for full graphical
> >editing of all objects
> >
> >Do you really want this? I don't.
> >
> Perhaps I did not explain it well enough.    Many of the threads on
> cocoon-dev lately have been about sitemaps and flowmaps.
> They quickly become complex.  We want a simple but powerful language to
> express content objects and flows.   We might
> have intermediate pieces of content created by flows that then get
> processed differently by different sub-pipelines (like the UNIX "tee").
> 
> Zope provides a unique solution to this problem.  Imagine a folder-like
> tree representation of your site.  It consists of Manager (Folder) objects
> and ManagerItem objects.  Managers are containers for ManagerItems.
>  Managers are represented as folders with a familiar
> MS Windows explorer-style graphical presentation.  How would you express
> pipelines?
> That is where acquisition comes in.    One way to explain it is that it
> features a more recursive style, while
> Cocoon is more iterative.  For example, imagine your ZODB contains the
> following:
> 
> /content/index_html
> /content/topics/body
> /content/topics/swimming/intro
> /content/topics/sailing/intro
> 
> In the example above, index_html is a template for a web page.  It
> includes a "hole," or variable called body.
> If you call http://content/index_html directly, it will complain of an
> unresolved variable, namely "body."
> 
> Similarly, /content/topics/body has an "intro" variable.
> 
> Therefore, if you call the "index_html" method on the object whose URL
> (read UUID) is /content/topics/swimming, it will
> "acquire" the index_html method from /content/index_html.  This is
> called acquisition by containment.   The index_html
> method then acquires "body" from /content/topics/body, and finally the
> swimming intro.
> 
> Recall that in Python, functions are actually first-class objects-- so
> for example you can think of /content/index_html
> as a "method" object that is contained within the /content/ folder
> object.   For Java programmers, think of the GOF Strategy pattern
> on steriods :-)
> 
> >2) acquisition: Zope features dynamic run-time inheritance which enables
> >"context-oriented" programming. This means that objects change their
> >behavior based on their current context. These changes include not only
> >different implementations of methods, but also whole new sets of
> >methods. This provides many of the benefits of dynamic reclassification,
> >but with arguably more flexibility. Cocoon does not offer such a
> >feature.
> >
> >I can't really tell you what this is, so they might have a point.
> >
> (see above)
> 
> >3) Integrated FTP, WebDav, and HTTP access to all content
> >
> >There is no way of making this possible out-of-the-box in cocoon, it's
> >too application specific. This is a choice. It's possible to provide
> >webdav support on top of cocoon today! I think I have to provide a
> >sample to show people how.
> >
> This gets back to the "Environment vs Framework" debate.  Is an
> operating system an environment?   Just because
> bourne shell is provided, does that mean I have to use it?   Not if I
> have bash handy!   On the other hand, on win2K, you might
> be stuck with the built-in windows commandline...
> 
> Zope is more like UNIX in this regard.  There are many tools provided,
> but you only use what you want to use.
> Of course, integrated FTP and webDAV access is very handy.   Can you
> edit the underlying XML content of your Cocoon-powered
> site from an airport kiosk?    With Zope you can, because every object
> can be edited directly using the web browser.
> Again-- this is not the normal way of doing business-- hey, we _live_ in
> Emacs.   But the capability is very
> handy for those quick fixes and is a major selling point for our
> customers.   An editor certainly makes life easier, but
> it is not required.   This is in keeping with Python's "batteries
> included" philosophy :-)

understood
 
> >4) Seamless support for adding arbitrary metadata to all objects in the
> >database.
> >
> >XIndice will provide this. Cocoon should not have built-in databases, it
> >mixes concerns.
> >
> Agreed.  However, if you had a set of integration classes, tutorials,
> and documentation handy, and provided a separate
> download that combined the two products with no extra hassle required,
> how many people do you think would download it?

Careful: now it's *you* that is missing concerns. One thing is
'packaging', another think is architecture design. Sure, as a user, you
don't ultimately care how much effort it went into architecture design,
as long as the package you deployed and installed is cool for you.

You have stated that ZODB can use used separately now, so
'architecturally' the Zope people seem to agree with me that separating
concerns is a good thing.

And is also a good thing to make life easy for users, so it's good to
package things together.

I think I don't have to remind you that Cocoon itself is 18Mbs of
download and we provide out-of-the-box features like PDF generation, SVG
rasterization, XSLT transformations, SOAP services, and we also ship
with a SQL 92 capable RDBMS! 

But none of these services are *core* for Cocoon!

We haven't packaged XIndice with Cocoon yet, because current version of
XIndice is CORBA based and adds another 2/3 Mbs that might not be
worth-it for now.

At the same time: we are workign closely with the XIndice community to
make sure that future versions of XIndice are Soap/XML-RPC based
(instead of CORBA, which also has several encoding interoperability
problems with most ORBs), thus much lighter and we'll probably ship that
integrated.
 
> >5) Integration with role-based authentication/authorization security,
> >all manageable from the web
> >
> >Recent code donations have removed this, even if there is lots of
> >cleanup work to do.
> >
> >Then the Cocoon strong points:
> >
> >1) Integration with Source Code Control System
> >
> >Zope is not file based, it's entirely database based. So CVS doesn't
> >work on it.
> >
> We have made our first baby steps toward solving this problem:
>  http://www.zope.org/Members/arielpartners/CVSFile
> 
> >They say this is a non-issue with file-based cocoon, but they are wrong:
> >revisioning is an issue with an eventual CMS on top of cocoon... but
> >this shows just a more balanced architecture.
> >
> This is the never-ending debate between Version Control Systems and
> Databases.  Which do you want?  Of course,
> the answer is both.   It is probably only a matter of time before
> someone introduces a way to integrate CVS and Xindice,
> for example.   (obviously, you could batch-export the whole bloody thing
> from Xindice and version it, but more
> granular versioning would be nice)

If you search the xindice-dev@ list you'll find some proposals of mine
for XIndice NG (whatever version that comes up to be) were versioning
should be included directly inside the database, possibly using some
advanced revisioning architecture such as Subversion's (CVS really sucks
architecturally)
 
> >2) Integration with J2EE and other Java-based business logic
> >
> >Cocoon is a servlet, thus we get it for free. They find themselves
> >completely detached from the rest of the world, even if they could
> >easily use web-services to glue things. This is a clear marketing plus
> >for us.
> >
> You are absolutely correct in this regard IMHO.   In fact, this might be
> the biggest long term problem for Zope.
> 
> - Zope is mostly written in Python, but some is (still) in C.   This is
> a pain, because it makes it impossible to run
> Zope under Jython.
> 
> - Python VMs are _way_ slower than Java VMs.   Python just does not have
> the equivalent to the hordes of senior
> scientists working away at Sun's java labs on the "hotspot" technology.
>   Obviously, both VMs will continue to improve, and
> VM performance is secondary to good architecture and design, but ...
> 
> - If Zope could be made to run under Jython (http://www.jython.org),
> integration with J2EE would be virtually
> a no-brainer, b/c you are already inside a Java VM.
> 
> >3) Support for XML and XSLT Processing pipelines  Not provided. Must
> >roll your own. This is a lot of work.  Cocoon does it out of the box
> >
> >What else can I say :)
> >
> >No seriously: Zope is a more mature effort, but i strongly doubt that it
> >can stand the evolution rates that this community exhibits.
> >
> I cannot agree with you here.  Zope Corporation is the primary driving
> force behind Zope, so there are actually
> people out there who get paid to enhance Zope every day :-)  I think
> their release schedule speaks for itself:
> 
> 2.5.1beta1  2/22/2002
> 2.4.4beta1  1/28/2002
> 2.5.0          1/25/2002
> 2.5.0beta4  1/15/2002
> 2.5.0beta3  12/23/2001
> 2.5.0beta2  12/05/2001
> 2.5.0beta1   11/28/2001
> 2.4.3          11/12/2001
> 2.4.3beta1  11/05/2001
> 
> That is just since November.   In general, they have put out point
> releases every month and minor releases every six months.
> Zope 3.0 is currently under development.

Ok, cool, time will tell, then :)

> >Moreover, there is no indication of internal modularity and
> >extensibility, SoC-based design, IoC design, data storage abstraction...
> >and no indication on caching strategies, scalability and performance
> >issues.
> >
> Actually, there is a RAM Cache Manager object built in to Zope.   This
> object, like all other Zope objects, can
> be extended in Python (for example to change the caching strategy or
> whatnot).
> 
> Zope Enterprise Objects (http://www.zope.org/Products/ZEO) is an
> optional add-on product that turns
> Zope into a distributed architecture, allowing multiple processors,
> machines, and networks to act as one website.
> 
> Zope _is_ too difficult to develop for, and it is not very easy to
> create objects that can be used both inside
> and outside the Zope environment (i.e. the Zopish aspects are not
> modular enough).    That is what the Zope 3.0
> effort is all about.   The Zope community has learned from the Java/J2EE
> architecture: they are refactoring
> the internals of Zope so that add-ons as well as Zope itself will be
> component-based.
> 
> (see:
> http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/FrontPage )

Uh, cool, sounds like the new Zope3 will be much more similar to Cocoon2
architecturally, at least it will be component-based and
interface-driven.

But given that Python doesn't have interfaces, how do you plan to have
polymorphism? thru reflection?

> However, having said that, Zope _is_ amazingly extensible.   Consider
> these statistics:
> 
> When we first became interested in Zope (Sept/Oct 2001), there were
> about 300 add-on products available
> for Zope at the zope.org site.
> 
> Today, there are over 500 add-ons available.
> 
> This tells me two things:   Zope has an extremely active community, Zope
> is extensible

Yes, these are admittedly great numbers.
 
> >My impression is that they use Zope because it gives them the
> >functionality they need.
> >
> >Cocoon is different: it will give you the 'substrate' you need to make
> >your functionalities grow... and give you a way to modularize these
> >functionalities to share add compose with others.
> >
> >I think we have very little to learn from Zope that we didn't know
> >already.
> >
> After reading my reply, do you still feel that way?

No, I will look more seriously into the technical details, although I
would probably be more interested from Zope3 than from Zope2. I'll post
my impressions after getting my hands dirty with more Python (which I
like, but since I couldn't write Avalon in Python, it would not be
interested in learning more of it... also, there is no very little WORA
concept in Python, which scares me to death!)

Anyway, I'll see how Zope solves the design and architectural issues we
are currently designing (expecially how it deals with flows and resource
mapping).

> >
> >
> >But my point is: comparing Cocoon and Zope is an serious architectural
> >mistake.
> >
> I agree they were created to solve different problems.    However, there
> are many reasons why developers may
> want to compare the two technologies:
> 
> - both are leading open-source platforms for building websites

it's cool that people start to think this way.

> - other major open source alternatives may no longer be as attractive
> (recent demise of arsdigita, enhydra's problems, ...)

yes

> - XSLT is becoming more mainstream (why Zopers might want to consider
> Cocoon)

:)

> - Inclusion of Lucene + Xindice with Cocoon narrows the gap

And I'm sure you'll see the gap narrowing a lot in the future... and
hopefully provide serious alternatives.

> In general, based on my assessment of the architectural directions of
> both projects, they are likely to
> provide more and more similar functionality as time goes on.

Oh, I'm sure about that.

> When it comes right down to it, I believe the slash-dotters were correct
> when they said that the main
> issue may be choice of programming language.   If you have a development
> shop full of Java programmers,
> are you really going to expect them to learn Python and Zope?
> (Of course, that is precisely what ArielPartners did :-)

If this was so, it would be sad.

I would love to see people switching to Cocoon because they found it
better to work with and more intellectually rewarding than other
solutions.

Using the marketing power of Java and XML to bring more people to the
Cocoon front is not what I want: I want people to understand the design
choices behind cocoon and use them only if they appreciate them, not
because their boss forced them to use it.

But anyway, thanks for the good talk.

-- 
Stefano Mazzocchi      One must still have chaos in oneself to be
                          able to give birth to a dancing star.
<stefano@apache.org>                             Friedrich Nietzsche
--------------------------------------------------------------------



---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org