diff options
authorMichał Górny <>2020-01-08 10:21:50 +0100
committerMichał Górny <>2020-01-08 10:41:07 +0100
commit0c7ca4fd8cc70fe65c0898bc2365cef5f8a22012 (patch)
parentOptional RDEPEND policy (diff)
USE=multislot policy
Signed-off-by: Michał Górny <>
1 files changed, 39 insertions, 0 deletions
diff --git a/other-metadata.rst b/other-metadata.rst
new file mode 100644
index 0000000..ddc8377
--- /dev/null
+++ b/other-metadata.rst
@@ -0,0 +1,39 @@
+Other metadata variables
+.. index:: SLOT; dynamic
+.. index:: USE flags; multislot
+Dynamic slots (multislot flag)
+:Source: QA (inferred from PMS)
+:Reported: ``use`` in global scope triggers fatal error
+The use of ``multislot`` to alter ``SLOT`` values (as well as any other
+USE-dependent slot values) in the Gentoo repository is forbidden.
+Such a feature can be used in overlays, and it is acceptable to provide
+such support in eclasses as long as it is not used in ::gentoo.
+This policy has been explicitly declared in response to historical
+(pre-2016) use of ``USE=multislot`` in toolchain ebuilds. When the flag
+was disabled, all package versions used the same slot, and upgrades were
+handled as for non-slotted packages. When the flag was enabled, each
+version used a separate slot, permitting multiple versions being
+installed simultaneously. This allowed the user to choose between
+the two options.
+The original violation has been resolved by unconditionally slotting
+the packages. This permitted the users to install multiple versions
+in parallel, while removal of old versions was to be handled via
+``emerge --depclean``.
+*Rationale*: this feature was in direct violation of PMS `metadata
+invariance`_ requirements. It caused the cached slot value to depend
+on the state of querying the USE flag (which in turn could technically
+depend on slot, via ``package.use``). This caused undefined package
+manager behavior which could include use of unpredictable slot, cache
+invalidation or explicit errors.
+.. _metadata invariance: