Blame programming-guidelines/cs/parallel-installability.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="parallel-installability" xml:lang="cs">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="index#maintainer-guidelines"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Havoc Pennington</name>
Packit 1470ea
      <email its:translate="no">hp@pobox.com</email>
Packit 1470ea
      <years>2002</years>
Packit 1470ea
      
Packit 1470ea
           installability: http://ometer.com/parallel.html.
Packit 1470ea
           Licence CC-BY-SA 3.0 confirmed by e-mail with him. -->
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Philip Withnall</name>
Packit 1470ea
      <email its:translate="no">philip.withnall@collabora.co.uk</email>
Packit 1470ea
      <years>2015</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <include xmlns="http://www.w3.org/2001/XInclude" href="cc-by-sa-3-0.xml"/>
Packit 1470ea
Packit 1470ea
    <desc>Jak psát knihovny, aby v budoucnu šly instalovat souběžně různé verze</desc>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Souběžná instalace</title>
Packit 1470ea
Packit 1470ea
  <synopsis>
Packit 1470ea
    <title>Shrnutí</title>
Packit 1470ea
Packit 1470ea
    

Pokud mohou být dva balíčky nainstalovány souběžně, nesmí mít společné názvy souborů a lidé provádějící vývoj vůči balíčku vždy kompilují vůči očekávané verzi. Pro démony, pomocné programy a konfigurační soubory to platí úplně stejně, jako pro hlavičkové soubory a binární knihovny.

Packit 1470ea
Packit 1470ea
    <list>
Packit 1470ea
      <item>

Zajistěte, aby všechny verze knihoven šly nainstalovat vedle sebe. (<link xref="#justification"/>)

</item>
Packit 1470ea
      <item>

Všem souborům instalovaným knihovnou přidělte číslo verze. (<link xref="#solution"/>)

</item>
Packit 1470ea
      <item>

Udržujte číslo verze balíčku oddělené od názvu souboru s knihovnou nebo čísla verze libtool. Je pak jasnější, která část čísla verze balíčku se mění s API. (<link xref="#version-numbers"/>)

</item>
Packit 1470ea
      <item>

Nainstalujte hlavičkové soubory C do <file>$(includedir)/liblibrary-version/library/</file>. (<link xref="#header-files"/>)

</item>
Packit 1470ea
      <item>

Nainstalujte spustitelné soubory knihovny do <file>$(libdir)/liblibrary-version.so.soname</file>. (<link xref="#libraries"/>)

</item>
Packit 1470ea
      <item>

Nainstalujte soubory pkg-config do <file>$(libdir)/pkgconfig/library-version.pc</file>. (<link xref="#pkg-config"/>)

</item>
Packit 1470ea
      <item>

U souborů s nastavením zajistěte zpětnou a dopřednou kompatibilitu nebo je instalujte do <file>$(sysconfdir)/knihovna-verze/</file>. (<link xref="#configuration-files"/>)

</item>
Packit 1470ea
      <item>

Nastavte GETTEXT_PACKAGE na library-version. (<link xref="#gettext"/>)

</item>
Packit 1470ea
      <item>

Do všech názvů rozhraní D-Bus, názvů služeb a cest k objektům zahrňte číslo verze. Například: org.domain.KnihovnaVerze.Rozhraní, org.domain.KnihovnaVerze a /org/domain/KnihovnaVerze/. (<link xref="#dbus"/>)

</item>
Packit 1470ea
      <item>

Nainstalujte spustitelné soubory démonů do <file>$(libexecdir)/library-daemon-version</file>. (<link xref="#programs"/>)

</item>
Packit 1470ea
      <item>

Spustitelné soubory pomůcek instalujte do <file>$(bindir)/knihovna-utility-verze</file> a symbolické odkazy do <file>$(bindir)/knihovna-utility</file>. (<link xref="#programs"/>)

</item>
Packit 1470ea
    </list>
Packit 1470ea
  </synopsis>
Packit 1470ea
Packit 1470ea
  <section id="justification">
Packit 1470ea
    <title>Odůvodnění</title>
Packit 1470ea
Packit 1470ea
    

Všechny veřejné knihovny by měly být navržené tak, aby je šlo instalovat souběžně ve více verzích, kvůli jednoduššímu pozdějšímu porušení API po dobu existence knihovny. Pokud je knihovna používána více projekty a chcete porušit API, buď musí projekty naráz přejít na nové API, nebo některé z nich již nebude nadále možné nainstalovat souběžně s ostatními, protože závisí na konfliktní verzi této knihovny.

Packit 1470ea
Packit 1470ea
    

To komplikuje správu a žádat pro všech projektech, aby naráz přesly na novou verzi API je organizačně náročné a demoralizující, protože většina porušení API nepřinese mnoho nových funkcí, které by motivovaly k přechodu.

Packit 1470ea
Packit 1470ea
    

Řešením je zajistit, aby šly všechny verze knihoven nainstalovat naráz, takže staré i nové verze API budou nainstalované a aplikace zkompilované vůči nim souběžně, bez konfliktů. Vestavění podpory pro tento druh souběžné instalace je mnohem jednodušší udělat na začátku projektu, než to dělat zpětně.

Packit 1470ea
Packit 1470ea
    

Tím se odstraní problém „slepice nebo vejce“ při přechodu celé sady aplikací z jedné verze knihovny na novější a pro správce knihovny si tím velmi zjednoduší porušení API, takže mohou při vývoji mnohem rychleji reagovat na přání nových funkcí.

Packit 1470ea
Packit 1470ea
    

Jiným a rovněž platným řešením pro knihovny je, nikdy nenarušovat API — tímto se řídí libc.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="solution">
Packit 1470ea
    <title>Řešení</title>
Packit 1470ea
Packit 1470ea
    

Řešením problému v podstatě je přejmenovat knihovnu a ve většině případů je nejhezčím způsobem, jak to udělat, vložit do cesty ke každému instalovanému souboru číslo verze. Díky tomu může být naráz nainstalováno více verzí knihovny.

Packit 1470ea
Packit 1470ea
    

Kupříkladu řekněme, že knihovna Foo tradičně instaluje tyto soubory:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<file>/usr/include/foo.h</file>

</item>
Packit 1470ea
      <item>

<file>/usr/include/foo-utils.h</file>

</item>
Packit 1470ea
      <item>

<file>/usr/lib/libfoo.so</file>

</item>
Packit 1470ea
      <item>

<file>/usr/lib/pkgconfig/foo.pc</file>

</item>
Packit 1470ea
      <item>

<file>/usr/share/doc/foo/foo-manual.txt</file>

</item>
Packit 1470ea
      <item>

<file>/usr/bin/foo-utility</file>

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

Můžete změnit verzi 4 knihovny Foo, aby místo toho instalovala tyto soubory:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<file>/usr/include/foo-4/foo/foo.h</file>

</item>
Packit 1470ea
      <item>

<file>/usr/include/foo-4/foo/utils.h</file>

</item>
Packit 1470ea
      <item>

<file>/usr/lib/libfoo-4.so</file>

</item>
Packit 1470ea
      <item>

<file>/usr/lib/pkgconfig/foo-4.pc</file>

</item>
Packit 1470ea
      <item>

<file>/usr/share/doc/foo-4/foo-manual.txt</file>

</item>
Packit 1470ea
      <item>

<file>/usr/bin/foo-utility-4</file>

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

Pak by mohly být nainstalovány souběžně s verzí 5:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<file>/usr/include/foo-5/foo/foo.h</file>

</item>
Packit 1470ea
      <item>

<file>/usr/include/foo-5/foo/utils.h</file>

</item>
Packit 1470ea
      <item>

<file>/usr/lib/libfoo-5.so</file>

</item>
Packit 1470ea
      <item>

<file>/usr/lib/pkgconfig/foo-5.pc</file>

</item>
Packit 1470ea
      <item>

<file>/usr/share/doc/foo-5/foo-manual.txt</file>

</item>
Packit 1470ea
      <item>

<file>/usr/bin/foo-utility-5</file>

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

To je jednoduše podporováno pomocí <link href="http://www.freedesktop.org/wiki/Software/pkg-config/"><cmd>pkg-config</cmd></link>: <file>foo-4.pc</file> by přidal do cesty <file>/usr/include/foo-4</file> a do seznamu knihoven odkaz <file>libfoo-4.so</file>; <file>foo-5.pc</file> by přidal <file>/usr/include/foo-5</file> a <file>libfoo-5.so</file>.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="version-numbers">
Packit 1470ea
    <title>Čísla verzí</title>
Packit 1470ea
Packit 1470ea
    

Číslo verze které se zahrne do názvu souboru je veze ABI/API. Nemělo by jít o celé číslo verze balíčku, jen o část, která významěmně porušuje API. Pokud používáte pro číslování verzí projektu standartní schéma hlavní.vedlejší.setinkové, je verzí API typicky hlavní číslo verze.

Packit 1470ea
Packit 1470ea
    

Vedlejší vydání (typicky, když je přidáno API, ale není změněno nebo odebráno) a setinková vydání (typicky opravy chyb) neovlivňují <link xref="api-stability">zpětnou kompatibilitu API</link>, takže nevyžadují přesun všech souborů.

Packit 1470ea
Packit 1470ea
    

Příklady v následujícím oddíle předpokládají, že verze API a název souboru s knihovnou jsou exportovány z <file>configure.ac</file> pomocí následujícího kódu:

Packit 1470ea
    <listing>
Packit 1470ea
      <title>Číslování verzí API v Autoconf</title>
Packit 1470ea
      <desc>Kód pro export verze API a názvu souboru s knihovnou z <file>configure.ac</file></desc>
Packit 1470ea
      # Před vydáním by se měl upravit řetězec KNIHOVNA_LT_VERSION, který
Packit 1470ea
# je ve formě a:r:v (aktuální:revize:věk). Postupujte podle následujících bodů:
Packit 1470ea
#
Packit 1470ea
#   1. Když od poslední aktualizace došlo ke změně zdrojového kódu knihovny
Packit 1470ea
#      jako celku, zvyšte revizi („a:r:v“ se změní na „a:r+1:v“).
Packit 1470ea
#   2. Když bylo od poslední aktualizace přidáno, odebráno nebo změněno
Packit 1470ea
#      rozhraní, zvyšte aktuální a revizi nastavte na 0.
Packit 1470ea
#   3. Když bylo od posledního veřejného vydání přidáno rozhraní, zvyšte věk.
Packit 1470ea
#   4. Když bylo od posledního veřejného vydání odebráno nebo změněno 
Packit 1470ea
#      rozhraní, nastavte věk na 0.
Packit 1470ea
AC_SUBST([KNIHOVNA_LT_VERSION],[1:0:0])
Packit 1470ea
Packit 1470ea
AC_SUBST([KNIHOVNA_API_VERSION],[4])
Packit 1470ea
    </listing>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="header-files">
Packit 1470ea
    <title>Hlavičkové soubory C</title>
Packit 1470ea
Packit 1470ea
    

Hlavičkové soubory by vždy měly být nainstalovány v podsložce s číslem verze, kterou požaduje přepínač <cmd>-I</cmd> pro kompilátor jazyka C. Například, když je hlavičkový soubor <file>foo.h</file> a aplikace udělá následující:

Packit 1470ea
    #include <foo/foo.h>
Packit 1470ea
    

pak by měly být nainstalovány tyto soubory:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<file>/usr/include/foo-4/foo/foo.h</file>

</item>
Packit 1470ea
      <item>

<file>/usr/include/foo-5/foo/foo.h</file>

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

Aplikace by měla kompilátoru jazyka C předat přepínač <cmd>-I/usr/include/foo-4</cmd> nebo <cmd>-I/usr/include/foo-5</cmd>. Jak již bylo několikrát řečeno, to vše vám může usnadnit <cmd>pkg-config</cmd>.

Packit 1470ea
Packit 1470ea
    

Všimněte si zvláštní podsložky <file>foo/</file>. Funguje jako jmenný prostor pro #include, aby se předešlo kolizi názvů s jinými knihovnami. Když například dvě různé knihovny nainstalují každá hlavičkový soubor s názvem <file>utils.h</file>, který se ve skutečnosti vloží, když použijete kód #include <utils.h>?

Packit 1470ea
Packit 1470ea
    

Existuje pokušení ponechat jeden z hlavičkových souborů mimo kteroukoliv podsložku:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<file>/usr/include/foo.h</file>

</item>
Packit 1470ea
      <item>

<file>/usr/include/foo-5/foo.h</file>

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

Problém je v tom, že uživatel určitě vždycky omylem použije nesprávnou hlavičku, protože <cmd>-I/usr/include</cmd> si při kompilaci vždy najde nějakou cestičku do příkazového řádku. Pokud to musíte udělat, minimálně do knihovny přidejte kontrolu, která při inicializaci knihovny objeví aplikaci používající nesprávný hlavičkový soubor.

Packit 1470ea
Packit 1470ea
    

Hlavičkové soubory s číslem verze mohou být instalovány z automake pomocí následujícího kódu:

Packit 1470ea
    <listing>
Packit 1470ea
      <title>Hlavičkové soubory v Automake</title>
Packit 1470ea
      <desc>Kód pro instalaci hlavičkových souborů s číslem verze z <file>Makefile.am</file></desc>
Packit 1470ea
      libraryincludedir = $(includedir)/liblibrary-@LIBRARY_API_VERSION@/library
Packit 1470ea
library_headers = \
Packit 1470ea
	liblibrary/example1.h \
Packit 1470ea
	liblibrary/example2.h \
Packit 1470ea
	$(NULL)
Packit 1470ea
Packit 1470ea
# The following headers are private, and shouldn't be installed:
Packit 1470ea
private_headers = \
Packit 1470ea
	liblibrary/example-private.h \
Packit 1470ea
	$(NULL)
Packit 1470ea
# The main header simply #includes all other public headers:
Packit 1470ea
main_header = liblibrary/library.h
Packit 1470ea
public_headers = \
Packit 1470ea
	$(main_header) \
Packit 1470ea
	$(library_headers) \
Packit 1470ea
	$(NULL)
Packit 1470ea
Packit 1470ea
libraryinclude_HEADERS = $(public_headers)
Packit 1470ea
    </listing>
Packit 1470ea
Packit 1470ea
    

Kromě správného číslování verzí by měla mít všechna API v instalovaných hlavičkových souborech <link xref="namespacing">správný jmenný prostor</link>.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="libraries">
Packit 1470ea
    <title>Knihovny</title>
Packit 1470ea
Packit 1470ea
    

Objektové soubory knihovny by měly mít názvy s číslem verze. Například:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<file>/usr/lib/libfoo-4.so</file>

</item>
Packit 1470ea
      <item>

<file>/usr/lib/libfoo-5.so</file>

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

To umožňuje aplikacím získat při kompilaci právě tu, kterou chtějí a zajistí to, že verze 4 a 5 nemají žádné soubory společné.

Packit 1470ea
Packit 1470ea
    

Knihovny s číslem verze mohou být sestaveny a nainstalovány z automake pomocí následujícího kódu:

Packit 1470ea
    <listing>
Packit 1470ea
      <title>Knihovny v Automake</title>
Packit 1470ea
      <desc>Kód pro sestavení a instalaci knihoven s číslem verze z <file>Makefile.am</file></desc>
Packit 1470ea
      lib_LTLIBRARIES = libknihovna/libknihovna-@KNIHOVNA_API_VERSION@.la
Packit 1470ea
Packit 1470ea
libknihovna_libknihovna_@KNIHOVNA_API_VERSION@_la_SOURCES = \
Packit 1470ea
	$(private_headers) \
Packit 1470ea
	$(knihovna_sources) \
Packit 1470ea
	$(NULL)
Packit 1470ea
libknihovna_libknihovna_@KNIHOVNA_API_VERSION@_la_CPPFLAGS = …
Packit 1470ea
libknihovna_libknihovna_@KNIHOVNA_API_VERSION@_la_CFLAGS = …
Packit 1470ea
libknihovna_libknihovna_@KNIHOVNA_API_VERSION@_la_LIBADD = …
Packit 1470ea
libknihovna_libknihovna_@KNIHOVNA_API_VERSION@_la_LDFLAGS = \
Packit 1470ea
	-version-info $(KNIHOVNA_LT_VERSION) \
Packit 1470ea
	$(AM_LDFLAGS) \
Packit 1470ea
	$(NULL)
Packit 1470ea
    </listing>
Packit 1470ea
Packit 1470ea
    <section id="library-sonames">
Packit 1470ea
      <title>Názvy souborů s knihovnami</title>
Packit 1470ea
Packit 1470ea
      

Názvy souborů s knihovnami (známé též jako soname nebo číslování verzí libtool) se zaměřují jen na problém linkování dříve přeložených aplikací za běhu. Neřeší záležitosti okolo kompilace aplikací, které požadují dřívější verzi, a ani nic jiného okolo knihoven.

Packit 1470ea
Packit 1470ea
      

Z toho důvodu byste ještě navíc měli používat pro knihovny názvy s číslováním verzi. Každá z těchto věcí cílí na jiný problém.

Packit 1470ea
    </section>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="pkg-config">
Packit 1470ea
    <title>Soubory pkg-config</title>
Packit 1470ea
Packit 1470ea
    

Soubory pkg-config by měly mít názvy s číslem verze. Například:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<file>/usr/lib/pkgconfig/foo-4.pc</file>

</item>
Packit 1470ea
      <item>

<file>/usr/lib/pkgconfig/foo-5.pc</file>

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

Protože každý soubor pkg-config obsahuje informace o verzi názvu knihovny včetně cesty, měl by být kterýkoliv projekt, který závisí na knihovně, schopen se přepnout z jedné verze na jinou prostou změnou kontroly ve svém pkg-config z <file>neco-4</file> na <file>neco-5</file> (a provedením příslušného přechodu v API).

Packit 1470ea
Packit 1470ea
    

Soubory pkg-config s rozlišením verze mohou být instalovány z autoconf a automake pomocí následujícího kódu:

Packit 1470ea
    <listing>
Packit 1470ea
      <title>Soubory pkg-config v Autoconf a Automake</title>
Packit 1470ea
      <desc>Kód pro instalaci souborů pkg-config s rozlišením verze z <file>configure.ac</file> a <file>Makefile.am</file></desc>
Packit 1470ea
Packit 1470ea
      AC_CONFIG_FILES([
Packit 1470ea
libknihovna/knihovna-$KNIHOVNA_API_VERSION.pc:libknihovna/knihovna.pc.in
Packit 1470ea
],[],
Packit 1470ea
[KNIHOVNA_API_VERSION='$KNIHOVNA_API_VERSION'])
Packit 1470ea
Packit 1470ea
      # Všimněte si, že soubor s šablonou se nazývá library.pc.in, ale generuje se
Packit 1470ea
# soubor .pc s číslem verze pomocí stejné magie, jako v AC_CONFIG_FILES.
Packit 1470ea
pkgconfigdir = $(libdir)/pkgconfig
Packit 1470ea
pkgconfig_DATA = libknihovna/knihovna-$(KNIHOVNA_API_VERSION).pc
Packit 1470ea
Packit 1470ea
DISTCLEANFILES += $(pkgconfig_DATA)
Packit 1470ea
EXTRA_DIST += libknihovna/knihovna.pc.in
Packit 1470ea
    </listing>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="configuration-files">
Packit 1470ea
    <title>Soubory s nastavením</title>
Packit 1470ea
Packit 1470ea
    

Z hlediska uživatele je nejlepším přístupem k souborům s nastavením udržovat formát <link xref="api-stability">dopředně i zpětně kompatibilní</link> (obě verze knihovny rozumí právě té stejné syntaxi a sémantice souboru s nastavením). Pak lze použít ten samý soubor s nastavením pro všechny verze knihovny a není potřeba žádné číslování verzí u souborů s nastavením.

Packit 1470ea
Packit 1470ea
    

Pokud to ale dodržet nejde, měly by být soubory s nastavením jednoduše přejmenovány a uživatel musí nastavit každou verzi knihovny zvlášť.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="gettext">
Packit 1470ea
    <title>Překlady pomocí Gettext</title>
Packit 1470ea
Packit 1470ea
    

Jestli používáte pro překlady gettext v kombinaci s autoconf a automake, je normální postup nainstalovat překlady do <file>/usr/share/locale/jazyk/LC_MESSAGES/balíček</file>. Údaj baliček musíte změnit na správný název. Podle zvyklostí používaných v GNOME se to celé vloží do <file>configure.ac</file>:

Packit 1470ea
Packit 1470ea
    GETTEXT_PACKAGE=foo-4
Packit 1470ea
AC_SUBST([GETTEXT_PACKAGE])
Packit 1470ea
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"])
Packit 1470ea
Packit 1470ea
    

Pak použijte GETTEXT_PACKAGE jako název balíčku předaný do bindtextdomain(), textdomain() a dgettext().

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="dbus">
Packit 1470ea
    <title>Rozhraní D-Bus</title>
Packit 1470ea
Packit 1470ea
    

Rozhraní D-Bus je další formou API a podobá se API v C s tím rozdílem, že rozlišení verze se neprovádí při kompilaci, ale za běhu. Číslování verzí rozhraní D-Bus se jinak od API v C nijak neliší: čísla verzí musí být zahrnuta v názvech rozhraní, názvech služeb a v cestách k objektům.

Packit 1470ea
Packit 1470ea
    

Například pro službu org.example.Foo vystavující rozhraní A a B na objektech Controller a Client, by verze 4 a 5 API pro D-Bus vypadala nějak takto:

Packit 1470ea
    <list>
Packit 1470ea
      <title>Názvy služeb</title>
Packit 1470ea
      <item>

org.example.Foo4

</item>
Packit 1470ea
      <item>

org.example.Foo5

</item>
Packit 1470ea
    </list>
Packit 1470ea
    <list>
Packit 1470ea
      <title>Názvy rozhraní</title>
Packit 1470ea
      <item>

org.example.Foo4.InterfaceA

</item>
Packit 1470ea
      <item>

org.example.Foo4.InterfaceB

</item>
Packit 1470ea
      <item>

org.example.Foo5.InterfaceA

</item>
Packit 1470ea
      <item>

org.example.Foo5.InterfaceB

</item>
Packit 1470ea
    </list>
Packit 1470ea
    <list>
Packit 1470ea
      <title>Cesty k objektům</title>
Packit 1470ea
      <item>

/org/example/Foo4/Controller

</item>
Packit 1470ea
      <item>

/org/example/Foo4/Client

</item>
Packit 1470ea
      <item>

/org/example/Foo5/Controller

</item>
Packit 1470ea
      <item>

/org/example/Foo5/Client

</item>
Packit 1470ea
    </list>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="programs">
Packit 1470ea
    <title>Programy, démoni a pomůcky</title>
Packit 1470ea
Packit 1470ea
    

Grafické aplikace obecně nepotřebují být nainstalované ve více verzích, protože na nich nezávisí další moduly. Démoni a pomocné programy ale spolupracují s dalšími částmi systému, a tak číslování verzí v názvech potřebují.

Packit 1470ea
Packit 1470ea
    

Mějme démona a pomocný program:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<file>/usr/libexec/foo-daemon</file>

</item>
Packit 1470ea
      <item>

<file>/usr/bin/foo-lookup-utility</file>

</item>
Packit 1470ea
    </list>
Packit 1470ea
    

Číslo verze pak mohou mít přidělené jako:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<file>/usr/libexec/foo-daemon-4</file>

</item>
Packit 1470ea
      <item>

<file>/usr/bin/foo-lookup-utility-4</file>

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

Můžete nainstalovat symbolický odkaz z <file>/usr/bin/foo-lookup-utility</file> na doporučovanou verzi kopie pomocného programu, aby se pohodlněji používal uživatelům.

Packit 1470ea
  </section>
Packit 1470ea
</page>