guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/45: Add the beginnings of a RepPar 2015 paper.


From: Ludovic Courtès
Subject: 02/45: Add the beginnings of a RepPar 2015 paper.
Date: Tue, 09 Jun 2015 12:36:58 +0000

civodul pushed a commit to branch master
in repository maintenance.

commit 84491fbd88ebbb2508f62f03426abd487bf22235
Author: Ludovic Courtès <address@hidden>
Date:   Thu May 28 23:36:45 2015 +0200

    Add the beginnings of a RepPar 2015 paper.
---
 .gitignore                             |    5 +
 doc/reppar-2015/code/manifest.scm      |    9 +
 doc/reppar-2015/code/my-openmpi.scm    |   37 +
 doc/reppar-2015/code/query-package.scm |   13 +
 doc/reppar-2015/llncs.cls              | 1208 ++++++++++++++++++++++++++++++++
 doc/reppar-2015/outline.org            |  168 +++++
 doc/reppar-2015/reproducible-hpc.skb   |  441 ++++++++++++
 7 files changed, 1881 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore
index 8eb754f..56e2a7b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,8 @@
 /talks/fosdem-2015/guix-fosdem-2015.snm
 /talks/fosdem-2015/guix-fosdem-2015.toc
 /talks/fosdem-2015/guix-fosdem-2015.vrb
+/doc/reppar-2015/reproducible-hpc.aux
+/doc/reppar-2015/reproducible-hpc.log
+/doc/reppar-2015/reproducible-hpc.out
+/doc/reppar-2015/reproducible-hpc.pdf
+/doc/reppar-2015/reproducible-hpc.tex
diff --git a/doc/reppar-2015/code/manifest.scm 
b/doc/reppar-2015/code/manifest.scm
new file mode 100644
index 0000000..2f768a9
--- /dev/null
+++ b/doc/reppar-2015/code/manifest.scm
@@ -0,0 +1,9 @@
+;; This file can be passed to 'guix package --manifest' to
+;; reproduce a profile with the given list of packages.
+
+(use-modules (gnu packages base)
+             (gnu packages gcc)
+             (my-openmpi))
+
+(packages->manifest
+ (list glibc-utf8-locales gnu-make gcc-toolchain openmpi))
diff --git a/doc/reppar-2015/code/my-openmpi.scm 
b/doc/reppar-2015/code/my-openmpi.scm
new file mode 100644
index 0000000..c1cb4c7
--- /dev/null
+++ b/doc/reppar-2015/code/my-openmpi.scm
@@ -0,0 +1,37 @@
+(define-module (my-openmpi)
+  #:use-module (guix)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix licenses)
+  #:use-module (guix utils)
+  #:use-module (gnu packages pkg-config)
+  #:use-module ((gnu packages gcc) #:select (gfortran-4.8))
+  #:use-module ((gnu packages mpi) #:select (hwloc))
+  #:export (openmpi))
+
+(define openmpi
+  (package
+    (name "openmpi")
+    (version "1.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://www.open-mpi.org/software/ompi/v";
+                    (version-major+minor version)
+                    "/downloads/openmpi-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "13z1q69f3qwmmhpglarfjminfy2yw4rfqr9jydjk5507q3mjf50p"))))
+    (build-system gnu-build-system)           ;!recipe-build-system
+    (inputs `(("hwloc" ,hwloc)                ;!recipe-inputs
+              ("gfortran" ,gfortran-4.8)
+              ("pkg-config" ,pkg-config)))
+    (arguments
+     '(#:configure-flags `("--enable-oshmem"
+                           "--with-devel-headers"
+                           ,(string-append
+                             "--with-hwloc="
+                             (assoc-ref %build-inputs "hwloc")))))
+    (home-page "http://www.open-mpi.org";)
+    (synopsis "MPI-2 implementation")
+    (description "This is an MPI-2 implementation etc.")
+    (license bsd-2)))
diff --git a/doc/reppar-2015/code/query-package.scm 
b/doc/reppar-2015/code/query-package.scm
new file mode 100644
index 0000000..66c03a6
--- /dev/null
+++ b/doc/reppar-2015/code/query-package.scm
@@ -0,0 +1,13 @@
+(define-module (query-package)
+  #:use-module (my-openmpi)
+  #:use-module (guix)
+  #:use-module (ice-9 match))
+
+;;!start
+;; Query the direct and indirect inputs of Open MPI.
+;; Each input is represented by a label/package tuple;
+;; we are only interested in the package object here.
+(map (match-lambda
+       ((label package)
+        (package-full-name package)))
+     (package-transitive-inputs openmpi))
diff --git a/doc/reppar-2015/llncs.cls b/doc/reppar-2015/llncs.cls
new file mode 100644
index 0000000..40eae17
--- /dev/null
+++ b/doc/reppar-2015/llncs.cls
@@ -0,0 +1,1208 @@
+% LLNCS DOCUMENT CLASS -- version 2.19 (31-Mar-2014)
+% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science
+%
+%%
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesClass{llncs}[2014/03/31 v2.19
+^^J LaTeX document class for Lecture Notes in Computer Science]
+% Options
address@hidden
address@hidden
+\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y}
+\DeclareOption{oribibl}{\let\oribibl=Y}
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
address@hidden
address@hidden
+
+% languages
+\let\switcht@@therlang\relax
address@hidden@@address@hidden
address@hidden@@address@hidden
+
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+
+\ProcessOptions
+
+\LoadClass[twoside]{article}
+\RequirePackage{multicol} % needed for the list of participants, index
+\RequirePackage{aliascnt}
+
+\setlength{\textwidth}{12.2cm}
+\setlength{\textheight}{19.3cm}
address@hidden
address@hidden
+%
address@hidden
+  \ifnum #1>address@hidden \else
+    \vskip \z@ address@hidden@
+    {\leftskip #2\relax \rightskip address@hidden \advance\rightskip by 0pt 
plus 2cm
+               \parfillskip -\rightskip \pretolerance=10000
+     \parindent address@hidden
+     address@hidden
+     \leavevmode
+     address@hidden #3\relax
+     \advance\leftskip address@hidden \null\nobreak\hskip -\leftskip
+     {#4}\nobreak
+     address@hidden
+        \mkern address@hidden mu\hbox{.}\mkern address@hidden
+        mu$}\hfill
+     \nobreak
+     address@hidden@address@hidden \normalcolor #5}%
+     \par}%
+  \fi}
+%
address@hidden
+\def\abstractname{Abstract.}%
+\def\ackname{Acknowledgement.}%
+\def\andname{and}%
+\def\lastandname{\unskip, and}%
+\def\appendixname{Appendix}%
+\def\chaptername{Chapter}%
+\def\claimname{Claim}%
+\def\conjecturename{Conjecture}%
+\def\contentsname{Table of Contents}%
+\def\corollaryname{Corollary}%
+\def\definitionname{Definition}%
+\def\examplename{Example}%
+\def\exercisename{Exercise}%
+\def\figurename{Fig.}%
+\def\keywordname{{\bf Keywords:}}%
+\def\indexname{Index}%
+\def\lemmaname{Lemma}%
+\def\contriblistname{List of Contributors}%
+\def\listfigurename{List of Figures}%
+\def\listtablename{List of Tables}%
+\def\mailname{{\it Correspondence to\/}:}%
+\def\noteaddname{Note added in proof}%
+\def\notename{Note}%
+\def\partname{Part}%
+\def\problemname{Problem}%
+\def\proofname{Proof}%
+\def\propertyname{Property}%
+\def\propositionname{Proposition}%
+\def\questionname{Question}%
+\def\remarkname{Remark}%
+\def\seename{see}%
+\def\solutionname{Solution}%
+\def\subclassname{{\it Subject Classifications\/}:}%
+\def\tablename{Table}%
+\def\theoremname{Theorem}}
address@hidden
+% Names of theorem like environments are already defined
+% but must be translated if another language is chosen
+%
+% French section
address@hidden parle francais.}%
+ \def\abstractname{R\'esum\'e.}%
+ \def\ackname{Remerciements.}%
+ \def\andname{et}%
+ \def\lastandname{ et}%
+ \def\appendixname{Appendice}%
+ \def\chaptername{Chapitre}%
+ \def\claimname{Pr\'etention}%
+ \def\conjecturename{Hypoth\`ese}%
+ \def\contentsname{Table des mati\`eres}%
+ \def\corollaryname{Corollaire}%
+ \def\definitionname{D\'efinition}%
+ \def\examplename{Exemple}%
+ \def\exercisename{Exercice}%
+ \def\figurename{Fig.}%
+ \def\keywordname{{\bf Mots-cl\'e:}}%
+ \def\indexname{Index}%
+ \def\lemmaname{Lemme}%
+ \def\contriblistname{Liste des contributeurs}%
+ \def\listfigurename{Liste des figures}%
+ \def\listtablename{Liste des tables}%
+ \def\mailname{{\it Correspondence to\/}:}%
+ \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}%
+ \def\notename{Remarque}%
+ \def\partname{Partie}%
+ \def\problemname{Probl\`eme}%
+ \def\proofname{Preuve}%
+ \def\propertyname{Caract\'eristique}%
+%\def\propositionname{Proposition}%
+ \def\questionname{Question}%
+ \def\remarkname{Remarque}%
+ \def\seename{voir}%
+ \def\solutionname{Solution}%
+ \def\subclassname{{\it Subject Classifications\/}:}%
+ \def\tablename{Tableau}%
+ \def\theoremname{Th\'eor\`eme}%
+}
+%
+% German section
address@hidden spricht deutsch.}%
+ \def\abstractname{Zusammenfassung.}%
+ \def\ackname{Danksagung.}%
+ \def\andname{und}%
+ \def\lastandname{ und}%
+ \def\appendixname{Anhang}%
+ \def\chaptername{Kapitel}%
+ \def\claimname{Behauptung}%
+ \def\conjecturename{Hypothese}%
+ \def\contentsname{Inhaltsverzeichnis}%
+ \def\corollaryname{Korollar}%
+%\def\definitionname{Definition}%
+ \def\examplename{Beispiel}%
+ \def\exercisename{\"Ubung}%
+ \def\figurename{Abb.}%
+ \def\keywordname{{\bf Schl\"usselw\"orter:}}%
+ \def\indexname{Index}%
+%\def\lemmaname{Lemma}%
+ \def\contriblistname{Mitarbeiter}%
+ \def\listfigurename{Abbildungsverzeichnis}%
+ \def\listtablename{Tabellenverzeichnis}%
+ \def\mailname{{\it Correspondence to\/}:}%
+ \def\noteaddname{Nachtrag}%
+ \def\notename{Anmerkung}%
+ \def\partname{Teil}%
+%\def\problemname{Problem}%
+ \def\proofname{Beweis}%
+ \def\propertyname{Eigenschaft}%
+%\def\propositionname{Proposition}%
+ \def\questionname{Frage}%
+ \def\remarkname{Anmerkung}%
+ \def\seename{siehe}%
+ \def\solutionname{L\"osung}%
+ \def\subclassname{{\it Subject Classifications\/}:}%
+ \def\tablename{Tabelle}%
+%\def\theoremname{Theorem}%
+}
+
+% Ragged bottom for the actual page
address@hidden@ plus.0001fil
address@hidden
+
+\renewcommand\small{%
+   address@hidden@ixpt{11}%
+   \abovedisplayskip 8.5\p@ address@hidden@ address@hidden@
+   \abovedisplayshortskip \z@ address@hidden@
+   \belowdisplayshortskip 4\p@ address@hidden@ address@hidden@
+   address@hidden
+               \parsep 0\p@ address@hidden@ address@hidden@
+               \topsep 8\p@ address@hidden@ address@hidden@
+               address@hidden
+   \belowdisplayskip \abovedisplayskip
+}
+
+\frenchspacing
+\widowpenalty=10000
+\clubpenalty=10000
+
+\setlength\oddsidemargin   address@hidden
+\setlength\evensidemargin  address@hidden
+\setlength\marginparwidth  address@hidden
+
+\setlength\headsep   address@hidden
+
address@hidden
address@hidden 2\p@ address@hidden address@hidden
+\setlength\intextsep   address@hidden 2\p@ address@hidden address@hidden
+
+\setcounter{secnumdepth}{2}
+
+\newcounter {chapter}
+\renewcommand\thechapter      address@hidden@chapter}
+
address@hidden address@hidden
+\newcommand\frontmatter{\cleardoublepage
+            address@hidden
+\newcommand\mainmatter{\cleardoublepage
+       address@hidden
address@hidden
+      address@hidden
+
+\renewcommand\part{\cleardoublepage
+                 \thispagestyle{empty}%
+                 address@hidden
+                     \onecolumn
+                     address@hidden
+                   \else
+                     address@hidden
+                 \fi
+                 \null\vfil
+                 address@hidden@spart}
+
address@hidden
+    \ifnum address@hidden >-2\relax
+      \refstepcounter{part}%
+      \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+    \else
+      \addcontentsline{toc}{part}{#1}%
+    \fi
+    \markboth{}{}%
+    {\centering
+     \interlinepenalty address@hidden
+     \normalfont
+     \ifnum address@hidden >-2\relax
+       \huge\bfseries \partname~\thepart
+       \par
+       \vskip 20\p@
+     \fi
+     \Huge \bfseries #2\par}%
+    address@hidden
address@hidden
+    {\centering
+     \interlinepenalty address@hidden
+     \normalfont
+     \Huge \bfseries #1\par}%
+    address@hidden
address@hidden
+              address@hidden
+                \null
+                \thispagestyle{empty}%
+                \newpage
+              \fi
+              address@hidden
+                \twocolumn
+              \fi}
+
+\newcommand\chapter{\clearpage
+                    \thispagestyle{empty}%
+                    address@hidden@
+                    address@hidden
+                    address@hidden@schapter}
address@hidden address@hidden >address@hidden
+                       address@hidden
+                         \refstepcounter{chapter}%
+                         address@hidden
+                         \addcontentsline{toc}{chapter}%
+                                  {\protect\numberline{\thechapter}#1}%
+                       \else
+                         \addcontentsline{toc}{chapter}{#1}%
+                       \fi
+                    \else
+                      \addcontentsline{toc}{chapter}{#1}%
+                    \fi
+                    \chaptermark{#1}%
+                    address@hidden
+                    address@hidden
+                    address@hidden
+                      address@hidden@makechapterhead{#2}]%
+                    \else
+                      address@hidden
+                      address@hidden
+                    \fi}
address@hidden
+% address@hidden
+  {\centering
+    \ifnum address@hidden >address@hidden
+      address@hidden
+        \large\bfseries address@hidden \thechapter
+        \par\nobreak
+        \vskip 20\p@
+      \fi
+    \fi
+    address@hidden
+    \Large \bfseries #1\par\nobreak
+    \vskip 40\p@
+  }}
address@hidden@twocolumn
+                   address@hidden@makeschapterhead{#1}]%
+                 \else
+                   address@hidden
+                   address@hidden
+                 \fi}
address@hidden
+% address@hidden
+  {\centering
+    \normalfont
+    address@hidden
+    \Large \bfseries  #1\par\nobreak
+    \vskip 40\p@
+  }}
+
address@hidden@}%
+                       {-18\p@ address@hidden -4\p@ address@hidden 
address@hidden
+                       {12\p@ address@hidden 4\p@ address@hidden address@hidden
+                       {\normalfont\large\bfseries\boldmath
+                        \rightskip=\z@ address@hidden 8em\pretolerance=10000 }}
address@hidden@}%
+                       {-18\p@ address@hidden -4\p@ address@hidden 
address@hidden
+                       {8\p@ address@hidden 4\p@ address@hidden address@hidden
+                       {\normalfont\normalsize\bfseries\boldmath
+                        \rightskip=\z@ address@hidden 8em\pretolerance=10000 }}
address@hidden@}%
+                       {-18\p@ address@hidden -4\p@ address@hidden 
address@hidden
+                       {-0.5em address@hidden -0.22em address@hidden -0.1em}%
+                       {\normalfont\normalsize\bfseries\boldmath}}
address@hidden@}%
+                       {-12\p@ address@hidden -4\p@ address@hidden 
address@hidden
+                       {-0.5em address@hidden -0.22em address@hidden -0.1em}%
+                       {\normalfont\normalsize\itshape}}
+\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use
+                  \string\subparagraph\space with this class}\vskip0.5cm
+You should not use \verb|\subparagraph| with this class.\vskip0.5cm}
+
+\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00}
+\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01}
+\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02}
+\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03}
+\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04}
+\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05}
+\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06}
+\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07}
+\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08}
+\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09}
+\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A}
+
+\let\footnotesize\small
+
address@hidden
+\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}}
+{\mbox{\boldmath$\textstyle#1$}}
+{\mbox{\boldmath$\scriptstyle#1$}}
+{\mbox{\boldmath$\scriptscriptstyle#1$}}}
+\fi
+
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.8pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.3pt}<\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle     \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle        \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle      \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}}
+
+\let\ts\,
+
+\setlength\leftmargini  address@hidden
+\setlength\leftmargin    {\leftmargini}
+\setlength\leftmarginii  {\leftmargini}
+\setlength\leftmarginiii {\leftmargini}
+\setlength\leftmarginiv  {\leftmargini}
+\setlength  \labelsep  {.5em}
+\setlength  \labelwidth{\leftmargini}
+\addtolength\labelwidth{-\labelsep}
+
address@hidden
+            \parsep 0\p@ address@hidden@ address@hidden@
+            \topsep 8\p@ address@hidden@ address@hidden@
+            address@hidden
address@hidden@listI
address@hidden
address@hidden {\leftmargin\leftmarginii
+              \labelwidth\leftmarginii
+              \advance\labelwidth-\labelsep
+              \topsep    0\p@ address@hidden@ address@hidden@}
address@hidden
+              \labelwidth\leftmarginiii
+              \advance\labelwidth-\labelsep
+              \topsep    0\p@ address@hidden@address@hidden@
+              \parsep    \z@
+              \partopsep \p@ address@hidden@ address@hidden@}
+
+\renewcommand\labelitemi{\normalfont\bfseries --}
address@hidden
+
address@hidden
address@hidden
+
address@hidden
+                                                    {{\contentsname}}}
+ address@hidden
+ \def\lastand{\ifnum\value{auco}=2\relax
+                 \unskip{} \andname\
+              \else
+                 \unskip \lastandname\
+              \fi}%
+ address@hidden
+          address@hidden
+             \lastand
+          \else
+             \unskip,
+          \fi}%
+ address@hidden@restonecol\twocolumn\fi}
+
address@hidden@secpenalty}%
+   \addvspace{2em address@hidden  % space above part line
+   \begingroup
+     \parindent \z@
+     \rightskip \z@ plus 5em
+     \hrule\vskip5pt
+     \large               % same size as for a contribution heading
+     \bfseries\boldmath   % set line in boldface
+     \leavevmode          % TeX command to enter horizontal mode.
+     #1\par
+     \vskip5pt
+     \hrule
+     \vskip1pt
+     \nobreak             % Never break after part entry
+   \endgroup}
+
address@hidden
+
+\let\phantomsection=\relax
+
address@hidden@undefined\else
+{}\fi}
+
+\def\addnumcontentsmark#1#2#3{%
+\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline
+                     {\thechapter}#3}{\thepage}\hyperhrefextend}}%
+\def\addcontentsmark#1#2#3{%
+\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}%
+\def\addcontentsmarkwop#1#2#3{%
+\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}%
+
address@hidden #1 \or
address@hidden
+  \or    address@hidden
+  \or    address@hidden
+  address@hidden
+}
+\def\addtocmark{%
+\phantomsection
address@hidden@address@hidden
+}
+
address@hidden@highpenalty}
+ \vskip 1.0em plus 1pt address@hidden 1.5em \begingroup
+ \parindent \z@ \rightskip address@hidden
+ \advance\rightskip by 0pt plus 2cm
+ \parfillskip -\rightskip \pretolerance=10000
+ \leavevmode address@hidden \hskip -\leftskip
+ {\large\bfseries\boldmath#1}\ifx0#2\hfil\null
+ \else
+      \nobreak
+      address@hidden \mkern address@hidden mu.\mkern
+      address@hidden mu$}\hfill
+      \nobreak\hbox address@hidden #2}%
+ \fi\par
+ address@hidden \endgroup}
+
address@hidden@highpenalty}
+ \addvspace{8pt plus 1pt}
+ address@hidden \z@
+ \begingroup
+ \parindent \z@ \rightskip address@hidden
+ \advance\rightskip by 0pt plus 2cm
+ \parfillskip -\rightskip \pretolerance=10000
+ \leavevmode address@hidden \hskip -\leftskip
+ #1\nobreak
+ address@hidden \mkern address@hidden mu.\mkern
+ address@hidden mu$}\hfill
+ \nobreak\hbox address@hidden #2}\par
+ address@hidden \endgroup}
+
address@hidden@highpenalty}
+ address@hidden@ %\z@
+ \begingroup
+ \parindent \z@ \rightskip address@hidden
+ \advance\rightskip by 0pt plus 2cm
+ \pretolerance=10000
+ \leavevmode address@hidden %\hskip -\leftskip
+ \textit{#1}\par
+ address@hidden \endgroup}
+
+\setcounter{tocdepth}{0}
+\newdimen\tocchpnum
+\newdimen\tocsecnum
+\newdimen\tocsectotal
+\newdimen\tocsubsecnum
+\newdimen\tocsubsectotal
+\newdimen\tocsubsubsecnum
+\newdimen\tocsubsubsectotal
+\newdimen\tocparanum
+\newdimen\tocparatotal
+\newdimen\tocsubparanum
+\tocchpnum=\z@            % no chapter numbers
+\tocsecnum=15\p@          % section 88. plus 2.222pt
+\tocsubsecnum=23\p@       % subsection 88.8 plus 2.222pt
+\tocsubsubsecnum=27\p@    % subsubsection 88.8.8 plus 1.444pt
+\tocparanum=35\p@         % paragraph 88.8.8.8 plus 1.666pt
+\tocsubparanum=43\p@      % subparagraph 88.8.8.8.8 plus 1.888pt
+\def\calctocindent{%
+\tocsectotal=\tocchpnum
+\advance\tocsectotal by\tocsecnum
+\tocsubsectotal=\tocsectotal
+\advance\tocsubsectotal by\tocsubsecnum
+\tocsubsubsectotal=\tocsubsectotal
+\advance\tocsubsubsectotal by\tocsubsubsecnum
+\tocparatotal=\tocsubsubsectotal
+\advance\tocparatotal by\tocparanum}
+\calctocindent
+
address@hidden@dottedtocline{1}{\tocchpnum}{\tocsecnum}}
address@hidden@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}}
address@hidden@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}}
address@hidden@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}}
address@hidden@dottedtocline{5}{\tocparatotal}{\tocsubparanum}}
+
address@hidden@address@hidden
+ address@hidden
+ address@hidden@restonecol\twocolumn\fi}
address@hidden@dottedtocline{1}{0em}{1.5em}}
+
address@hidden@address@hidden
+ address@hidden
+ address@hidden@restonecol\twocolumn\fi}
address@hidden@figure
+
+\renewcommand\listoffigures{%
+    \section*{\listfigurename
+      address@hidden
+    address@hidden
+    }
+
+\renewcommand\listoftables{%
+    \section*{\listtablename
+      address@hidden
+    address@hidden
+    }
+
+\ifx\oribibl\undefined
+\ifx\citeauthoryear\undefined
+\renewenvironment{thebibliography}[1]
+     {\section*{\refname}
+      address@hidden
+      \small
+      address@hidden@address@hidden
+           address@hidden
+            \leftmargin\labelwidth
+            \advance\leftmargin\labelsep
+            address@hidden
+              \advance\leftmargin\bibindent
+              \itemindent -\bibindent
+              \listparindent \itemindent
+              \parsep \z@
+            \fi
+            \usecounter{enumiv}%
+            address@hidden@empty
+            address@hidden@enumiv}}%
+      address@hidden
+        \renewcommand\newblock{\par}%
+      \else
+        \renewcommand\newblock{\hskip .11em address@hidden address@hidden
+      \fi
+      \sloppy\clubpenalty4000\widowpenalty4000%
+      address@hidden
+     address@hidden
+       address@hidden@warning{Empty `thebibliography' environment}}%
+      \endlist}
address@hidden@filesw
+     {\let\protect\noexpand\immediate
+     address@hidden
address@hidden
address@hidden@address@hidden
+  address@hidden@address@hidden@address@hidden@address@hidden@citeb:=#2\do
+    address@hidden
+       address@hidden@address@hidden@address@hidden@address@hidden,}{\bfseries
+        address@hidden
+       {Citation address@hidden' on page \thepage \space undefined}}%
+    address@hidden@tempcntc0\csname address@hidden@citeb\endcsname\relax}%
+     address@hidden@ address@hidden@address@hidden
+       address@hidden@citea{,}\hbox{\csname address@hidden@citeb\endcsname}%
+     \else
+      address@hidden@ne
+      address@hidden@tempcntc
+      address@hidden@address@hidden
+      address@hidden@address@hidden@address@hidden
address@hidden@tempcnta>address@hidden
+               address@hidden@citea{,\,address@hidden
+               address@hidden@address@hidden
+               address@hidden@address@hidden@tempcntb \else
+                address@hidden
+      address@hidden@address@hidden@address@hidden
+\else
+\renewenvironment{thebibliography}[1]
+     {\section*{\refname}
+      \small
+      \list{}%
+           {\settowidth\labelwidth{}%
+            \leftmargin\parindent
+            \itemindent=-\parindent
+            \labelsep=\z@
+            address@hidden
+              \advance\leftmargin\bibindent
+              \itemindent -\bibindent
+              \listparindent \itemindent
+              \parsep \z@
+            \fi
+            \usecounter{enumiv}%
+            address@hidden@empty
+            \renewcommand\theenumiv{}}%
+      address@hidden
+        \renewcommand\newblock{\par}%
+      \else
+        \renewcommand\newblock{\hskip .11em address@hidden address@hidden
+      \fi
+      \sloppy\clubpenalty4000\widowpenalty4000%
+      address@hidden
+     address@hidden
+       address@hidden@warning{Empty `thebibliography' environment}}%
+      \endlist}
+      address@hidden
+      address@hidden@filesw
+        {\def\protect##1{\string ##1\space}\immediate
+      address@hidden
+   \fi
+\else
address@hidden@address@hidden
+\fi
+
+\def\idxquad{\hskip address@hidden space that divides entry from number
+
address@hidden address@hidden
+
+\def\subitem{\par\setbox0=\hbox{--\enspace}% second order
+                \noindent\hangindent\wd0\box0}% index entry
+
+\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third
+                \noindent\hangindent\wd0\box0}% order index entry
+
+\def\indexspace{\par \vskip 10\p@ plus5\p@ address@hidden
+
+\renewenvironment{theindex}
+               address@hidden
+                \thispagestyle{empty}\parindent\z@
+                \parskip\z@ address@hidden address@hidden
+                \let\item\par
+                \def\,{\relax\ifmmode\mskip\thinmuskip
+                             \else\hskip0.2em\ignorespaces\fi}%
+                \normalfont\small
+                address@hidden
+                }
+                {\end{multicols}}
+
+\renewcommand\footnoterule{%
+  \kern-3\p@
+  address@hidden 2truecm
+  address@hidden
+  \newdimen\fnindent
+  \fnindent1em
address@hidden
+    \parindent \fnindent%
+    \leftskip \fnindent%
+    \noindent
+    address@hidden@address@hidden }}\ignorespaces#1}
+
address@hidden
+  \small
+  \vskip\abovecaptionskip
+  address@hidden #1.} #2}%
+  \ifdim address@hidden >\hsize
+    {\bfseries #1.} #2\par
+  \else
+    \global address@hidden
+    address@hidden@address@hidden
+  \fi
+  \vskip\belowcaptionskip}
+
address@hidden
address@hidden
+\def address@hidden {%
+        address@hidden
+        \small
+        address@hidden
+        address@hidden
+}
address@hidden
address@hidden
+\renewenvironment{table}
+               address@hidden
+                address@hidden
+                address@hidden
+               address@hidden
+\renewenvironment{table*}
+               address@hidden
+                address@hidden
+                address@hidden
+               address@hidden
+
address@hidden
+  address@hidden
+  the#1\endcsname}{\ignorespaces #2}}\begingroup
+    address@hidden
+    address@hidden address@hidden #3}\par
+  \endgroup}
+
+% LaTeX does not provide a command to enter the authors institute
+% addresses. The \institute command is defined here.
+
address@hidden
address@hidden
+\newcounter{auco}
+\newdimen\instindent
+\newbox\authrun
+\newtoks\authorrunning
+\newtoks\tocauthor
+\newbox\titrun
+\newtoks\titlerunning
+\newtoks\toctitle
+
address@hidden Author Given}%
+                   address@hidden Title Given}%
+                   address@hidden
+                   address@hidden Institute Given}%
+                   address@hidden
+                   \global\titlerunning={}\global\authorrunning={}%
+                   \global\toctitle={}\global\tocauthor={}}
+
address@hidden
+
+\def\institutename{\par
+ \begingroup
+ \parskip=\z@
+ \parindent=\z@
+ address@hidden
+ address@hidden
+ address@hidden
+ address@hidden
+ \ifnum\c@@inst=1\relax
+   \gdef\fnnstart{0}%
+ \else
+   \xdef\fnnstart{\c@@inst}%
+   address@hidden
+   address@hidden
+ \fi
+ \ignorespaces
+ address@hidden
+ \endgroup}
+
address@hidden
+   {\star\star\star}\or \dagger\or \ddagger\or
+   \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+   \or \ddagger\ddagger address@hidden
+
+\def\inst#1{\unskip$^{#1}$}
+\def\fnmsep{\unskip$^,$}
+\def\email#1{{\tt#1}}
address@hidden
address@hidden
address@hidden@albion}}%
address@hidden@francais}}%
address@hidden@deutsch}}%
address@hidden@deutsch}}%
+}{\switcht@@therlang}%
+\providecommand{\keywords}[1]{\par\addvspace\baselineskip
+\noindent\keywordname\enspace\ignorespaces#1}%
+}
+\def\homedir{\~{ }}
+
address@hidden
+\clearheadinfo
+%
+%%% to avoid hyperref warnings
address@hidden
+%%% to make title-entry parent of section-entries
address@hidden
+%
+\renewcommand\maketitle{\newpage
+\phantomsection
+  \refstepcounter{chapter}%
+  \stepcounter{section}%
+  \setcounter{section}{0}%
+  \setcounter{subsection}{0}%
+  \setcounter{figure}{0}
+  \setcounter{table}{0}
+  \setcounter{equation}{0}
+  \setcounter{footnote}{0}%
+  \begingroup
+    \parindent=\z@
+    address@hidden@footnote}%
+    address@hidden
+      \ifnum address@hidden@ne
+        address@hidden
+      \else
+        address@hidden
+      \fi
+    \else
+      \newpage
+      address@hidden@   % Prevents figures from going at top of page.
+      address@hidden
+    \fi
+    address@hidden
+%
+    \def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}%
+    \def\thanks##1{\unskip{}}\def\fnmsep{\unskip}%
+    \instindent=\hsize
+    \advance\instindent by-\headlineindent
+    address@hidden
+       \addcontentsline{toc}{title}{\the\toctitle}\fi
+    address@hidden
+       \if!\the\titlerunning!\else
+         address@hidden
+       \fi
+       address@hidden
+       \ifdim\wd\titrun>\instindent
+          \typeout{Title too long for running head. Please supply}%
+          \typeout{a shorter form with \string\titlerunning\space prior to
+                   \string\maketitle}%
+          \global\setbox\titrun=\hbox{\small\rm
+          Title Suppressed Due to Excessive Length}%
+       \fi
+       address@hidden
+    \fi
+%
+    \if!\the\tocauthor!\relax
+      {\def\and{\noexpand\protect\noexpand\and}%
+      address@hidden@address@hidden
+    \else
+      \def\\{\noexpand\protect\noexpand\newline}%
+      address@hidden
+      address@hidden@uthor{\scratch}%
+    \fi
+    address@hidden
+    address@hidden
+    address@hidden
+       \if!\the\authorrunning!
+         address@hidden@auth}%
+         address@hidden
+       \else
+         address@hidden
+       \fi
+       address@hidden
+       \ifdim\wd\authrun>\instindent
+          \typeout{Names of authors too long for running head. Please supply}%
+          \typeout{a shorter form with \string\authorrunning\space prior to
+                   \string\maketitle}%
+          \global\setbox\authrun=\hbox{\small\rm
+          Authors Suppressed Due to Excessive Length}%
+       \fi
+       address@hidden
+       address@hidden@title}%
+     \fi
+  \endgroup
+  \setcounter{footnote}{\fnnstart}%
+  \clearheadinfo}
+%
address@hidden
+ \markboth{}{}%
+ address@hidden
+                 \unskip{} \andname\
+              \else
+                 \unskip \lastandname\
+              \fi}%
+ address@hidden
+          address@hidden@inst}%
+             \lastand
+          \else
+             \unskip,
+          \fi}%
+ \begin{center}%
+ \let\newline\\
+ {\Large \bfseries\boldmath
+  \pretolerance=10000
+  address@hidden \par}\vskip .8cm
address@hidden {\large \bfseries\boldmath
+  \vskip -.65cm
+  \pretolerance=10000
+  address@hidden \par}\vskip .8cm\fi
+ address@hidden@auth}}%
+ address@hidden
+ address@hidden@auth}%
+ address@hidden
+ address@hidden
+{\lineskip .5em
+\noindent\ignorespaces
address@hidden
+ {\small\institutename}
+ \end{center}%
+ }
+
+% definition of the "\spnewtheorem" command.
+%
+% Usage:
+%
+%     \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font}
+% or  \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font}
+% or  \spnewtheorem*{env_nam}{caption}{cap_font}{body_font}
+%
+% New is "cap_font" and "body_font". It stands for
+% fontdefinition of the caption and the text itself.
+%
+% "\spnewtheorem*" gives a theorem without number.
+%
+% A defined spnewthoerem environment is used as described
+% by Lamport.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
address@hidden
address@hidden
+
address@hidden@address@hidden
+
+% definition of \spnewtheorem with number
+
address@hidden
+  address@hidden@address@hidden
address@hidden@address@hidden@spnthm{#1}}}
+
address@hidden@ifdefinable\csname #1\endcsname
+   address@hidden@addtoreset{#1}{#3}%
+   \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+     \csname the#3\endcsname address@hidden address@hidden
+   \expandafter\xdef\csname #1name\endcsname{#2}%
+   address@hidden@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}%
+                              address@hidden@endtheorem}}}
+
address@hidden@ifdefinable\csname #1\endcsname
+   address@hidden
+   \expandafter\xdef\csname address@hidden
+   \expandafter\xdef\csname #1name\endcsname{#2}%
+   address@hidden@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}%
+                               address@hidden@endtheorem}}}
+
address@hidden
+  address@hidden@address@hidden theorem environment `#2' address@hidden
+  address@hidden #1\endcsname
+  {\newaliascnt{#1}{#2}%
+  \expandafter\xdef\csname #1name\endcsname{#3}%
+  address@hidden@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}%
+  address@hidden@endtheorem}}}}
+
address@hidden 7\p@ address@hidden@ address@hidden@
+\refstepcounter{#1}%
address@hidden@address@hidden
+
address@hidden@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}%
+                    \ignorespaces}
+
address@hidden@spopargbegintheorem{#2}{\csname
+       the#1\endcsname}{#5}{#3}{#4}\ignorespaces}
+
address@hidden
+                 \item[\hskip\labelsep{#3#1\ address@hidden
+
address@hidden
+      \item[\hskip\labelsep{#4#1\ #2}]{#4(#3)address@hidden }#5}
+
+% definition of \spnewtheorem* without number
+
address@hidden@Ynthm{#1}{#2}}
+
address@hidden@ifdefinable\csname #1\endcsname
+   address@hidden@Thm{\csname #1name\endcsname}{#3}{#4}}%
+    \expandafter\xdef\csname #1name\endcsname{#2}%
+    address@hidden@endtheorem}}}
+
address@hidden 7\p@ address@hidden@ address@hidden@
address@hidden@address@hidden
+
address@hidden@Begintheorem{#1}{#2}{#3}\ignorespaces}
+
address@hidden@Opargbegintheorem{#1}
+       {#4}{#2}{#3}\ignorespaces}
+
address@hidden
+                           address@hidden
+
address@hidden
+      \item[\hskip\labelsep{#3#1}]{#3(#2)address@hidden }}
+
address@hidden
+   address@hidden
+   \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape}
+\else
+   \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape}
+   address@hidden
+      address@hidden
+   \else
+      address@hidden
+   \fi
+\fi
+
+%definition of divers theorem environments
+\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily}
+\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily}
address@hidden % alle Umgebungen wie Theorem.
+   address@hidden@spothm{#1}[theorem]{#2}{#3}{#4}}
+\else % alle Umgebungen mit eigenem Zaehler
+   address@hidden % mit section numeriert
+      address@hidden@spxnthm{#1}{#2}[section]{#3}{#4}}
+   \else % nicht mit section numeriert
+      address@hidden
+         address@hidden@spynthm{#1}{#2}{#3}{#4}
+                                   address@hidden
+      \else
+         address@hidden@spynthm{#1}{#2}{#3}{#4}
+                                   address@hidden
+      \fi
+   \fi
+\fi
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+    address@hidden
+    address@hidden@elt
+    address@hidden
+        address@hidden
+        address@hidden@tempb\else
+            address@hidden
+        \fi}%
+    address@hidden address@hidden
+    \expandafter\def\csname address@hidden
+    address@hidden
+    address@hidden@tempd}
+
address@hidden
+      \item[\hskip\labelsep{##4##1\ address@hidden }##5}
+                  address@hidden
+      address@hidden }}
+      }
+
+\renewenvironment{abstract}{%
+      \list{}{\advance\topsep by0.35cm\relax\small
+      \leftmargin=1cm
+      \labelwidth=\z@
+      \listparindent=\z@
+      \itemindent\listparindent
+      \rightmargin\leftmargin}\item[\hskip\labelsep
+                                    \bfseries\abstractname]}
+    {\endlist}
+
+\newdimen\headlineindent             % dimension for space between
+\headlineindent=1.166cm              % number and text of headings.
+
address@hidden@address@hidden
+   address@hidden@address@hidden@empty
+   address@hidden
+                  \leftmark\hfil}
+   address@hidden
+                 \llap{\thepage}}
+   \def\chaptermark##1{}%
+   \def\sectionmark##1{}%
+   \def\subsectionmark##1{}}
+
address@hidden@address@hidden
+   address@hidden@address@hidden@empty
+   address@hidden
+                  \hfil}
+   address@hidden
+                 \llap{\thepage}}
+   \def\chaptermark##1{}%
+   \def\sectionmark##1{}%
+   \def\subsectionmark##1{}}
+
address@hidden@headings\else
address@hidden
+
address@hidden
address@hidden
+
+\endinput
+%end of file llncs.cls
diff --git a/doc/reppar-2015/outline.org b/doc/reppar-2015/outline.org
new file mode 100644
index 0000000..6a1903a
--- /dev/null
+++ b/doc/reppar-2015/outline.org
@@ -0,0 +1,168 @@
+#+TITLE: Free and Happy Users --- Reproducible and User-Controlled Package 
Management in HPC with GNU Guix
+
+* Introduction
+
+** Idea
+
+  1. HPC cluster distros are old, not customizable, and sysadmin policy
+     is often conservative ("don't touch anything")
+  2. users resort to manual or "overlay" package management -> badly
+     affects reproducibility
+  3. solutions being developed don't guarantee reproducibility, prevent
+     sharing among users, which in turn prevents reproducibility
+  4. use of Guix helps maximize reproducibility while allowing sharing
+     among users, both on the same cluster on in different environments
+  5. we present concrete use cases
+  6. define reproducibility:
+     1. for one user at different times
+     2. among users of a cluster at a given time
+     3. among users on different machines, at different times
+
+* Common HPC Practice Hinders Reproducibility
+
+ - reproducible research approaches don't address this
+   + "A Universal Identifier for Computational Results" doesn't take
+     reproducibility into account
+   + "Effective Reproducible Research with Org-Mode and Git"
+     (Section 4) suggests either a vague approach (record version
+     numbers of a few packages) or a heavyweight approach (use VMs)
+   + some give up too easily: cf. 
[[https://www.xsede.org/documents/659353/703287/xsede14_fahey.pdf][Reproducibility
 responsibilities in the HPC arena]]
+ - single HPC users may find themselves unable to reproduce their own
+   results
+   + sysadmin-managed "modules", can disappear/change anytime
+   + thus, keeping binaries in $HOME isn't enough
+ - cluster users can hardly share with other users on the same cluster
+   + copy binaries? fragile, and prevents customization
+   + hard to have shared deployments
+ - HPC users can hardly share the software with other clusters
+   + different cluster means different software (compilers, libraries,
+     etc.)
+   + makes it difficult to assess the impact of a given architecture on
+     the software
+
+* Related Work
+
+** historical package managers
+
+  - dpkg, apt, rpm, etc.
+    + not flexible (hard to write or customize recipes)
+    + binaries uploaded by maintainers (optional)
+    + package databases cannot be composed in the case of rpm 
([[gnus:nnimap%2Binria:address@hidden email
+      from Ricardo]])
+
+** at the other end of the spectrum: VMs & containers
+
+  - full deployments: G5K/Kadeploy
+    + slow, does not compose
+    + imposes a significant burden on users: choosing and preparing
+      complete images
+  - VMs (cf. "SHARE: a web portal for creating and sharing executable
+    research papers")
+    + heavyweight
+    + unsuitable for HPC
+  - containers (Docker et al.)
+    + unavailable to unprivileged users in HPC
+    + heavyweight, coarse-grain, not composable
+    + yet: 
[[http://www.hpcadvisorycouncil.com/events/2015/swiss-workshop/pdf/day1/7_QNIB.pdf]["Immutable
 Application Containers"]] by "HPC Advisory Council"
+      (cf. http://doc.qnib.org/HPCAC2015.pdf)
+
+** unprivileged package management & customizability
+
+  - GNU Stow
+  - Conda & [[https://github.com/hpcugent/easybuild][EasyBuild]]
+    + co-existence of versions/builds via different prefixes
+    + EasyBuild: lots of efforts spent on ad hoc module naming convention
+    + recipes are Python objects, eases customization
+    + EasyBuild is mostly for "HPC support teams"
+  - [[http://scalability-llnl.github.io/spack/][Spack]]
+    + highly customizable from the command line + API
+    + thought with HPC-style usage in mind
+    + uses external tools, which prevents reproducibility 
([[https://groups.google.com/forum/#!topic/spack/NxyNTAZyMQg][example]])
+  - Gitian, reproducible.debian.net
+
+* Functional Package Managers
+
+  - Nix & Guix
+  - reproducibility is goal #1
+    + containers, etc.
+    + (cite that paper on influence of env. vars on OpenMP performance?)
+    + reproducibility implies free software
+  - usual stuff
+
+* Use Cases
+
+  - reproducible profiles: different levels
+    + symbolic: 'guix package --manifest'
+    + binary: 'guix archive --export'
+  - reproducibility
+    + users choose when and what to upgrade
+    + whole DAG can be saved/restored anytime
+    + contrast with sysadmin-managed packages & modules
+    + storage resources shared
+      - contrast with Spack, EasyBuild, etc.
+    + build environment tightly controlled (containers)
+    + rollback, etc.
+    + different levels of reproducibility:
+      * exact: a specific branch of Guix
+      * symbolic: an externally-maintained package set
+    + workflow: publish Guix branch or external package set
+  - deployment of complex stacks
+    + example1: bioinfo at U. Berlin
+    + example2: 
[[http://www.ict-openlab.eu/fileadmin/documents/public_deliverables/OpenLab_Deliverable_D2_9.pdf][OpenLab
 deliverable D.29]] (GNUnet)
+    + describe specific challenges...
+  - deployment + customization of the software stack (off topic?)
+    + example: [[http://icl.cs.utk.edu/projectsdev/morse/][MORSE]]
+    + 12+ actively developed, tightly-integrated packages
+    + people want to be able to the specific part they work on (hwloc,
+      StarPU, solver, etc.) while still being able to deploy the whole
+      stack
+    + makes it easy to assess the performance impact of a specific part
+      of the stack (e.g., StarPU)
+    + 'guix environment'
+  - "active/executable papers" (?)
+    + integrate with Skribilo or Org-mode (cf. "The Collage Authoring
+      Environment", 2011)
+
+* Limitations & Challenges
+
+  - needs to be installed by cluster sysadmin
+  - remaining sources of non-determinism
+    + cpuid, /proc/cpuinfo, etc.
+    + profile-driven optimization
+    + build system non-determinism ("make -j" with broken makefiles)
+    + non-determinism due to scheduling (cf. "Determinism and
+      Reproducibility in Large-Scale HPC Systems")
+  - numerical library tuning (ATLAS, etc.)
+    + configured on the build machine, which may undermine
+      reproducibility (see above)
+    + binaries become non-portable
+    + tweaking the recipe of say, ATLAS, means rebuilding a large part
+      of the DAG
+  - software "archeology" is limited
+    + reusing specific, old versions of compilers or libraries means
+      rewriting those recipes (they may have never existed in Guix
+      itself since it's relatively young)
+  - use of Guix on all cluster nodes?
+    + daemon, substitutes, network access, etc.
+  - numerical reproducibility? (cf. "Designing Bit-Reproducible Portable
+    High-Performance Applications")
+  - no proprietary software
+    + but this is a strength: reproducible science cannot be built on
+      black boxes, and experimentation needs the ability to fiddle with
+      the software
+
+* Conclusion
+
+  - functional package management & Guix make users happy
+
+* References
+
+  - https://khinsen.wordpress.com/category/science/reproducible-research/
+    + 
[[https://dirac.cnrs-orleans.fr/plone/software/activepapers][ActivePapers]] 
(CNRS Orléans, Konrad Hinsen)
+      * refers to [[http://www.executablepapers.com/][Elsevier's executable 
papers]]
+    + 
[[https://khinsen.wordpress.com/2012/05/14/the-nix-package-manager-in-computational-science/][Nix
 in computational science]]
+  - [[http://hpcugent.github.io/easybuild/files/hust14_paper.pdf][Modern 
Scientific Software Management Using EasyBuild and Lmod]]
+
+* COMMENT Emacs stuff
+
+LocalWords:  reproducibility workflow
diff --git a/doc/reppar-2015/reproducible-hpc.skb 
b/doc/reppar-2015/reproducible-hpc.skb
new file mode 100644
index 0000000..484da79
--- /dev/null
+++ b/doc/reppar-2015/reproducible-hpc.skb
@@ -0,0 +1,441 @@
+(eval-when (expand load eval)
+  ;; Augment the search path so that both the examples and the Guix
+  ;; modules are found.
+  (let ((file (assoc-ref (current-source-location) 'filename)))
+    (for-each (lambda (dir)
+                (set! %load-path (cons dir %load-path))
+                (set! %load-compiled-path
+                      (cons dir %load-compiled-path)))
+              (list (string-append (getenv "HOME") "/.config/guix/latest")
+                    (string-append (dirname file) "/code")))))
+
+(use-modules (skribilo package lncs)
+            (skribilo engine latex)
+            (skribilo biblio author)
+             (skribilo source)
+             (skribilo source lisp)
+            (skribilo engine)
+            (skribilo writer)
+            (skribilo ast)
+            (skribilo evaluator)
+             (guix packages) (guix derivations)
+             ((guix store) #:prefix guix:)
+             (my-openmpi))
+
+(define %store
+  ;; Connection to the Guix build daemon.  Is that reasonable to do
+  ;; it here?  Are we supposed to be reasonable anyway?
+  (guix:open-connection))
+
+(define (---) ; emdash
+  (resolve (lambda (n e env)
+             (if (engine-format? "html" e)
+                 (! "&mdash;")
+                 "---"))))
+
+(define (--) ; endash
+  (resolve (lambda (n e env)
+             (if (engine-format? "html" e)
+                 (! "&ndash;")
+                 "--"))))
+
+(define (include-latex file)
+  (! (format #f "\n\\input{~a}\n" file)))
+
+;; Abbreviate author first names.
+(markup-writer '&bib-entry-author
+   :action (lambda (n e)
+            (let ((names (markup-body n)))
+              (evaluate-document
+                (if (string? names)
+                    (abbreviate-first-names names)
+                    names)
+                e))))
+
+(bibliography "../els-2013/guix.sbib")
+(bibliography "reppar.sbib")
+              
+(let* ((latex (find-engine 'latex))
+       (usep  (engine-custom latex 'usepackage)))
+  (engine-custom-set! latex 'usepackage
+                      (string-append usep "
+\\usepackage{tikz}
+\\usetikzlibrary{arrows,shapes,trees,shadows,positioning}
+\\usepackage{fancyvrb}
+
+% Remember the position of every picture.
+\\tikzstyle{every picture}+=[remember picture]
+")))
+
+
+(document :title [Reproducible and User-Controlled
+Software Environments in HPC with Guix]
+   :author (list (author :name "Ludovic Courtès"
+                   :affiliation "Inria"
+                   :address (list "Bordeaux, France"))
+                (author :name "Ricardo Wurmus"
+                   :affiliation "Max Delbrück Center for Molecular
+                   Medicine in the Helmholtz Association"
+                   :address (list "Berlin, Germany"))
+                 ;; + others...
+                   )
+   
+   (abstract
+    [Support teams of high-performance computing (HPC) systems often
+find themselves between a rock and hard place: on one hand, they
+understandably administrate these large systems in a conservative way,
+but on the other hand, they try to satisfy their users by deploying
+up-to-date tool chains as well as libraries and scientific software.
+HPC system users often have no guarantee that they will be able to
+reproduce results at a later point in time, even on the same
+system,(---)software may have been upgraded, removed, or recompiled
+under their feet,(---), and they have little hope of being able to
+reproduce the same software environment elsewhere.  We present
+GNU,(~)Guix and the functional package management paradigm and claim
+that it can improve reproducibility and sharing among researchers,
+illustrating with representative use cases.])
+   
+   (chapter :title [Introduction]
+      
+      (p [HPC system administration has to satisfy two seemingly
+contradictory demands: on one hand administrators seek stability, which
+leads to a very conservative approach to software management, and on the
+other users demand recent tool chains and huge scientific software
+stacks.  In addition, users often need different versions and different
+variants of a given software package.  To satisfy both, support teams
+always play the role of ``distribution maintainers'': they build and
+install tool chains, libraries, and scientific software packages
+manually,(---)multiple variants thereof,(---)and make them available
+,(it [via]) ``environment modules'',(ref :bib 'furlani91:modules), which
+allows users to pick the specific packages they want.])
+      (p [Unfortunately, software is often built and installed in an
+,(it [ad hoc]) fashion, leaving users little hope of redeploying the
+same software environment on another system.  Worse, support teams
+occasionally have to remove installed software or to upgrade it in
+place, which means that users may eventually find themselves unable to
+reproduce their software environment, ,(emph [even on the same
+system]).])
+      (p [Recently-developed tools such as EasyBuild ,(ref :bib
+'geimer2014:easybuild) address part of the problem by automating package
+builds, enforcing some conventions on installation directories, and
+integrating with environment modules.  Spack ,(ref :bib
+'gamblin:spack-web) goes further by seeking usability by unprivileged
+users and by adding facilities to create package variants.  However,
+these tools fall short when it comes to build reproducibility.  First,
+the build environment is loosely controlled by environment variables,
+and build processes can trivially refer to tools or libraries available
+in the surrounding environment, which defeats reproducibility.  Second,
+the ,(it [ad hoc]) naming conventions they rely on to identify builds
+fail to capture the directed acyclic graph (DAG) of dependencies that
+led to this particular build (see ,(numref :text [Section] :ident
+"related")).])
+      (p [GNU,(~)Guix is a general-purpose package manager that
+implements the functional package management paradigm pioneered by Nix
+,(ref :bib '(dolstra2004:nix courtes2013:functional)).  Many of its
+properties and features make it attractive in a multi-user HPC context:
+per-user profiles, transactional upgrades and roll-backs, and, more
+importantly, a controlled build environment to maximize reproducibility.
+,(numref :text [Section] :ident "rationale") details our motivations.
+,(numref :text [Section] :ident "functional") describes the functional
+package management paradigm, its implementation in Guix, its impact on
+reproducibility, and how it can be applied to HPC systems.  ,(numref
+:text [Section] :ident "use-cases") gives concrete use cases where Guix
+empowers users while guaranteeing reproducibility and sharing, while
+,(numref :text [Section] :ident "limitations") discusses limitations and
+remaining challenges.  Finally, ,(numref :text [Section] :ident
+"related") compares to related work, and ,(numref :text [Section] :ident
+"conclusion") concludes.]))
+   
+   (chapter :title [Rationale] :ident "rationale"
+      
+      (p [Recent work on reproducible research insufficiently takes
+software environment reproducibility into account.  For example, the
+approach for verifiable computational results described in ,(ref :bib
+'gavish2011:universal) focuses on workflows and conventions but does not
+mention the difficulty of reproducing full software environments.
+Likewise, the authors of ,(ref :bib 'stanisic2014:effective) propose a
+methodology for reproducible research experiments in HPC.  To address
+the software-environment reproducibility problem they propose two
+extreme and equally unsatisfying approaches: one is to write down the
+version numbers of the dependencies being used, which is insufficient,
+and the other is to save and reuse full virtual machines, which poses a
+real challenge for performance.])
+      (p [Yet, common practices on HPC systems hinder reproducibility.
+The vast majority of HPC systems run GNU/Linux but for understandable
+stability reasons, they often run old distributions that are rarely
+updated.  Thus, packages provided by the distribution are largely
+dismissed, and instead support teams install packages by
+themselves,(---)from scientific software, to HPC libraries, to compiler
+tool chains,(---)and make them available through environment modules
+,(ref :bib 'furlani91:modules).  Modules allow users to choose different
+versions or variants of the packages they use without interfering with
+each others.  However, when installed software is updated in place or
+removed, users suddenly find themselves unable to reproduce the software
+environment they were using.  Given these practices, reproducing the
+exact same software environment on a ,(emph [different]) HPC system
+seems out of reach.  It is nonetheless a very important property: it
+would allow users to assess the impact of the hardware on the software's
+performance,(---)something that is very valuable in particular for
+developers of run-time systems such as StarPU ,(ref :bib
+'augonnet2009:starpu),(---), and it would allow other researchers to
+reproduce experiments on their system.])
+      (p [Essentially, by deploying software and environment modules,
+HPC support teams find themselves duplicating the work of GNU/Linux
+distributions, but why is that?  Historical package managers such as
+Debian's APT were introduced as a way to (1) allow distribution makers
+to describe the dependencies and ``build recipe'' of a package to
+automate builds, and (2) to allow users to easily install, upgrade, and
+remove packages without having to worry about dependencies and build
+systems.  However, these traditional package managers suffer from
+several limitations.])
+      (p [First, package binaries that every user installs (for
+instance, the ,(code [.deb]) files) are actually built on the package
+maintainer's machine, which then uploads it.  Because the package's
+build process has access to all the machine's file system and resources,
+details may leak into the binary that is uploaded.  Thus, chances are
+than another user would not be able to reproduce the exact same binary.
+It is worth noting that this particular issue is being addressed in the
+context of Debian by the Reproducible project ,(ref :bib
+'debian-reproducible-web).])
+      (p [Second, while it is in theory possible for a user to define
+their own variant of a package, as is often needed in HPC, this happens
+to be often difficult in practice.  ,(bold [FIXME: Expound.])])
+      (p [Third, APT, RPM, and similar tools implement an ,(emph
+[imperative]) and ,(emph [stateful]) package management model, as Doltra
+et al. rightfully explained in ,(ref :bib 'dolstra2004:nix).  It is
+imperative in the sense that it modifies the set of available packages
+in place.  For example, upgrading libc means that suddenly all the
+installed packages start using the new libc version; switching to an
+alternative MPI implementation, or upgrading the OpenMP run-time library
+means that suddenly all the installed applications and libraries start
+using them.  It is stateful in the sense that the system state after a
+package management operation depends on its previous state.  Namely, the
+system state at a given point in time is the result of the series of
+installation and upgrade operations that have been made over time, and
+there may be no way to reproduce the exact same state elsewhere.  These
+properties are a serious hindrance to reproducibility.]))
+
+   (chapter :title [Functional Package Management] :ident "functional"
+      
+      (p [,(it [Functional paradigm.]) Functional package management is
+a discipline that transcribes the functional programming paradigm to
+software deployment: build and installation processes are viewed as pure
+functions in the mathematical sense,(---)whose result depends
+exclusively on the inputs,(---), and their result is a value,(---)that
+is, an immutable directory.  Since build and installation processes are
+pure functions, their results can effectively be ``cached'' on
+disk,(---)just like one can ``memoize'' pure functions.  Likewise, two
+independent runs of a given build process for a given set of inputs
+should return the same value,(---),(it [i.e.]), a set of bit-identical
+files.  This approach was first described and implemented in the Nix
+package manager ,(ref :bib 'dolstra2004:nix).  Guix reuses low-level
+mechanism from Nix to implement the same paradigm, but offers a unified
+interface for package definitions and their implementation, all embedded
+in a single programming language ,(ref :bib 'courtes2013:functional).])
+      (p [An obvious challenge is the implementation of this paradigm:
+how can build and install processes be viewed as pure?  To obtain that
+property, Nix and Guix ensure tight control over the build environment.
+In both cases, build processes are started by a privileged daemon that
+always runs them in ``containers'' as implemented by the kernel Linux;
+that is, they run in a chroot environment, under a dedicated user ID,
+with separate name spaces for PIDs, inter-process communication (IPC),
+networking, and so on.  The chroot environment is prepared to contained
+only the directories corresponding to the inputs that the build process
+explicitly declared.  This ensures that the build process cannot
+inadvertently end up using tools or libraries that it is not supposed to
+use.  The separate name spaces ensure that the build process cannot
+communicate with the outside world.  And of course, the set of
+environment variables visible in the build processes is well-defined.
+Although it is not perfect as we will see in ,(numref :text [Section]
+:ident "limitations"), this technique gives us confidence that builds
+processes can be viewed as pure functions, with reproducible results.])
+      
+      (figure
+        :legend [Invocation of the ,(tt [guix build]) command returning
+        the resulting file name in the store.]
+        :ident "fig-build"
+        
+        ;;(include-latex "fig-build.tex")
+         (bold [FIXME: imagine a figure here]))
+
+      (p [Each build process produces one or more files in directories
+stored in a common place called ,(emph [the store]), typically the ,(tt
+[/gnu/store]) directory.  Each file in ,(tt [/gnu/store]) has a name
+that includes a hash of all the inputs of the build process that led to
+it, as shown in ,(numref :text [Figure] :ident "fig-build").  By ``all
+the inputs'', we really mean all of them: this includes of course
+compilers and libraries (including the C library), but also build
+scripts and environment variable values.  And this is recursive, the
+compiler's own directory name is a hash of the tools and libraries used
+to build, and so on and so forth, until a set a pre-built binaries used
+for bootstrapping purposes,(---)and which can in turn be rebuilt using
+Guix ,(ref :bib 'courtes2013:functional).  Thus, for each package that
+is built, the system has access to the ,(emph [complete DAG]) of
+dependencies used to build it, recursively.])
+      
+      (figure
+         :legend [Guix package recipe of Open,(~)MPI.]
+         :ident "fig-recipe"
+         
+         (prog
+            (source :language scheme :file "code/my-openmpi.scm"
+               :definition 'openmpi)))
+
+      (p [Package recipes in Guix are written in a domain-specific
+language (DSL) embedded in the Scheme programming language.  ,(numref
+:text [Figure] :ident "fig-recipe") shows, as an example, the recipe to
+build the Open,(~)MPI library, which should be intelligible to the
+reader.  The ,(tt [package]) form evaluates to a ,(emph [package
+object]), which is just a ``regular'' Scheme object; the ,(tt [define])
+form defines the ,(tt [openmpi]) variable to hold that value.  Because
+this is a standard Scheme object, we can query it programmatically, as
+shown in ,(numref :text [Figure] :ident "fig-query").])
+      
+      (figure
+         :legend [Querying a package object using the programming interface.]
+         :ident "fig-query"
+         
+         (prog :mark #f
+            (source :language scheme :file "code/query-package.scm"
+                :start ";;!start"))
+
+         (p [... yields:])
+
+         (prog :line #f
+            (source :language scheme
+               (object->string (primitive-load "code/query-package.scm")))))
+            
+      (p [Important parts include line ,(ref :line
+"recipe-build-system"), which specifies that the package is to be built
+according to the GNU build system convention,(---),(it [i.e.]), using
+the well-known ,(tt [./configure && make && make install]) sequence.
+The ,(tt [inputs]) field on line ,(ref :line "recipe-inputs") specifies
+the direct dependencies of the package (the difference between these two
+fields is only relevant when cross-compiling.)  The field refers to the
+,(tt [hwloc]), ,(tt [gfortran-4.8]), and ,(tt [pkg-config]) variables,
+which are also bound to package objects (their definition is not shown
+here.)  It would be inconvenient to specify all the standard inputs,
+such as GNU,(~)Make, GCC, GNU,(~)Binutils so these are implicit here.
+Since we are manipulating ``normal'' Scheme objects, we can use the API
+of Guix to query those package objects, as illustrated with the code in
+,(numref :text [Figure] :ident "fig-query"), which queries the name and
+version of the direct and indirect dependencies of our package,(footnote
+[This code is actually run as we build this document, as we will see in
+,(numref :text [Section] :ident "active").]).])
+      (p [With that definition in place, running ,(tt [guix build
+openmpi]) returns the directory name
+,(tt (derivation->output-path (package-derivation %store openmpi))).  If
+that directory did not already exist, then the daemon spawns the build
+process in its isolated environment with write access to this directory.
+Of course users never have to type these long ,(tt [/gnu/store]) file
+names.  They can install the package in their ,(emph [profile]) using
+the ,(tt [guix package]) command, which essentially installs symbolic
+links under ,(tt [~/.guix-profile]).  It is then a matter of defining
+the search paths for the compiler, linker, and other tools ,(tt [via])
+environment variables.  Fortunately, Guix keeps track of that and the
+,(tt [guix package --search-paths]) command returns all the necessary
+environment variable definitions in Bourne shell syntax.  For example,
+when both the GCC tool chain and Open,(~)MPI are installed, the command
+returns definitions for the ,(tt [PATH]), ,(tt [CPATH]), and ,(tt
+[LIBRARY_PATH]) environment variables, and these definitions can be
+passed to the ,(tt [eval]) shell built-in command.]))
+   
+   (chapter :title [Use Cases] :ident "use-cases"
+
+      (p [We explore practical use cases where the availability of Guix
+can improve experimentation reproducibility for a user of a given
+system, support the deployment of complex software stacks, allow a
+software environment to be replicated on another system, and allow
+fine customization of the software environment, and finally integrate
+tightly with the production of research papers.])
+
+      (section :title [Usage Patterns on an HPC Cluster] ;MDC Berlin
+
+         (p [One of the key features of Guix and Nix is that they
+securely permit unprivileged users to install packages in the store
+,(ref :bib 'dolstra2004:nix).  To build a package, the ,(tt [guix])
+commands connect to the build daemon, which then performs the build (if
+needed) on their behalf, in the isolated, unprivileged environment.
+When two users build the exact same package, both end up using the exact
+same ,(tt [/gnu/store]) file name and storage is shared.  If a user
+tries to build, say, a malicious version of the C library, then the
+other users on the system will not use it, simply because they cannot
+guess its ,(tt [/gnu/store]) file name in the first place,(---)unless
+they themselves explicitly build the very same modified C library.])
+         (p (bold [FIXME: insert MDC experience report here?]))
+
+         (figure
+            :legend [Declaring the set of packages to be installed in a
+            profile.]
+            :ident "fig-manifest"
+            
+            (prog :line #f
+               (source :language scheme :file "code/manifest.scm")))
+
+         (p [Guix users have a default profile in ,(tt
+[~/.guix-profile]),(---)essentially a tree of symlinks to selected items
+in ,(tt [/gnu/store]),(---)but they can create independent profiles in
+arbitrary places of the file system.  Guix supports two ways to manage a
+profile.  The first one is to make transactions that add, upgrade, or
+remove packages in the profile: ,(tt [guix package --install openmpi
+--remove mpich2]) installs Open,(~)MPI and remove MPICH2 from ,(tt
+[~/.guix-profile]) in a single transaction that can be rolled back.  The
+second approach is to ,(emph [declare]) the desired contents of the
+profile and make that effective: the user writes in a file a code
+snippet that lists the requested packages (see ,(numref :text [Figure]
+:ident "fig-manifest")) and then runs ,(tt [guix package
+--manifest=my-packages.scm]).])
+         (p [This declarative profile management makes it easy to
+replicate a profile, but it is symbolic: it uses whatever package
+objects the variables are bound to (,(tt [gnu-make]), ,(tt
+[gcc-toolchain]), etc.), but these variables are typically defined in
+the ,(tt [(gnu packages ...)]) modules that Guix comes with.  Thus the
+precise packages being installed depend on the revision of Guix that is
+available.  Specifying the Guix revision,(footnote [Guix itself is
+versioned-controlled using Git.]) in addition to the declaration in
+,(numref :text [Figure] :ident "fig-manifest") is all it takes to
+reproduce the exact same ,(tt [/gnu/store]) items.])
+         (p [Another approach to achieve bit-identical reproduction of a
+user's profile is by saving the contents of its closure using ,(tt [guix
+archive --export]).  The resulting archive can be transferred to another
+system and restored at any point in time using ,(tt [guix archive
+--import]).  This should significantly facilitate experimentation and
+sharing among peers.]))
+
+      (section :title [Customizing Packages]  ;MORSE
+         
+         )
+
+      (section :title [Going Further]  ;active papers
+         :ident "active"))
+
+   (chapter :title [Limitations and Challenges]
+      :ident "limitations"
+      
+      (p [Nix and Guix address many of the reproducibility issues
+encountered in package deployment, and Guix provides APIs and a
+programming environment aiming to facilitate the development of package
+variants as is useful in HPC.  Yet, to our knowledge, neither Guix nor
+Nix are widely deployed on HPC systems.  An obvious reason that limits
+adoption is the requirement to have the build daemon run with root
+privileges,(---)without which it would not be able to use the Linux
+kernel container facilities that allow it to isolate build processes and
+maximize build reproducibility.  System administrators are wary of
+installing privileged daemons, and so HPC system users trade
+reproducibility for practical approaches.])
+      )
+
+   (chapter :title [Related Work] :ident "related")
+   
+   (chapter :title [Conclusion] :ident "conclusion")
+   
+   (references)
+   )
+   
+;; Local Variables:
+;; compile-command: "skribilo -t latex -o reproducible-hpc.tex 
reproducible-hpc.skb && pdflatex reproducible-hpc.tex"
+;; ispell-local-dictionary: "american"
+;; indent-tabs-mode: nil
+;; End:
+
+;; LocalWords:  reproducibility workflows



reply via email to

[Prev in Thread] Current Thread [Next in Thread]