Igor Gnatenko wrote:
On Wed, Oct 23, 2019 at 2:52 PM Petr Šabata <contyk(a)redhat.com>
wrote:
> While these issues are being resolved, we are considering temporarily
> disallowing default streams in Fedora. I don’t want to abandon the
> idea completely, as doing so reduces the motivation to actually build
> modules and reap the benefits they might provide.
This basically makes modularity not useful for many things:
1. People will have to have different workflows between "default"
version (standard workflow, as we have today) and "modular" version.
Also that means, on the distribution upgrade maintainers will have to
do many things to remove modular stream, add old one and upgrade
non-modular version. This is also not only about maintainers, but end
users too:
FXX: fish 3.x is non-modular, stream 4.x exists
FXX+1: fish 4.x is non-modular, stream 3.x exists
* If user wants to stay on 3.x, he needs to enable stream explicitly
*after* upgrade and then downgrade the package (which is actually
unsupported).
* If user wants to stay on 4.x, he needs to enable stream explicitly
during FXX (which is totally fine), but after upgrade he has to
explicitly disable it.
I think the right approach would just be to have both fish 3.x and 4.x as
module streams for all releases, independently of what they ship:
Obviously you can have 3.x stream for FXX and 4.x for FXX+1, but
that
means:
* Maintainer has to maintain that version *twice* (modular and
non-modular version)
It should just be a matter of git merge (usually a fast forward) and fedpkg
build.
* Nobody can guarantee that those will be compatible
If they are built from the same specfile and against the same libraries (the
distro defaults, not other modules, but that would be the default if you do
not specificially specify otherwise in your module metadata), why would they
not?
But of course, there is no *guarantee* that a module stream is compatible
with the default, non-modular version. That is why they are alternate
streams to begin with.
2. In Rust we use modularity to build bunch of packages, filter
buildroot-only packages and ship only one user-facing RPM. If we
remove default stream, people won't be ever able to do `dnf install
ripgrep'. This is worst UX we can provide.
This means that the packaging guidelines for Rust need to be improved. If
you need a build-time dependency to build the package, it needs to be
shipped, so that users can reproduce the build and so that they can compile
other Rust software.
I think problems with modularity is not about packager experience or
some missing features (e.g. I'm waiting for some features for 1+
years, but that's not crucial). The problem is that we don't have
well-defined *user* experience.
Do you think you will be able to come up with some exhaustive
documentation how installation/upgrades/downgrades/switches/whatnot
should look like in modularity? I would imagine you need at least 70
"test-cases" for simple things.
That part, I mostly agree with. I think the packager experience is also
lacking and that this cannot be neglected either, but the worst is indeed
the end-user experience. (The promise that users would not notice the
default streams at all just does not work out. The difference shows in the
form of upgrade path issues, differences in handling retired packages (due
to the possible hard dependency on a distro/platform version), performance
regressions, etc.)
After last few years with modularity, I don't think it is
improving
but it definitely causes some problems.
While I would like to achieve goals you stated in the beginning, I
don't think we are ready to introduce modularity to our users and
packagers yet. I would like to see it getting back to whiteboard,
together with our community define behaviors and implement it outside
of our main infrastructure. Give it feedback for 1-2 releases and if
it makes sense for people here, get it in here.
Yes, that means that people who enjoy modularity will have to start
maintaining non-modular packages again and experiment with modularity
somewhere else but I don't think it is bad iddea.
That is actually a more radical change than disallowing default streams. It
would basically disallow default streams too, or allow them only in a
non-default repository (which means that you still have to maintain the
non-modular version).
I would personally be OK with either approach (just disallowing default
streams or reverting/externalizing Modularity entirely), I am fine with
everything that makes modules fully optional again, but I guess the former
would be easier to get consensus on and implement.
Kevin Kofler