Re: Modularity: The Official Complaint Thread

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



----- Original Message -----
> From: "Kevin Kofler" <kevin.kofler@xxxxxxxxx>
> To: devel@xxxxxxxxxxxxxxxxxxxxxxx
> Sent: Tuesday, November 5, 2019 7:48:47 PM
> Subject: Re: Modularity: The Official Complaint Thread
> 
> Alex Scheel wrote:
> > Special care needs to be taken to make sure we discuss what happens
> > when a _module maintainer_ wants to switch the module stream of one
> > of its dependencies, especially a dependency the user never
> > specifically selected a stream for. That should be an allowed and fully
> > supported use case.
> > 
> > This was the pki-core<->idm module fiasco that was never resolved by
> > DNF/Modularity.
> > 
> > I'd post the bug number but the bug isn't public.
> > 
> > 
> > So perhaps split this into:
> > 
> >  1. How does a _user_ change module streams during upgrade?
> >  2. How does the _maintainer_ change module streams of a dependent
> >     module? (module a -dep-> module b -- change stream of b from 1 to 2)
> > 
> > 
> > IMO, without a resolution in Fedora we'll never get one in RHEL.
> 
> Indeed, in Fedora, it is quite plausible for a package to be ported to a new
> major version of a library in an update. (In RHEL, it actually also is, but
> for different reasons, i.e., its extremely long lifetime.)
> 
> But this shows how modules are the wrong answer for non-leaf packages. What
> happens if one of the packages you had installed wants to bump the module
> stream of its dependency and another one doesn't? Then suddenly, your system
> cannot be updated anymore, because the packages that previously coexisted
> just fine now irremediably conflict.
> 
> (In fact, this is just a particularly nasty special case of the more general
> design flaw of Modularity that Stephen Gallagher has unfortunately forgotten
> in his list in the original post, the version conflicts caused by versioned
> dependencies without parallel installability. The special case is that the
> conflicts can also be introduced on updates to previously non-conflicting
> packages.)
> 
> Providing incompatible versions of non-leaf packages MUST be done in a
> parallel-installable way. There is no other way out.

Since this is all public, for the rest of the audience:

 - There are three modules in question here, in core RHEL:

   1. pki-deps, an artifact of the original, broken attempt at Modularity
      in RHEL, when builds would take eons. This contains a bunch of
      dependencies of Dogtag. 
   2. pki-core, the core packages of Dogtag:
      - JSS
      - Tomcatjss
      - ldap-jdk
      - Dogtag PKI
   3. The IPA module and its "DL1" stream.

   You can pull these three modules today on RHEL and try them out if
   you want. 

 - The dependency tree is thus: 

    IPA:DL1 -> pki-core:10.6 -> pki-deps:10.6

 - What we had wished to do was provide two sets of module streams:

    pki-core @ 10.6 -- Dogtag at 10.6 version (in RHEL 8.0 only)
    pki-core @ 10.7 -- Dogtag at 10.7 version (in RHEL 8.1 only).

   Anyone who was using pki-core by itself could stay on 10.6 if they
   so desired (by staying on RHEL 8.0) or upgrade to 10.7 (by upgrading
   to RHEL 8.1). This allowed us, in the future, to support multiple
   versions on the same RHEL version if there were breaking changes
   between them. 

   Since IPA is a monolith and wanted features in 10.7, it was going to
   switch to 10.7 in the new RHEL 8.1 release (out today!) because it
   wanted some things we introduced there.

 - Instead, since switching branches as described above wasn't supported,
   we ended up shipping our 10.7 version release in the (now incorrectly
   named) 10.6 branch. This means, on the whole, the pki-core module isn't
   netting us any value. It functions just like an ursine collection of
   packages with only a single version stream available.


So to answer your question:

> What happens if one of the packages you had installed wants to bump the
> module stream of its dependency and another one doesn't?

This was RHEL. We (the Dogtag / RHCS team at Red Hat) had full control
over our package. We could choose to ship whatever version we want. That
meant that we have to _work_ with other teams (in this case, exactly one:
IPA) and ensure what we wanted to ship wouldn't break anything. Part of
that was making sure we can switch streams. It turns out that, while we
wanted to and got sign-off from IPA, the issue was a fundamental limitation
in DNF. In RHEL, we know there is only one such dependent, IPA, and we can
deal with that.

In short, inside RHEL, we can take this as risk and control for it. In
Fedora, it is harder and would require (packaging/FESCO/Modularity/...)
policy to enforce. But it really _isn't_ a hard thing to do: limit it to
Rawhide, require changes to be announced and coordinated (like SONAME bumps).

Plus, inside RHEL, we could make reasonable support assumptions like, say,
running an IPA server on the same system as $MythicalOtherUserOfDogtag wasn't
supported. I'd argue we could (and should!) do the same in Fedora. In
practice, that usually happens by maintainers ignoring bugs reported that
they don't like.

(As an aside, while Dogtag isn't parallel-installable from a versioning
 perspective, it is perfectly valid to have multiple Dogtag instances on
 the same host. We do maintain backwards compatibility and provide
 automatic migrations to newer versions, when possible. This means that
 there really is no reason not to upgrade. And modularity's lack of upgrade
 and module stream switches don't really affect us.)

---

I don't personally think this is any more of a showstopper than, say,
default module streams shadowing content from ursine packages. Or say,
building huge BuildRoot-only modules. Or say, duplicating packaging
efforts between multiple modules.

As a community, on the whole, our approach to the other issues has been
best summarized as:

    "eh"

We'll deal with it when it is actually a problem. I think we can take
the same approach here.

Then again, we've avoided this entire mess by staying ursine in Fedora.
We've tried to be good stewards for the community by maintaining as many
ursine packages as we could through the Stewardship SIG. The net results
of the SIG have been a reduction from 70% out of date to 31%, to date.

---

Lastly, I think Modularity looks at the problem of packaging from the
wrong perspective. It encourages monoliths and heros, instead of well,
smaller (more modular!) packages and community efforts. Maintainers are
failable. (Most) maintainers don't have rights over packages that aren't
theirs. And software needs to move _forward_ not stay stagnate. And the
FTBFS  process helps with some of this, removing packages that won't
continue building.

Concretely, if you aren't the maintainer for a package, I don't think you
have a fundamental right to keep it at some older version "just because",
if the _actual_ maintainer wishes to bump the package version. So in general,
it _should_ be allowed to bump the module stream. And perhaps DNF should
resolve packages to highest NVR across all enabled (or depended on streams).
But this is complicated because there was no actual constraints placed on
streams, and modularity introduces a whole different dimension of complexity.

So I think, with reasonable policies protecting stable releases from module
stream switches, let them happen. The community needs to work together. The
community will work it out as a group.


Instead, we spend too much time duplicating each other's work...
... and arguing on mailing lists. :)


My 2c.

- Alex


> 
>         Kevin Kofler
> _______________________________________________
> devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
> To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
> Fedora Code of Conduct:
> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives:
> https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx
> 
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux