Re: Modularity vs. libgit

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

 



Hello,

I just wanted to give you an update from my last discussions on
#fedora-modularity and other places.

# Problems definition

* Default modules can't have conflicting dependenices
* Changing dependencies in a stream is not supported

# Why does libgit2 has to be a module?

libgit2 is not just one package. It is an ecosystem.

Right now libgit2 module provides libgit2 itself and python bindings.
While we can obviously provide libgit2_0.26, libgit2_0.27 and such,
this does not help us with python packages. Nobody in sane mind will rename them
and make them conflict (because they are not parallel-installable).

I wanted to also add ruby bindings to a module, but I never got time
to actually do it.

# What about dependencies change?

Let's not lock ourselves into libgit2 story, just take an abstract names.

Module foo:rolling depends on bar:1. Name of stream "rolling" means to serve
purpose of "user-focused content meant for general use". That means,
if foo's upstream decided to update their bar dependency to a new version,
foo:rolling maintainer would just switch dependency to bar:2.

However, with modularity once you enable stream
(and "bar:1" gets enabled implicitly), you stay on it forever. This means
that maintainer of "foo" just can't change dependencies ever. This is just bad.

I think solution here is to teach DNF about implicitly enabled modules
and switch streams for them when needed. Or even add flag "--i-know-what-i-do"
for the time being. From what I understand, this has been done so that
systems do not break ever… However, with right RPM dependencies, I think this
should not be a problem. And after all, RHEL can be different from Fedora.
Right now DNF resolves dependencies of modules separately from RPM ones
(which is yet another thing worries me[0]). If we teach it to do it at once,
we can be sure that whatever is installed locally by RPM, will not have
broken dependencies so it will prevent switching stream.

# Why should defaults conflict?

Let's think what defaults mean and why they even exist. People used to do
"dnf install foo" and get their package. With modularity, they would need to
explicitly enable some module. Here we come to the defaults. Packages from
default streams are available for installation without explicit enabling of
modules. Installing the actual package will trigger enablement of a
module stream
(so that it does not get upgraded to an incompatible version).

In Fedora we try to make as much as possible to be parallel-installable.
However, this is not always possible. Conflicts happen everywhere. If
foo and bar
can't be installed in parallel, we do not just abort when not installing
both of them at the same time. You can install foo separately from bar.
This is unfortunate, but that's what it is.

Why modules have to be different? Default modules are there to make
packages available for selection. When user will try to install them
and there is a conflict, only then DNF should show an error. Not in any other
cases.

# What should we do now with modularity and libgit?

I can change libgit2 module to provide static subpackages and teach
Rust applications to link statically so we won't have these dependencies.

But this is temporary workaround because we don't have any automation for
rebuilding modules or rpms on a dependency change.

What I think should happen is DNF team to provide an ETA to fix issues above
and depending on that we can see whether we should take this path or just
throw away modularity and focus on other solutions which are not that invasive.




[0] https://bugzilla.redhat.com/show_bug.cgi?id=1677746

On Thu, Jun 13, 2019 at 9:22 PM Adam Samalik <asamalik@xxxxxxxxxx> wrote:
>
> So, I'd like to discuss the libgit issue [1] [2] we're experiencing. With a help of a few people, I've put together this post to get us on common ground: https://communityblog.fedoraproject.org/modularity-vs-libgit/
>
> There are few ideas about solving the issue right now. But we might be able to think about better ways to deal with similar issues long-term. Let's do this!
>
> [1] https://bugzilla.redhat.com/show_bug.cgi?id=1717117
> [2] https://pagure.io/fesco/issue/2146#comment-575852
> --
>
> Adam Šamalík
> ---------------------------
> Senior Software Engineer
> Red Hat
> _______________________________________________
> devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
> To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
> Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html
> 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