[Zope-dev] "ZTK" futures: one big package?
robert rottermann
robert at redcor.ch
Tue May 12 04:16:44 EDT 2009
chris
you have *exactly* mirrored my feelings as a longtime zope2 user/application
developer getting in touch with plone3/five.
now after a year digging in it I still am not free of it
thanks a lot
robert
Chris McDonough schrieb:
> I realize now that I've neglected to give sufficient reasoning for why less
> granular packaging would be a good thing.
>
> I've noticed that there's a common theme in Zope development, software, and
> packages that I can only describe as "power law development" or "turtles all the
> way down". It's a bit of an antipattern, unfortunately.
>
> I'll provide an example by way of Zope-3-the-appserver. In an application that
> uses Zope-3-the-appserver, many individual subframeworks will be used. For
> example, there is a traversal subframework, a security subframework, a
> cataloging subframework, and so on.
>
> Each of these subframeworks acts as a logical unit, and through the magic of the
> component architecture, each can be replaced wholesale by registering some
> adapter. However, each of these subframeworks tend to also have settings that
> can be configured. For example, individual traversal steps for certain types of
> objects can be overridden by registering an adapter that *configures* the
> subframework. In the case of Zope 3, we have a traversal situation where the
> larger traversal subframework can either be replaced wholesale via an adapter
> registration or extended piecemeal via other adapter registrations.
>
> The problem is that the mechanism to *replace* the subframework is the same as
> the mechanism to *configure* it (both are done via adapter registration,
> sometimes even in the same file). This is theoretically fine. But in reality,
> it's tremendously hard for someone just walking up to a complex system like Zope
> 3 to discern adapter registrations that replace subsystems from those which
> merely configure subsystems. An inability to discern the difference leads to
> situations where people just "don't get the joke" and try to wiggle wires to
> configure-to-death a existing subsystem that's clearly suboptimal for their use
> case instead of just replacing it wholesale with a much simpler custom policy.
> They just don't know it was engineered to be replaced. So they keep adding more
> configuration code to the existing subframework to handle various 1% edge cases.
> Often this code makes the subframework tremendously complex, and the
> subframework grows inappropriate dependencies along the way. *Sometimes* the
> situation gets so confusing for a new user, they just quit and go use something
> else.
>
> This is a pattern that happens over and over again in Zope development. In my
> personal opinion, the original error was trying to make the subframework
> configurable at all. Instead, the subframework should be replaceable easily,
> but it should itself be relatively rigid. At very least, for subframeworks that
> really do require extra configuration (should be very few), this configuration
> should be done via highly specialized ZCML directives (or grokkers), as opposed
> to some very general adapter registration that can't be easily discerned from
> other adapter registrations by a newbie.
>
> If the subframeworks were more rigid (but replaceable), the *intent* of the
> subframework author could be more easily discerned, and fewer people would fall
> into the trap of adding more configuration code to a subframework instead of
> just replacing it entirely. And fewer people would just walk away in frustration.
>
> What does this have to do with packaging? Well, currently, there's a dizzying
> number of packages that make up "the ZTK" (nee "Zope 3"). Each of these
> packages is a pure peer of all others in a PyPI listing with no real way to get
> a sense of their relative importance other than performing a linear audit. Even
> if a user *does* do a linear search of all of them, it's still awful hard to
> discern for some new user which ones are "important", and which ones just happen
> to exist by some inequity of history without trying to install it. The user
> needs to gain some holistic knowledge of the system in order to discern the
> important bits from these historical inequities.
>
> Most new users understandably just walk away from *all* Zope packages before
> they gain this knowledge; it's just too hard for them to tell the difference
> between the truly important and reusable bits and the stuff that just happens to
> be packaged up and released but which is useless outside of some highly specific
> context. In effect, we just don't communicate *intent* very effectively in our
> current packaging structure.
>
> In my opinion, this is why a lot of Python developers who are otherwise very
> smart have given up on trying to use Zope packages. The time required to figure
> out which ones are useful and which ones aren't is just too high. It's way
> "easier" for them to write them all off wholesale and just write what they need
> from scratch or use somebody else's software. Good developers tend to like
> small, useful libraries and frameworks.
>
> We can ameliorate the situation in a few ways:
>
> - We can reduce the number of distributions.
>
> - We can make each current Zope package distribution independently useful.
>
> My suggestion is that we do the former first in order to communicate *current
> intent* (the "state of reality right now"). We can do the latter after this in
> pieces, hopefully aided by some new developers we've picked up by making it
> easier to find useful stuff.
>
> Once we deflate our current set of packages down to a reasonable number, the
> packages listed in PyPI will immediately start to reflect "the state of reality
> right now". As a result, we'll hopefully be able to get some new blood in the
> form of new developers that use the smaller bits outside Zope to help us tease
> the truly independent pieces out of the larger pile. If we do this, at no time
> after the deflation will PyPI listings ever as badly advertise "the state of
> reality" as it is advertised right now, and the community will hopefully again
> start to grow.
>
> - C
>
>
> On 5/11/09 11:11 AM, Martijn Faassen wrote:
>> Hey,
>>
>> Chris McDonough wrote:
>>
>> > Instead, I have argued for promoting packages that have some life of
>> > their own (independent of the rest of the pile) into subprojects that
>> > have their own release cycles.
>>
>> > Then outside projects such as Plone and Grok could depend on
>> > independent versions of such packages, giving them slightly more
>> > flexibility than requiring a "version of the ZTK".
>>
>> We already have that flexibility today. To me, the utility of a release
>> of version numbers in the ZTK does not at all exclude the potential to
>> evolve the packages to more independent sub-projects.
>>
>>> Given that this suggestion has been met with skepticism, let me try another
>>> tact.
>> I think that's an inaccurate description of the response you got. I'm
>> quite positive about trying to give as many packages as possible a life
>> of their own. I don't think you got anyone else arguing against this
>> point of view.
>>
>> I'm also quite positive that some packages are:
>>
>> * useful as independently distributed packages
>>
>> * only make sense in a Zope 3 or a Grok or a Zope 2 context, i.e. they
>> depend on a significant set of Zope packages.
>>
>> I'd like to get out of this paradigm:
>>
>> * the Zope packages are independent sub-projects.
>>
>> * therefore we cannot distribute a list of versions that work best together.
>>
>> And this one:
>>
>> * if we distribute a KGS of anything
>>
>> * packages in that anything aren't independently reusable automatically
>> and should be merged into a ball.
>>
>> I'd also like to get out of the following paradigm:
>>
>> * the Zope packages are not independently reusable yet
>>
>> * therefore we should distribute them all together
>>
>> We're in a grey area. Some package are here, some packages are there,
>> some are in between. Some packages build on other packages, but have
>> clear dependency structures. Some don't have clear dependency
>> structures. Some have better documentation and better focus than others.
>>
>> If there is to be a merging of code together, then I propose we continue
>> the project where the ZMI code is merged into one or a few packages. We
>> can also investigate merging 2 or 3 packages together where it seems to
>> make sense, or simply moving code between packages (some code needs to
>> go down the dependency list, some up).
>>
>>> Instead of thinking about it this way, could we think about it as
>>> *deflating* the current set of zope.* packages that do not currently have a
>>> meaningful life of their own into a single setuptools distribution named "ZTK".
>>> This package would include most everything in zope.app*, plus things like
>>> zope.server, zope.publisher, and other things that just aren't useful outside of
>>> Zope-the-appserver, or which currently just depend on "too much".
>> -1
>>
>> This would make it a lot harder to:
>>
>> * clean up dependency relationships with the goal of creating more
>> reusable code. We'd all hide them in a sumo ball again.
>>
>> * get rid of bits we *don't want anymore*. If I need anything in a sumo
>> package I'd need *all* of it.
>>
>> * override individual packages with newer versions
>>
>> * we've done a lot of refactoring recently trying to separate the UI
>> from packages. This is done by creating a *new* package, leaving the old
>> package behind. We can do this, test this and release this
>> package-by-package now.
>>
>>> Over time, we'd tease out the dependencies of packages that live in the ZTK
>>> distribution, making them useful outside without any dependency on the ZTK. The
>>> names of these packages could be arbitrary (they wouldn't need to retain their
>>> old "zope.*" names). Some backwards dependency shims would be added to the ZTK
>>> to prevent old imports from breaking, and the ZTK distribution would then just
>>> have a dependency on the thing that got broken out.
>> I don't like the attempt to redefine what the ZTK means to a giant ball
>> of Python packages. That's implying that, say, zope.component is *not*
>> in the ZTK. That's wrong.
>>
>> Why generate a whole lot of work for ourselves getting from where we are
>> now to here? We've learned how to work with the current situation in
>> 2007 already.
>>
>>> I'm thinking that this would simplify things greatly for people who want to be
>>> consumers of "truly independent" Zope packages. There'd be exactly N of them
>>> available for download (where N is much less than 100, more like 20), plus the
>>> ZTK, which would have the rest of the pile in it over time.
>> I don't see why a big package would "simplify things greatly" for you or
>> anyone else.
>>
>>> If someone wanted
>>> to use a forked version of a package that lived in the ZTK distribution, they'd
>>> either do so by teasing out the dependencies and making it "truly independent"
>>> or they'd just reroll a custom version of the entire ZTK distribution.
>> And that's easier than the current situation how? Are you really
>> proposing we destroy the dependency information we've already teased out
>> and then make people do the work again?
>>
>>> Does this make any sense?
>> Not a lot in my book.
>>
>> I think an important reason why there's so much awareness of dependency
>> issues in the Zope world now (and effort spent on it) is precisely
>> because we released our separate packages and can see the dependency
>> information clearly.
>>
>> Regards,
>>
>> Martijn
>>
>> _______________________________________________
>> Zope-Dev maillist - Zope-Dev at zope.org
>> http://mail.zope.org/mailman/listinfo/zope-dev
>> ** No cross posts or HTML encoding! **
>> (Related lists -
>> http://mail.zope.org/mailman/listinfo/zope-announce
>> http://mail.zope.org/mailman/listinfo/zope )
>>
>
> _______________________________________________
> Zope-Dev maillist - Zope-Dev at zope.org
> http://mail.zope.org/mailman/listinfo/zope-dev
> ** No cross posts or HTML encoding! **
> (Related lists -
> http://mail.zope.org/mailman/listinfo/zope-announce
> http://mail.zope.org/mailman/listinfo/zope )
>
>
More information about the Zope-Dev
mailing list