Modularity Policy Discussion for EPEL 8.1

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

 



As you know, we delayed support of Modularity in EPEL (called
Application Streams in RHEL) until 8.1 while we worked out some
remaining issues. Some of those issues were technical, but we have a
few others that will come down to policy. In particular, EPEL has to
deal with something Fedora does not: the possibility that it could
come into conflict with streams from the official Red Hat Application
Streams.

I'm going to try to enumerate in this email some of the cases I can
think of that might need attention, as well as providing my
recommendations for what policy we should set in EPEL.

Case 1: EPEL ships a module "foo" with stream "baz" (aka "foo:baz").
This is an alternative stream to RHEL AppStream, which ships
"foo:bar". In a new minor release, RHEL AppStream starts also shipping
"foo:baz".

Case 2: EPEL ships a module "foo:baz". RHEL AppStream does not ship
the module"foo" at all. In a new minor release, RHEL AppStream starts
also shipping "foo:baz".

Case 3: EPEL ships a module "foo:baz". RHEL AppStream does not ship
the module "foo" at all. In a new minor release, RHEL AppStream starts
also shipping "foo:bar".

Case 4: EPEL ships a module "foo:baz". AppStream ships the module
"foo" and has "foo:bar" declared as the default stream.

Case 5: EPEL ships a module "foo:baz". AppStream ships the module
"foo" and has no default stream specified for the "foo" module.

Case 6: EPEL ships a module "foo:baz" that wants to set the default
profile of the "baz" stream to "client". AppStream does not ship the
module "foo".

Case 7: EPEL ships a module "foo:baz" that wants to set the default
profile of the "baz" stream to "client". AppStream ships the module
"foo" and has a default profile set for the "bar" stream.



So lets's break these down. The first three cases are all very
similar. They address the situation where we have both RHEL and EPEL
attempting to own the same name within a namespace (module). My
recommendation here is that we require EPEL module streams to be
prefixed with "epel-". Then, even if RHEL AppStream starts shipping a
stream of the same name, there will be no namespace collision. There
is another benefit as well: it will be easy to tell at a glance
whether a particular stream is from RHEL AppStream (and therefore
supported by Red Hat) or if it comes from EPEL, with only volunteer
community support.

The cases involving default module streams are a bit more complicated.
Making a module stream a "default stream" effectively means that its
contents are treated like the non-modular EPEL 8 contents, except that
installing one of them means that the stream becomes enabled. We need
to figure out, however, whether we should allow EPEL to set default
streams at all. The major issue is that if RHEL later starts shipping
this module and wants to set a default stream, we now have a conflict
to resolve. From a technological standpoint, it can be done: Red Hat
will need to ship the defaults object metadata with a `data.version`
value higher than the one shipped in EPEL. Yum will then prefer that
version over the one in EPEL. A slight risk occurs here if EPEL ships
an update to the defaults data that bumps the version higher again,
but that's really no different than today when someone pushes a
package build to EPEL that ends up in RHEL with a lower version at a
point release.

Things get dicier when we add in the concept of the default profiles,
though. The design of the module defaults metadata did not entirely
take the split repo ownership into account (my fault). So we
essentially have a single YAML document in the metadata that
identifies the default stream and the default profiles for each stream
in the module. Now, there's some leeway here: I did consider the
updates[-testing] use-case, so in the event that two repos both
contain defaults for a module, they can be merged[1] in many cases. If
they have the same `data.version` value, so long as the provided
profiles do not conflict, they will just be merged together. If they
have differing `data.version` values, the higher one will win.


So, I see the following options for how to handle default streams in RHEL 8

Option 1: We disallow assigning default streams at all within EPEL 8.
This will protect us against a future change where RHEL wants to set a
default. Additionally, it means that all EPEL modules are explicitly
opt-in and so we don't ever surprise anyone.

Option 2: We allow making EPEL streams the default stream if RHEL does
not currently provide a default stream. We set strict policy regarding
what a default stream may contain (such as "must not replace any
package provided by RHEL 8"). If RHEL later decides to set a default
for this stream, the RHEL release engineering must ensure that the
`data.version` value is higher than what EPEL 8 carries.

I'm somewhat more in favor of Option 1 here, mostly because it
minimizes the chance of conflicts and ensures the opt-in nature of
EPEL. But I'm willing to hear counter-arguments.



For default profiles, we have some options as well:

Option 1: We disallow setting default profiles for EPEL streams. Pros:
no risk of conflict with RHEL, should they now or in the future
provide defaults for some streams of this module. Cons: `yum module
install foo[:bar]` would not work (they would need to do `yum module
install foo[:bar]/profilename`) and would likely irritate users.

Option 2: We allow setting default profiles for EPEL streams. We take
advantage of the defaults merging logic and ensure that if we need to
supplement RHEL AppStream's defaults content, we must ship a
modulemd-defaults document of the same `data.version`. This will allow
them to be merged cleanly. Pros: Optimum user experience (they get the
default profiles installed when they use the simplified install
command). Cons: We need to constantly monitor each RHEL AppStream
release and ensure that we aren't ever overriding (or being overridden
by) RHEL.


I think Option 2 is the better choice here (fewer angry users is a
good thing), but I worry a bit about the maintenance burden of keeping
track of the `data.version` values and ensuring they stay in sync. I
think we can probably automate a good deal of this, though.

Comments and feedback are highly desirable.


[1] See https://fedora-modularity.github.io/libmodulemd/latest/modulemd-2.0-Modulemd.ModuleIndexMerger.html
for a detailed description of how defaults are merged.
_______________________________________________
epel-devel mailing list -- epel-devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to epel-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/epel-devel@xxxxxxxxxxxxxxxxxxxxxxx




[Index of Archives]     [Fedora Announce]     [Fedora News]     [Fedora Cloud]     [Fedora Advisory Board]     [Fedora Education]     [Fedora Security]     [Fedora Scitech]     [Fedora Robotics]     [Fedora Maintainers]     [Fedora Infrastructure]     [Fedora Websites]     [Anaconda Devel]     [Fedora Devel Java]     [Fedora Legacy]     [Fedora Desktop]     [Fedora Fonts]     [ATA RAID]     [Fedora Marketing]     [Fedora Management Tools]     [Fedora Mentors]     [Fedora Package Announce]     [SSH]     [Fedora Package Review]     [Fedora R Devel]     [Fedora PHP Devel]     [Kickstart]     [Fedora Music]     [Fedora Packaging]     [Centos]     [Fedora SELinux]     [Fedora Legal]     [Fedora Kernel]     [Fedora QA]     [Fedora Triage]     [Fedora OCaml]     [Coolkey]     [Virtualization Tools]     [ET Management Tools]     [Yum Users]     [Tux]     [Yosemite News]     [Linux Apps]     [Gnome Users]     [KDE Users]     [Fedora Tools]     [Fedora Art]     [Fedora Docs]     [Maemo Users]     [Asterisk PBX]     [Fedora Sparc]     [Fedora Universal Network Connector]     [Fedora ARM]

  Powered by Linux