Slotting
Packages can support having multiple versions installed simultaneously. This is
useful for libraries which may have changed interfaces between versions — for
example, the gtk+
package can install both versions 2.24
and 3.6
in
parallel. This feature is called slotting.
Most packages have no need for slotting. These packages specify SLOT="0"
in
the ebuilds. This is not the same as specifying an empty slot
(SLOT=""
) — an empty
slot means "disable slotting entirely", and should not be used.
Portage permits at most one instance of a package installation per SLOT
value. For example, say we have the following:
-
foo-1.1
withSLOT="1"
-
foo-1.2
withSLOT="1"
-
foo-2.0
withSLOT="2"
-
foo-2.1
withSLOT="2"
Then the user could have, say, foo-1.2
and foo-2.0
installed in
parallel, but not foo-1.1
and foo-1.2
. Note that it is entirely
possible that the user may have foo-2.0
installed and no foo-1.x
at all.
To DEPEND
upon a package in a specific slot, refer to
SLOT Dependencies.
Sub-Slots
Sometimes a package installs a library that changes interfaces between versions,
but it's undesirable or inconvenient to allow some of these versions to be installed
simultaneously. In EAPI=5
and higher, this situation can be handled by
using sub-slots, which are delimited from the regular slot by a /
character,
as in SLOT="slot/subslot"
. Packages can
request to be
automatically rebuilt when the subslot of a runtime dependency changes.
For example, suppose package foo
installs a library whose soname is
different for different versions. It would be reasonable to use the soname version
as the sub-slot name:
-
foo-1.1
installslibfoo.so.5
—SLOT="1/5"
-
foo-1.2
installslibfoo.so.6
—SLOT="1/6"
-
foo-2.0
installslibfoo-2.so.0
—SLOT="2/0"
-
foo-2.1
installslibfoo-2.so.1
—SLOT="2/1"
Other ebuilds that install binaries which link to libfoo-2
(or libfoo
)
can then request to be automatically rebuilt when the installed version of
foo:2
or foo:1
changes sub-slots — for example, when the user
upgrades from foo-2.0
to foo-2.1
.
If an ebuild does not explicitly declare a sub-slot, the regular slot is used as the value of the sub-slot by default.
media-libs/libpng
and
package foo
depends on libpng:0=
).
Therefore, it's best if you start using sub-slots in the library when the existing library
interface changes.
Slot Names
Current versions of portage accept slot and sub-slot names that begin with an
alphanumeric character or '_'
, and contain alphanumerics and '_'
,
'-'
, '.'
, and '+'
characters.