In Debian stellen mehrere Programme bzw. Pakete eine ähnliche oder gleiche Fähigkeit bereit. Damit entscheiden Sie, welches Werkzeug zum Einsatz kommt. Ubuntu fährt hier eine wesentlich restriktivere Politik.
Das betrifft auf der einen Seite sehr generische Funktionalitäten wie
z.B. die eines Webbrowsers, eines (Text-)Editors oder eines Pagers, aber
auch sehr spezifische Funktionalitäten, für die einfach mehrere
Implementierungen vorliegen. Zu Letzteren gehören bspw. das Schweizer
Taschenmesser für TCP/IP namens netcat
oder die Skriptsprache awk
.
Letztere liegt in drei Varianten vor — in der eher umfangreicheren
Implementation des GNU Projektes (gawk
), in der kleineren und
schnelleren Implementation von Mike Brennan (mawk
) und in der
originalen Awk-Implementation [awk].
Weiterhin gibt es in Debian von einigen Programmen mehr als eine Programmgeneration.
In Debian 8 Jessie gibt z.B. verschiedene Veröffentlichungen von GCC und Automake. GCC ist in den beiden Versionen 4.8 und 4.9 enthalten und Automake in den Versionen 1.11 und 1.14. Einer der Gründe für die verschiedenen Versionen ist, dass manche Pakete in Debian z.B. nur mit einer bestimmten Generation eines Compilers übersetzt werden können. So werden z.B. in Debian 8 Jessie alle Linuxkernel mit GCC 4.8 kompiliert, während GCC 4.9 der Standardcompiler ist. Je nach Einsatzzweck eines Systems kann es entsprechend auch hilfreich sein, den Standardcompiler systemweit auf eine bestimmte Generation festzulegen.
In Debian 9 Stretch ist dagegen GCC wieder nur noch in einer Version
enthalten, nämlich 6.3.0. Dafür ist OpenSSL hingegen in zwei
verschiedenen Versionen enthalten — 1.1.0 und 1.0.2. Hintergrund ist
hier, dass bestimmte Programme (noch) nicht sauber mit der neueren
OpenSSL-Version kompiliert werden können und die dazu notwendigen
Änderungen nicht-trivial sind. So ist z.B. Apache gegen OpenSSL 1.0.2
gelinkt, weil noch nicht alle SSL-nutzenden Apache-Module sauber mit
OpenSSL 1.1 zusammenarbeiten. Eine Standard-Version in dem Sinne, wie es
sie beim GCC gibt, existiert hier jedoch nicht. Gegen welche
OpenSSL-Version ein Programm kompiliert und später gelinkt wird, hängt
davon ab, welches der beiden sich gegenseitig ausschließenden Pakete
libssl-dev
(OpenSSL 1.1) oder libssl1.0-dev
(OpenSSL 1.0.2)
installiert ist.
Ein weiterer Grund für die Verwendung des Alternativen-Systems innerhalb desselben Binärpakets oder von Binärpaketen auf der Basis desselben Sourcepakets sind unterschiedliche Konfigurationen oder variierende Abhängigkeiten. Beispiel eins ist GNU Emacs, welcher in drei Varianten vorliegt:
emacs23
bzw. emacs24
). Dieses Paket
hängt u.a. von D-Bus ab.
emacs23-lucid
bzw.
emacs24-lucid
). Mit Unterstützung für das X-Window-System, aber ohne
allzuviele sonstige Abhängigkeiten.
emacs23-nox
bzw. emacs24-nox
).
Ein zweites Beispiel ist der Windowmanager dwm
, bei welchem die
Konfiguration zum Kompilierzeitpunkt festgelegt wird. Das Paket dwm
[Debian-Paket-dwm] enthält daher vier Programme mit einer jeweils
unterschiedlichen Konfiguration — dwm.default
, dwm.maintainer
,
dwm.web
und dwm.winkey
. Über das Alternativen-System legen Sie fest,
welches davon verwendet wird, wenn Sie lediglich dwm
aufrufen.
Viele Administratoren haben zudem sehr genaue Vorstellungen, welche Programme verwendet werden sollten, wenn sie unter dem generischen Programmnamen aufgerufen werden.