Re: RFC: Modularity Simplified

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

 



Igor Gnatenko wrote:
> 1. Do we want to package multiple streams only for "leaf" software or
> any kind of it?
> I believe that we need both, and we do support both. However, it might
> not look as nice as it could:
> * Need to create multiple repos for different "streams"
> * Need to maintain epel7/epel8/f30/f31/master branches
> * Package names have to be "mangled" (e.g. mozjs38, mozjs60) and it is
> manual work

Your proposal addresses these, but skips the same requirement the current 
Modularity also fails to address by design, i.e.:

> * However, those are supposed to be (according to the guidelines)
> parallel-installable (and not be conflicting in any way)

In particular, your proposal suggests:

> * Packages produced from nodejs.src have Provides: stream(nodejs)
> stream(nodejs:9) and Conflicts: stream(nodejs) so that it is
> explicitly not possible to install 9 and 10 at the same time

which explicitly excludes the parallel installability. So I do not see how 
it addresses the main drawback Modularity has compared to compatibility 
packages.

(Note: The sentence as stated also means that the package Conflicts with 
itself, which will probably also badly confuse some tools, but that is a 
technical detail that should be fixable. It is the underlying concept of 
Conflicting with all other versions that is the real issue.)

Your proposal is essentially a proposal to automate the creation of 
versioned (with suffixed Name) compatibility packages, but it excludes the 
most essential part of the compatibility package pattern, the one that makes 
it suited for this use case unlike the current Modularity. So I fail to see 
how it addresses in any way the issues we are having with the current 
Modularity.

You suggest to change the packaging guidelines to match the technical 
limitations of your proposed technology:

> * Packaging guidelines should be adopted to accept conflicting
> packages and tooling should be improved to show the conflicts and how
> to resolve them

but the guideline that compatibility packages should not conflict exists for 
a strong reason, and removing the guideline will not make the issues that 
lead to its existence magically go away.

Non-default versions of non-leaf packages MUST be parallel installable with 
the default version for the distribution to be consistent and for users to 
be allowed to freely choose their applications without arbitrary conflicts.

Otherwise (i.e., if parallel installability is not implemented), what you 
write:

> Using some examples from previous threads, why does bugzilla have to be
> built against 2 different versions of perl and users could choose? I think
> maintainer should choose one version of perl and let bugzilla use it. 

is just not true. If the 2 different versions of Perl cannot coexist, 
building Bugzilla against only one version is not possible without making 
Bugzilla incompatible with anything built against the other version.

I agree that we should only build each package against one version of Perl 
(the distribution default wherever possible, otherwise the most suitable 
version), but that requires that the users can actually install more than 
one version at the same time.

But going back to your questions and answers:

> 2. Do we want to support buildtime-only packages?
> I would rather generalize this category as "less-supported packages".

This is getting dangerously close to the strawman antipattern: you are 
modifying the question before answering it. That said, you then add:

> Obviously, for packages which are used in runtime need a proper
> support as we do today for all packages to share work

which limits the scope to build-time-only packages again. So why did you 
attempt to modify it above?

> I maintain 800+ Rust packages and very often I need to update them to
> an incompatible version. In Rawhide I just do it, update all dependent
> packages to use new version, and if I can't do that for some reason,
> create "compat" package. Obviously, all patches are sent to the
> upstream.
> Upstreams are removing features, I need to deal with Obsoletes but I
> simply can't continuously add new Obsoletes into the
> fedora-obsolete-packages.

It is a common misconception that any package removed from Fedora belongs 
into fedora-obsolete-packages. In most cases, you should actually NOT add 
the package there. Just stop shipping it. If the user has an obsolete 
package installed, it should be kept by default. Only if it actually causes 
file conflicts with current software, it makes sense to Obsolete the package 
at RPM level. (Arguably also for dependency conflicts, but those can 
actually be resolved with the DNF --allowremove flag, so it is not that 
clear cut. I would argue for keeping the packages by default and letting the 
users remove obsolete packages with broken dependencies manually.) We should 
not remove software that users may still be using from users' systems for no 
good reason. Especially not if it causes extra work for you as the 
maintainer.

> And what for if they are used only during build of other, more important,
> packages? Why do I have to spend time with upgradepaths?

Because the user may want to use that dependency to either rebuild your 
package (which is definitely a valid use case in a Free Software 
distribution), or to compile some other software (something we definitely 
also want to support), or to develop some new software (which is explicitly 
one of the target user bases of Fedora Workstation), or even for something 
entirely different (which might not be possible for a Rust library, but 
think, e.g., of some LaTeX package that your package needs to compile its 
documentation, but that can also be used to write documents entirely 
unrelated to software).

If you are spending your time to get the dependency into Fedora because your 
package needs it, you should also take the little extra time it takes to 
support it properly.

> I definitely want some mechanism which will tell to user that "THIS
> PACKAGE IS NOT FULLY SUPPORTED."

And I think telling that to the user is absolutely unfair and against the 
spirit of Fedora.

> Obviously, for packages which are used in runtime need a proper
> support as we do today for all packages to share work (that's the
> place where I agree with Kevin Kofler.)

You do not really agree with me because I do not see any valid reason for 
making a distinction between build-time and runtime dependencies there. If 
your package depends on something, either you or somebody else must maintain 
the something in Fedora and it must be available for all users, no matter 
how exactly the dependency is used. And all the more so if we are not even 
talking about a build-time-only tool, but about statically-linked Rust code 
which is actually used at runtime, just not in the form of the package.

        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




[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