aboutsummaryrefslogtreecommitdiff
path: root/doc/contributing.de.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/contributing.de.texi')
-rw-r--r--doc/contributing.de.texi537
1 files changed, 537 insertions, 0 deletions
diff --git a/doc/contributing.de.texi b/doc/contributing.de.texi
new file mode 100644
index 0000000000..6c302ad70d
--- /dev/null
+++ b/doc/contributing.de.texi
@@ -0,0 +1,537 @@
+@node Mitwirken
+@chapter Mitwirken
+
+Dieses Projekt basiert auf Kooperation, daher benötigen wir Ihre Hilfe, um
+es wachsen zu lassen! Bitte kontaktieren Sie uns auf
+@email{guix-devel@@gnu.org} und @code{#guix} im Freenode-IRC-Netzwerk. Wir
+freuen uns auf Ihre Ideen, Fehlerberichte, Patches und alles, was hilfreich
+für das Projekt ist. Besonders willkommen ist Hilfe bei der Erstellung von
+Paketen (@pxref{Paketrichtlinien}).
+
+@cindex Verhaltensregeln, für Mitwirkende
+@cindex Verhaltenskodex für Mitwirkende
+Wir möchten eine angenehme, freundliche und von Belästigungen freie Umgebung
+bereitstellen, so dass jeder Beiträge nach seinen Fähigkeiten leisten
+kann. Zu diesem Zweck verwendet unser Projekt einen »Verhaltenskodex für
+Mitwirkende«, der von @url{http://contributor-covenant.org/} übernommen
+wurde. Eine übersetzte Fassung finden Sie auf
+@url{https://www.contributor-covenant.org/de/version/1/4/code-of-conduct}
+sowie eine mitgelieferte, englische Fassung in der Datei
+@file{CODE-OF-CONDUCT} im Quellbaum.
+
+Von Mitwirkenden wird nicht erwartet, dass sie in Patches oder in der
+Online-Kommunikation ihre echten Namen preisgeben. Sie können einen
+beliebigen Namen oder ein Pseudonym ihrer Wahl verwenden.
+
+@menu
+* Erstellung aus dem Git:: Das Neueste und Beste.
+* Guix vor der Installation ausführen:: Hacker-Tricks.
+* Perfekt eingerichtet:: Die richtigen Werkzeuge.
+* Code-Stil:: Wie Mitwirkende hygienisch arbeiten.
+* Einreichen von Patches:: Teilen Sie Ihre Arbeit.
+@end menu
+
+@node Erstellung aus dem Git
+@section Erstellung aus dem Git
+
+Wenn Sie an Guix selbst hacken wollen, ist es empfehlenswert, dass Sie die
+neueste Version aus dem Git-Softwarebestand verwenden:
+
+@example
+git clone https://git.savannah.gnu.org/git/guix.git
+@end example
+
+Wenn Sie Guix aus einem Checkout erstellen, sind außer den bereits in den
+Installationsanweisungen genannten Paketen weitere nötig
+(@pxref{Voraussetzungen}).
+
+@itemize
+@item @url{http://gnu.org/software/autoconf/, GNU Autoconf};
+@item @url{http://gnu.org/software/automake/, GNU Automake};
+@item @url{http://gnu.org/software/gettext/, GNU Gettext};
+@item @url{http://gnu.org/software/texinfo/, GNU Texinfo};
+@item @url{http://www.graphviz.org/, Graphviz};
+@item @url{http://www.gnu.org/software/help2man/, GNU Help2man (optional)}.
+@end itemize
+
+Der einfachste Weg, eine Entwicklungsumgebung für Guix einzurichten, ist
+natürlich, Guix zu benutzen! Der folgende Befehl startet eine neue Shell, in
+der alle Abhängigkeiten und Umgebungsvariablen bereits eingerichtet sind, um
+an Guix zu arbeiten:
+
+@example
+guix environment guix
+@end example
+
+In @xref{Aufruf von guix environment} finden Sie weitere Informationen zu
+diesem Befehl. Zusätzliche Abhängigkeiten können mit @option{--ad-hoc}
+hinzugefügt werden:
+
+@example
+guix environment guix --ad-hoc help2man git strace
+@end example
+
+Führen Sie @command{./bootstrap} aus, um die Infrastruktur des
+Erstellungssystems mit Autoconf und Automake zu erstellen. Möglicherweise
+erhalten Sie eine Fehlermeldung wie diese:
+
+@example
+configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES
+@end example
+
+@noindent
+Das bedeutet wahrscheinlich, dass Autoconf @file{pkg.m4} nicht finden
+konnte, welches von pkg-config bereitgestellt wird. Stellen Sie sicher, dass
+@file{pkg.m4} verfügbar ist. Gleiches gilt für den von Guile
+bereitgestellten Makrosatz @file{guile.m4}. Wenn Sie beispielsweise Automake
+in @file{/usr/local} installiert haben, würde in @file{/usr/share} nicht
+nach @file{.m4}-Dateien geschaut. In einem solchen Fall müssen Sie folgenden
+Befehl aufrufen:
+
+@example
+export ACLOCAL_PATH=/usr/share/aclocal
+@end example
+
+In @xref{Macro Search Path,,, automake, The GNU Automake Manual} finden Sie
+weitere Informationen.
+
+Dann führen Sie wie gewohnt @command{./configure} aus. Achten Sie darauf,
+@code{--localstatedir=@var{Verzeichnis}} zu übergeben, wobei
+@var{Verzeichnis} der von Ihrer aktuellen Installation verwendete
+@code{localstatedir}-Wert ist (weitere Informationen auf @pxref{Der Store}).
+
+Zum Schluss müssen Sie @code{make check} aufrufen, um die Tests auszuführen
+(@pxref{Die Testsuite laufen lassen}). Falls etwas fehlschlägt, werfen Sie einen
+Blick auf die Installationsanweisungen (@pxref{Installation}) oder senden
+Sie eine E-Mail an @email{guix-devel@@gnu.org, Mailingliste}.
+
+
+@node Guix vor der Installation ausführen
+@section Guix vor der Installation ausführen
+
+Um eine gesunde Arbeitsumgebung zu behalten, ist es hilfreich, die im
+lokalen Quellbaum vorgenommenen Änderungen zunächst zu testen, ohne sie
+tatsächlich zu installieren. So können Sie zwischen Ihrem
+Endnutzer-»Straßenanzug« und Ihrem »Faschingskostüm« unterscheiden.
+
+To that end, all the command-line tools can be used even if you have not run
+@code{make install}. To do that, you first need to have an environment with
+all the dependencies available (@pxref{Erstellung aus dem Git}), and then simply
+prefix each command with @command{./pre-inst-env} (the @file{pre-inst-env}
+script lives in the top build tree of Guix), as in@footnote{The @option{-E}
+flag to @command{sudo} guarantees that @code{GUILE_LOAD_PATH} is correctly
+set such that @command{guix-daemon} and the tools it uses can find the Guile
+modules they need.}:
+
+@example
+$ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild
+$ ./pre-inst-env guix build hello
+@end example
+
+@noindent
+Entsprechend, um eine Guile-Sitzung zu öffnen, die die Guix-Module benutzt:
+
+@example
+$ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))'
+
+;;; ("x86_64-linux")
+@end example
+
+@noindent
+@cindex REPL
+@cindex Lese-Auswerten-Schreiben-Schleife
+@dots{} und auf einer REPL (@pxref{Using Guile Interactively,,, guile, Guile
+Reference Manual}):
+
+@example
+$ ./pre-inst-env guile
+scheme@@(guile-user)> ,use(guix)
+scheme@@(guile-user)> ,use(gnu)
+scheme@@(guile-user)> (define snakes
+ (fold-packages
+ (lambda (package lst)
+ (if (string-prefix? "python"
+ (package-name package))
+ (cons package lst)
+ lst))
+ '()))
+scheme@@(guile-user)> (length snakes)
+$1 = 361
+@end example
+
+Das @command{pre-inst-env}-Skript richtet alle Umgebungsvariablen ein, die
+nötig sind, um dies zu ermöglichen, einschließlich @env{PATH} und
+@env{GUILE_LOAD_PATH}.
+
+Beachten Sie, dass @command{./pre-inst-env guix pull} den lokalen Quellbaum
+@emph{nicht} aktualisiert; es aktualisiert lediglich die symbolische
+Verknüpfung @file{~/.config/guix/current} (@pxref{Aufruf von guix pull}). Um
+Ihren lokalen Quellbaum zu aktualisieren, müssen Sie stattdessen
+@command{git pull} benutzen.
+
+
+@node Perfekt eingerichtet
+@section Perfekt eingerichtet
+
+Um perfekt für das Hacken an Guix eingerichtet zu sein, brauchen Sie an sich
+dasselbe wie um perfekt für das Hacken mit Guile (@pxref{Using Guile in
+Emacs,,, guile, Guile Reference Manual}). Zunächst brauchen Sie mehr als
+ein Textverarbeitungsprogramm, Sie brauchen
+@url{http://www.gnu.org/software/emacs, Emacs}, ermächtigt vom wunderbaren
+@url{http://nongnu.org/geiser/, Geiser}.
+
+Geiser ermöglicht interaktive und inkrementelle Entwicklung aus Emacs
+heraus: Code kann in Puffern kompiliert und ausgewertet werden. Zugang zu
+Online-Dokumentation (Docstrings) steht ebenso zur Verfügung wie
+kontextabhängige Vervollständigung, @kbd{M-.} um zu einer Objektdefinition
+zu springen, eine REPL, um Ihren Code auszuprobieren, und mehr
+(@pxref{Einführung,,, geiser, Geiser User Manual}). Zur bequemen
+Guix-Entwicklung sollten Sie Guiles Ladepfad so ergänzen, dass die
+Quelldateien in Ihrem Checkout gefunden werden.
+
+@lisp
+;; @r{Angenommen das Guix-Checkout ist in ~/src/guix.}
+(with-eval-after-load 'geiser-guile
+ (add-to-list 'geiser-guile-load-path "~/src/guix"))
+@end lisp
+
+Um den Code tatsächlich zu bearbeiten, bietet Emacs schon einen netten
+Scheme-Modus. Aber Sie dürfen auch
+@url{http://www.emacswiki.org/emacs/ParEdit, Paredit} nicht verpassen. Es
+bietet Hilfsmittel, um direkt mit dem Syntaxbaum zu arbeiten, und kann so
+zum Beispiel einen S-Ausdruck hochheben oder ihn umhüllen, ihn verschlucken
+oder den nachfolgenden S-Ausdruck verwerfen, etc.
+
+@cindex Code-Schnipsel
+@cindex Vorlagen
+@cindex Tipparbeit sparen
+Wir bieten auch Vorlagen für häufige Git-Commit-Nachrichten und
+Paketdefinitionen im Verzeichnis @file{etc/snippets}. Diese Vorlagen können
+mit @url{http://joaotavora.github.io/yasnippet/, YASnippet} zusammen benutzt
+werden, um kurze Auslöse-Zeichenketten zu interaktiven Textschnipseln
+umzuschreiben. Vielleicht möchten Sie das Schnipselverzeichnis zu Ihrer
+@var{yas-snippet-dirs}-Variablen in Emacs hinzufügen.
+
+@lisp
+;; @r{Angenommen das Guix-Checkout ist in ~/src/guix.}
+(with-eval-after-load 'yasnippet
+ (add-to-list 'yas-snippet-dirs "~/src/guix/etc/snippets"))
+@end lisp
+
+The commit message snippets depend on @url{https://magit.vc/, Magit} to
+display staged files. When editing a commit message type @code{add}
+followed by @kbd{TAB} to insert a commit message template for adding a
+package; type @code{update} followed by @kbd{TAB} to insert a template for
+updating a package; type @code{https} followed by @kbd{TAB} to insert a
+template for changing the home page URI of a package to HTTPS.
+
+Das Hauptschnipsel für @code{scheme-mode} wird ausgelöst, indem Sie
+@code{package...} gefolgt von @kbd{TAB} eintippen. Dieses Snippet fügt auch
+die Auslöse-Zeichenkette @code{origin...} ein, die danach weiter
+umgeschrieben werden kann. Das @code{origin}-Schnipsel kann wiederum andere
+Auslöse-Zeichenketten einfügen, die alle auf @code{...} enden, was selbst
+wieder weiter umgeschrieben werden kann.
+
+
+@node Code-Stil
+@section Code-Stil
+
+Im Allgemeinen folgt unser Code den GNU Coding Standards (@pxref{Top,,,
+standards, GNU Coding Standards}). Da diese aber nicht viel über Scheme zu
+sagen haben, folgen hier einige zusätzliche Regeln.
+
+@menu
+* Programmierparadigmen:: Wie Sie Ihre Elemente zusammenstellen.
+* Module:: Wo Sie Ihren Code unterbringen.
+* Datentypen und Mustervergleich:: Implementierung von Datenstrukturen.
+* Formatierung von Code:: Schreibkonventionen.
+@end menu
+
+@node Programmierparadigmen
+@subsection Programmierparadigmen
+
+Scheme-Code wird in Guix auf rein funktionale Weise geschrieben. Eine
+Ausnahme ist Code, der mit Ein- und Ausgabe zu tun hat, und Prozeduren, die
+grundlegende Konzepte implementieren, wie zum Beispiel die Prozedur
+@code{memoize}.
+
+@node Module
+@subsection Module
+
+Guile-Module, die beim Erstellen nutzbar sein sollen, müssen im Namensraum
+@code{(guix build @dots{})} leben. Sie dürfen auf keine anderen Guix- oder
+GNU-Modules Bezug nehmen. Jedoch ist es in Ordnung, wenn ein »wirtsseitiges«
+Modul ein erstellungsseitiges Modul benutzt.
+
+Module, die mit dem weiteren GNU-System zu tun haben, sollten im Namensraum
+@code{(gnu @dots{})} und nicht in @code{(guix @dots{})} stehen.
+
+@node Datentypen und Mustervergleich
+@subsection Datentypen und Mustervergleich
+
+Im klassischen Lisp gibt es die Tendenz, Listen zur Darstellung von allem zu
+benutzen, und diese dann »händisch« zu durchlaufen mit @code{car},
+@code{cdr}, @code{cadr} und so weiter. Dieser Stil ist aus verschiedenen
+Gründen problematisch, insbesondere wegen der Tatsache, dass er schwer zu
+lesen, schnell fehlerbehaftet und ein Hindernis beim Melden von Typfehlern
+ist.
+
+Guix-Code sollte angemessene Datentypen definieren (zum Beispiel mit
+@code{define-record-type*}) statt Listen zu missbrauchen. Außerdem sollte er
+das @code{(ice-9 match)}-Modul von Guile zum Mustervergleich benutzen,
+besonders mit Listen.
+
+@node Formatierung von Code
+@subsection Formatierung von Code
+
+@cindex Formatierung von Code
+@cindex Code-Stil
+Beim Schreiben von Scheme-Code halten wir uns an die üblichen
+Gepflogenheiten unter Scheme-Programmierern. Im Allgemeinen bedeutet das,
+dass wir uns an @url{http://mumble.net/~campbell/scheme/style.txt,
+Riastradh's Lisp Style Rules} halten. Es hat sich ergeben, dass dieses
+Dokument auch die Konventionen beschreibt, die im Code von Guile
+hauptsächlich verwendet werden. Es ist gut durchdacht und schön geschrieben,
+also lesen Sie es bitte.
+
+Ein paar in Guix eingeführte Sonderformen, wie zum Beispiel das
+@code{substitute*}-Makro, haben abweichende Regeln für die Einrückung. Diese
+sind in der Datei @file{.dir-locals.el} definiert, die Emacs automatisch
+benutzt. Beachten Sie auch, dass Emacs-Guix einen Modus namens
+@code{guix-devel-mode} bereitstellt, der Guix-Code richtig einrückt und
+hervorhebt (@pxref{Development,,, emacs-guix, The Emacs-Guix Reference
+Manual}).
+
+@cindex Einrückung, Code-
+@cindex Formatierung, Code-
+Falls Sie nicht Emacs verwenden, sollten Sie sicherstellen, dass Ihr Editor
+diese Regeln kennt. Um eine Paketdefinition automatisch einzurücken, können
+Sie auch Folgendes ausführen:
+
+@example
+./etc/indent-code.el gnu/packages/@var{Datei}.scm @var{Paket}
+@end example
+
+@noindent
+Dadurch wird die Definition von @var{Paket} in
+@file{gnu/packages/@var{Datei}.scm} automatisch eingerückt, indem Emacs im
+Batch-Modus läuft. Um die Einrückung in einer gesamten Datei vorzunehmen,
+lassen Sie das zweite Argument weg:
+
+@example
+./etc/indent-code.el gnu/services/@var{Datei}.scm
+@end example
+
+@cindex Vim, zum Editieren von Scheme-Code
+Wenn Sie mit Code mit Vim bearbeiten, empfehlen wir, dass Sie @code{:set
+autoindent} ausführen, damit Ihr Code automatisch eingerückt wird, während
+Sie ihn schreiben. Außerdem könnte Ihnen
+@uref{https://www.vim.org/scripts/script.php?script_id=3998,
+@code{paredit.vim}} dabei helfen, mit all diesen Klammern fertigzuwerden.
+
+Wir fordern von allen Prozeduren auf oberster Ebene, dass sie über einen
+Docstring verfügen. Diese Voraussetzung kann jedoch bei einfachen, privaten
+Prozeduren im Namensraum @code{(guix build @dots{})} aufgeweicht werden.
+
+Prozeduren sollten nicht mehr als vier positionsbestimmte Parameter
+haben. Benutzen Sie Schlüsselwort-Parameter für Prozeduren, die mehr als
+vier Parameter entgegennehmen.
+
+
+@node Einreichen von Patches
+@section Einreichen von Patches
+
+Die Entwicklung wird mit Hilfe des verteilten Versionskontrollsystems Git
+durchgeführt. Daher ist eine ständige Verbindung zum Repository nicht
+unbedingt erforderlich. Wir begrüßen Beiträge in Form von Patches, die
+mittels @code{git format-patch} erstellt und an die Mailingliste
+@email{guix-patches@@gnu.org} geschickt werden.
+
+Diese Mailing-Liste setzt auf einer Debbugs-Instanz auf, die zugänglich ist
+unter @uref{https://bugs.gnu.org/guix-patches}, wodurch wir den Überblick
+über Eingereichtes behalten können. Jede an diese Mailing-Liste gesendete
+Nachricht bekommt eine neue Folgenummer zugewiesen, so dass man eine
+Folge-Email zur Einreichung an @code{@var{NNN}@@debbugs.gnu.org} senden
+kann, wobei @var{NNN} für die Folgenummer steht (@pxref{Senden einer Patch-Reihe}).
+
+Bitte schreiben Sie Commit-Logs im ChangeLog-Format (@pxref{Change Logs,,,
+standards, GNU Coding Standards}); dazu finden Sie Beispiele unter den
+bisherigen Commits.
+
+Bevor Sie einen Patch einreichen, der eine Paketdefinition hinzufügt oder
+verändert, gehen Sie bitte diese Prüfliste:
+
+@enumerate
+@item
+Wenn die Autoren der verpackten Software eine kryptographische Signatur für
+den Tarball der Veröffentlichung anbieten, so machen Sie sich bitte die
+Mühe, die Echtheit des Archivs zu überprüfen. Für eine abgetrennte
+GPG-Signaturdatei würden Sie das mit dem Befehl @code{gpg --verify} tun.
+
+@item
+Nehmen Sie sich die Zeit, eine passende Zusammenfassung und Beschreibung für
+das Paket zu verfassen. Unter @xref{Zusammenfassungen und Beschreibungen} finden Sie
+dazu einige Richtlinien.
+
+@item
+Verwenden Sie @code{guix lint @var{Paket}}, wobei @var{Paket} das neue oder
+geänderte Paket bezeichnet, und beheben Sie alle gemeldeten Fehler
+(@pxref{Aufruf von guix lint}).
+
+@item
+Stellen Sie sicher, dass das Paket auf Ihrer Plattform erstellt werden kann,
+indem Sie @code{guix build @var{Paket}} ausführen.
+
+@item
+@cindex gebündelt
+Achten Sie darauf, dass im Paket keine Software gebündelt mitgeliefert wird,
+die bereits in separaten Paketen zur Verfügung steht.
+
+Manchmal enthalten Pakete Kopien des Quellcodes ihrer Abhängigkeiten, um
+Nutzern die Installation zu erleichtern. Als eine Distribution wollen wir
+jedoch sicherstellen, dass für solche Pakete die schon in der Distribution
+verfügbare Fassung benutzen, sofern es eine gibt. Dadurch wird sowohl der
+Ressourcenverbrauch optimiert (die Abhängigkeit wird so nur einmal erstellt
+und gespeichert) als auch der Distribution die Möglichkeit gegeben,
+ergänzende Änderungen durchzuführen, um beispielsweise
+Sicherheitsaktualisierungen für ein bestimmtes Paket an nur einem Ort
+einzuspielen, die das gesamte System betreffen — gebündelt mitgelieferte
+Kopien würden dies verhindern.
+
+@item
+Schauen Sie sich das von @command{guix size} ausgegebene Profil an
+(@pxref{Aufruf von guix size}). Dadurch können Sie Referenzen auf andere
+Pakete finden, die ungewollt vorhanden sind. Dies kann auch dabei helfen, zu
+entscheiden, ob das Paket aufgespalten werden sollte (@pxref{Pakete mit mehreren Ausgaben.}) und welche optionalen Abhängigkeiten verwendet werden
+sollten.
+
+@item
+Achten Sie bei wichtigen Änderungen darauf, dass abhängige Pakete (falls
+vorhanden) nicht von der Änderung beeinträchtigt werden; @code{guix refresh
+--list-dependent @var{Paket}} hilft Ihnen dabei (@pxref{Aufruf von guix refresh}).
+
+@c ===========================================================================
+@c
+@c This file was generated with po4a. Translate the source file.
+@c
+@c ===========================================================================
+@c See <https://lists.gnu.org/archive/html/guix-devel/2016-10/msg00933.html>.
+@cindex Branching-Strategie
+@cindex Neuerstellungs-Zeitplan
+Je nachdem, wieviele abhängige Pakete es gibt, und entsprechend wieviele
+Neuerstellungen dadurch nötig würden, finden Commits auf anderen Branches
+statt, nach ungefähr diesen Regeln:
+
+@table @asis
+@item 300 abhängige Pakete oder weniger
+@code{master}-Branch (störfreie Änderungen).
+
+@item zwischen 300 und 1200 abhängige Pakete
+@code{staging}-Branch (störfreie Änderungen). Dieser Branch wird circa alle
+3 Wochen in @code{master} gemerget. Themenbezogene Änderungen (z.B. eine
+Aktualisierung der GNOME-Plattform) können stattdessen auch auf einem
+eigenen Branch umgesetzt werden (wie @code{gnome-updates}).
+
+@item mehr als 1200 abhängige Pakete
+@code{core-updates}-Branch (kann auch größere und womöglich andere Software
+beeinträchtigende Änderungen umfassen). Dieser Branch wird planmäßig in
+@code{master} alle 2,5 Monate oder so gemerget.
+@end table
+
+All diese Branches werden kontinuierlich
+@uref{https://hydra.gnu.org/project/gnu, auf unserer Build-Farm} erstellt
+und in @code{master} gemerget, sobald alles erfolgreich erstellt worden
+ist. Dadurch können wir Probleme beheben, bevor sie bei Nutzern auftreten,
+und zudem das Zeitfenster, während dessen noch keine vorerstellten
+Binärdateien verfügbar sind, verkürzen.
+
+@c TODO: It would be good with badges on the website that tracks these
+@c branches. Or maybe even a status page.
+Im Allgemeinen werden Branches außer @code{master} als @emph{unveränderlich}
+angesehen, wenn sie kürzlich ausgewertet wurden oder ein entsprechender
+@code{-next}-Branch existiert. Bitte fragen Sie auf der Mailing-Liste oder
+IRC, wenn Sie sich nicht sicher sind, wo ein Patch eingespielt werden
+sollte.
+
+@item
+@cindex Determinismus, von Erstellungsprozessen
+@cindex Reproduzierbare Erstellungen, Überprüfung
+Überprüfen Sie, ob der Erstellungsprozess deterministisch ist. Dazu prüfen
+Sie typischerweise, ob eine unabhängige Erstellung des Pakets genau dasselbe
+Ergebnis wie Ihre Erstellung hat, Bit für Bit.
+
+Dies können Sie leicht tun, indem Sie dasselbe Paket mehrere Male
+hintereinander auf Ihrer Maschine erstellen (@pxref{Aufruf von guix build}):
+
+@example
+guix build --rounds=2 mein-paket
+@end example
+
+Dies reicht aus, um eine ganze Klasse häufiger Ursachen von
+Nichtdeterminismus zu finden, wie zum Beispiel Zeitstempel oder
+zufallsgenerierte Ausgaben im Ergebnis der Erstellung.
+
+Eine weitere Möglichkeit ist, @command{guix challenge} (@pxref{Aufruf von guix challenge}) zu benutzen. Sie können es ausführen, sobald ein Paket commitet
+und von @code{hydra.gnu.org} erstellt wurde, um zu sehen, ob dort dasselbe
+Ergebnis wie bei Ihnen geliefert wurde. Noch besser: Finden Sie eine andere
+Maschine, die das Paket erstellen kann, und führen Sie @command{guix
+publish} aus. Da sich die entfernte Erstellungsmaschine wahrscheinlich von
+Ihrer unterscheidet, können Sie auf diese Weise Probleme durch
+Nichtdeterminismus erkennen, die mit der Hardware zu tun haben — zum
+Beispiel die Nutzung anderer Befehlssatzerweiterungen — oder mit dem
+Betriebssystem-Kernel — zum Beispiel, indem @code{uname} oder
+@file{/proc}-Dateien verwendet werden.
+
+@item
+Beim Schreiben von Dokumentation achten Sie bitte auf eine
+geschlechtsneutrale Wortwahl, wenn Sie sich auf Personen beziehen, wie
+@uref{https://en.wikipedia.org/wiki/Singular_they, »they«@comma{}
+»their«@comma{} »them« im Singular}, und so weiter.
+
+@item
+Stelllen Sie sicher, dass Ihr Patch nur einen Satz zusammengehöriger
+Änderungen umfasst. Das Zusammenfassen nicht zusammengehöriger Änderungen
+erschwert und bremst das Durchsehen Ihres Patches.
+
+Beispiele für nicht zusammengehörige Änderungen sind das Hinzufügen mehrerer
+Pakete auf einmal, oder das Aktualisieren eines Pakets auf eine neue Version
+zusammen mit Fehlerbehebungen für das Paket.
+
+@item
+Bitte befolgen Sie unsere Richtlinien für die Code-Formatierung, womöglich
+wollen Sie dies automatisch tun lassen durch das Skript
+@command{etc/indent-code.el} (@pxref{Formatierung von Code}).
+
+@item
+When possible, use mirrors in the source URL (@pxref{Aufruf von guix download}). Use reliable URLs, not generated ones. For instance, GitHub
+archives are not necessarily identical from one generation to the next, so
+in this case it's often better to clone the repository. Don't use the
+@command{name} field in the URL: it is not very useful and if the name
+changes, the URL will probably be wrong.
+
+@end enumerate
+
+Bitte benutzen Sie @samp{[PATCH] @dots{}} als Betreff, wenn Sie einen Patch
+an die Mailing-Liste schicken. Sie können dazu Ihr E-mail-Programm oder den
+Befehl @command{git send-email} benutzen (@pxref{Senden einer Patch-Reihe}). Wir bevorzugen es, Patches als reine Textnachrichten zu erhalten,
+entweder eingebettet (inline) oder als MIME-Anhänge. Sie sind dazu
+angehalten, zu überprüfen, ob Ihr Mail-Programm solche Dinge wie
+Zeilenumbrüche oder die Einrückung verändert, wodurch die Patches womöglich
+nicht mehr funktionieren.
+
+Wenn dadurch ein Fehler behoben wurde, schließen Sie bitte den Thread, indem
+Sie eine E-mail an @email{@var{NNN}-done@@debbugs.gnu.org} senden.
+
+@unnumberedsubsec Senden einer Patch-Reihe
+@anchor{Senden einer Patch-Reihe}
+@cindex Patch-Reihe
+@cindex @code{git send-email}
+@cindex @code{git-send-email}
+
+@c Debbugs bug: https://debbugs.gnu.org/db/15/15361.html
+Wenn Sie eine Patch-Reihe senden (z.B. mit @code{git send-email}), schicken
+Sie bitte als Erstes eine Nachricht an @email{guix-patches@@gnu.org} und
+dann nachfolgende Patches an @email{@var{NNN}@@debbugs.gnu.org}, um
+sicherzustellen, dass sie zusammen bearbeitet werden. Siehe
+@uref{https://debbugs.gnu.org/Advanced.html, die Debbugs-Dokumentation} für
+weitere Informationen.