Return-Path: Delivered-To: apmail-xml-cocoon-dev-archive@xml.apache.org Received: (qmail 87788 invoked by uid 500); 25 Feb 2002 06:01:05 -0000 Mailing-List: contact cocoon-dev-help@xml.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Reply-To: cocoon-dev@xml.apache.org Delivered-To: mailing list cocoon-dev@xml.apache.org Received: (qmail 87777 invoked from network); 25 Feb 2002 06:01:05 -0000 Message-ID: <3C79D2A1.6090409@arielpartners.com> Date: Mon, 25 Feb 2002 00:58:57 -0500 From: "Craeg K. Strong" Organization: Ariel Partners LLC User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.8) Gecko/20020205 X-Accept-Language: en-us MIME-Version: 1.0 To: cocoon-dev@xml.apache.org CC: zope-dev@zope.org Subject: Re: Zope vs. Cocoon References: <3C78C109.504DC3B5@apache.org> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N 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: Stefano Mazzocchi wrote: >First, kudos to Gianugo for finding the ask-slashdot thread about 'zope >vs. cocoon', one user suggested to take a look at > > >http://www.arielpartners.com/arielpartners/content/public/topics/technology/technologyReviews/zopeVsCocoon > >which I think is a good review of the current status of the two >projects. > >Yes, I've installed and used Zope in the past, even if I never created >something that worked with it. > >Here I will try to address the points of the article. > > - o - > >>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 ? >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. >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 :-) 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... >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. 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. - 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. - 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). - 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. - Because of acquisition, you can add behavior to objects without changing their class definitions. - 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. - 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. > >This tells you all. > > - o - > >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). 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." 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. >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 :-) >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? >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) >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. >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 ) 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 >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? > > >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 - other major open source alternatives may no longer be as attractive (recent demise of arsdigita, enhydra's problems, ...) - XSLT is becoming more mainstream (why Zopers might want to consider Cocoon) - Inclusion of Lucene + Xindice with Cocoon narrows the gap 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. 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 :-) Curious to hear your response, --Craeg -- Craeg K Strong, General Partner Ariel Partners LLC http://www.arielpartners.com voice 781-647-2425 fax 781-647-9690 --------------------------------------------------------------------- To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org For additional commands, email: cocoon-dev-help@xml.apache.org