About the concept of "core add-on" and what to use when bootstrapping a project: Plone vs. Products.CMFPlone

Hi:

I don’t fully get the idea behind having core add-ons, and I wanted to ask it here.

First, do we have it documented somewhere? I couldn’t find it, sorry. And specially, which is the concept behind it and which is the reasoning of a given package being a core add-on

Until now, we are/were using zc.buildout to bootstrap our projects, and we were using a custom template (like this) that initially evolved from the best practices of that time. After checking it, I see that we are adding Plone egg as the main dependency to install Plone.

Now that we are using cookieplone to bootstrap the projects, I see that it uses Products.CMFPlone as a dependency

This makes me ask, “why this difference?” “Shouldn’t be we using also Plone as its dependency?”

Somehow linked to this, some months ago I tried to update the testing files for plone.formwiget.recaptcha together with some code changes, and I applied plone.meta to it.

When reviewing the changes, one reviewer told me not to add plone.app.upgrade as a dependency as plone.meta's dependency checker was suggesting, since this is something I and others usually do not want to have in my production instances (just in service instances).

I don’t want to judge this words, but I see that plone.app.upgrade is a core add-on, and now I see that the suggestion has some background.

I am sure that there must be some more background than not wanting to install some packages behind the core add-on concept, but I think that exposes yet more complexity to our already complex architecture.

I would appreciate any comment on the background and idea of this.

Thank you

My understanding of what defines a core add-on was documented in Architecture: packages and dependencies — Plone Documentation v6. Does that help?

Thank you, Steve, I missed that piece of docs.

Then the question is: when bootstrapping a project, the “common mortal” should depend on Plone or Products.CMFPlone?

The package Plone is a "metapackage" that simply specifies some requirements:

This is what you get installed via e.g. pip install Plone:

If you e.g. pip install Products.CMFPlone you will need to explicitly install other addons if needed.

plone.api
plone.app.caching
plone.app.discussion
plone.app.iterate
plone.app.multilingual
plone.app.upgrade
plone.classicui
plone.distribution
plone.exportimport
plone.restapi
plone.volto
Products.CMFPlacefulWorkflow

Even if you pip install Plone you'll need to explicitly install if you need them

plone.distribution
plone.exportimport

It is a good question whether "common mortal" will always need plone.app.multilingual or plone.volto or even plone.app.discussion.

I personally prefer to explicitly install "actual" packages and avoid "metapackages".