[Zope-dev] the Zope Framework project

Martijn Faassen faassen at startifact.com
Wed Mar 4 11:25:24 EST 2009


Hey there,

Chris McDonough wrote:

> 1)  I'm not in favor of a single steering group for the *entirety* of all Zope
> software.   We've tried a similar thing in the past (via the foundation
> structure); it didn't work and I'm not sure how we'd expect things to turn out
> any differently this time.  Instead, perhaps the focus of groups should be on
> some much smaller subset of Zope-related software (e.g. the
> zope.interface+zope.component group, the zope.schema group, the ZODB group,
> etc).  Could we consider this?

I don't recall we actually did anything within the Foundation structure. 
The structure was there in the bylaws but was never applied, so I don't 
think that can be qualified as a failure. :)

The steering group isn't intended to take a responsibility for the 
entirety of the Zope software. Zope 2, Grok and the Zope 3 app server 
(which would be a distinct entity) would manage themselves and the Zope 
Framework steering group would not have a say over the libraries and 
configuration they add.

I do think the steering group should start worrying about a larger 
amount of the libraries rather than a small set. Part of the reason is 
exactly so we *can* identify subsets and properly delegate their 
management. Delegating their management will require some kind of 
agreement on groups coordinating however. We need to have an overview of 
the whole in order to know how to evolve the parts in many cases. For 
instance, if we move some class due to a dependency cleanup, we need to 
have an effort to update the libraries in the whole to use the new 
imports relations.

I do also think that we should go to a smaller set of libraries. We 
currently share a huge amount of code that only one consumer actually 
uses. For instance, I think all of the zope.app.* packages which contain 
ZMI code can eventually be left to the management of the Zope 3 
developers, meaning they'd not be part of the Zope Framework anymore.

The ZODB is a good example where I'm not sure whether the ZODB should be 
considered part of the Zope Framework at all. I think we should see this 
as an external library that the framework builds on.

The idea that there is a bunch of people who take the responsibility for 
managing the whole doesn't mean they should be obstructing moves to 
improve the parts. Similarly I assume you're taking some form of 
responsibility for "Repoze" and that this is helpful the evolution of 
the parts of it.

My hope is that we'll see more of a catalyst function than anything 
else. I think the answer to proposed changes in the lower layers (which 
is always risky) should be to point out potential risks and say: we can 
make this change, but we also need to make sure we do X. The answer 
should typically not be "no". If it is a "no", we should actively try to 
identify the use cases driving the proposed change and look for 
alternative solutions.

> 2) I'm also not in favor of a giant lockstep set of software versions shared
> between notional releases Zope 3.5, Grok, and Zope 2.12.  I can only see this as
> continuing our mistakes of old by trying to treat some collection of software as
> "Zope" as opposed to letting parts of it survive or die on their own based on
> merit; it'd be more effective to just let each framework use (or disuse!)
> whatever versions of stuff that work best for it.  That's why the software is
> broken out into individual components in the first place; we should encourage
> diversity in component usage.  Instead of trying to legislate and bless some set
> of components as a "version", we should just work to make each piece better and
> worthwhile to use independently; it's value would be in its actual usefulness
> rather than some belief that it works well with the other components in the
> "version".  

I don't understand why you think a list of versions that has release 
numbers that we know works together is a blocker for independent 
evolution for the individual libraries.

I think there are two parallel efforts:

* evolving libraries standalone. We should improve those libraries so we 
can think about them standalone. If a library contains ZMI code, it's 
harder to think about it standalone for instance.

* making sure that there is a list of library versions that people can 
install that isn't broken. That is, run the tests for these libraries in 
isolation and together. If a decision was made to change one library, 
make sure that all the other libraries in the list are updated so they 
actually still work.

I see both efforts as necessary. If you just care about a smaller list 
of libraries, you don't have to worry about a larger list of course, 
though you will have to coordinate with some people who do. You probably 
can do quite well constructing your own list as it's a much smaller one. 
That's fine, and nothing should stop you. But the reality is that many 
people in this group *do* care about a larger list of libraries.

> Could we at least agree that lockstep versioning of a huge set of
> Zope eggs to be shared across many frameworks is not optimal for the long term
> and that it would be better if each framework could pick and choose whatever
> components and versions it actually needed?  Could we also agree that this would
> tend to result in better dependency partitioning ("X depends on Y, I don't need
> Y, I just need X, let's fix that")?

I think the individual frameworks should have the last say on which 
versions they're going to use. That's in the document I wrote:

"""
As a service to the users of the Zope Framework, the Zope developers
also make available lists of version numbers of core libraries that
have been tested to work together as a "Known Good Set". This receives
a version number and is the Zope Framework release.  Users of the Zope
framework can use this list, but may also diverge from it where they
see fit. Other projects (such as the Zope 3 application server and the
Grok project) also have a Known Good Sets that expand on the Zope
framework list (and may diverge from it). Each of these consumer
projects can of course have their own release process, schedule and
version numbering.
"""

It's a service that people do not have to partake in. The Zope Framework 
Steering Group has been explicitly defined as having *no* say over the 
projects directly.

At the same time, I can't agree with the extreme position. I'd prefer 
the frameworks to use mostly the same set of versions, otherwise 
exchanging libraries between them becomes much harder. I don't see the 
point in making 3 groups do the same work while we could come together 
and do it in 1 place. That's what we have this community for, and we 
shouldn't *deny* this community.

I'm very much against us just providing a huge toolbox of random 
libraries and offer no guidance whatsoever about which ones work 
together, or which ones are deprecated, etc. And it's really not true 
you can just pick an arbitrary list of libraries and have them work. 
It's quite a relief to the Grok project we don't need to puzzle out 
which libraries work together ourselves all the time - creating a more 
or less sensible initial list in 2007 cost us quite a bit of time and 
we'd like to share the effort with the wider community.

I also don't believe it's workable to just focus on a single component 
while ignoring all the others that build on it. If you make an 
improvement in one that breaks an API (to clean it up, explicitly 
breaking backwards compatibility), someone will have to update all the 
libraries that use the API. There will at least need to be coordination 
and communication. Someone needs to take responsibility for making sure 
that happens. Sometimes also operations need to take place on a whole 
bunch of libraries at the same time in order to make progress on all of 
them. This is not theory, it's what we needed to do for the dependency 
refactoring project we had a month ago. That's a project with the goal 
to create *more* stand alone libraries.

So while I don't want to get in the way of your use cases, you seem to 
imply there there need be no coordination and cooperation on issues that 
cross the barrier of a single library or a small set of libraries. I 
think we should look at libraries on their own merit, but at the same 
time see them as part of *some* responsible community that takes care of 
them.

I do see that community as useful on the long term.

What I'm trying to do is draw the line around an area outside of which 
we stop caring, at least where the Zope Framework Steering Group stops 
caring. It's a smaller area than the vague line we have now (Zope 3 the 
app server/framework/what is it?). If people want to make sure other 
libraries outside that line aren't broken, they should read the upgrade 
notes and change their code. I want this area to include fewer rather 
than more libraries, but in order to get there we have to care about a 
lot of them to start with.

It may very well be true that in some time we'll develop clusters of 
libraries that can be more or less managed on their own. The ZMI is such 
a cluster that I hope will eventually emerge (and that the Zope 
Framework Steering Group doesn't care about directly). That'd reduce the 
coordination overhead. But sometimes we do need to take coordinated 
action, and I don't see that need disappearing entirely.

Regards,

Martijn



More information about the Zope-Dev mailing list