civodul pushed a commit to branch master in repository maintenance. commit 28bd2073aef75dc070799384ca0c9b93453f7127 Author: Ludovic Courtès <l...@gnu.org> Date: Mon May 14 10:43:32 2018 +0200
talks: Add talk by Gábor. --- .../images/GuixSD-horizontal-print.pdf | 1 + .../images/GuixSD.pdf | 1 + talks/szabad-szoftver-konferencia-hu-2018/talk.pdf | Bin 0 -> 99997 bytes .../szabad-szoftver-konferencia-hu-2018/talk.pdfpc | 87 +++++ talks/szabad-szoftver-konferencia-hu-2018/talk.tex | 393 +++++++++++++++++++++ 5 files changed, 482 insertions(+) diff --git a/talks/szabad-szoftver-konferencia-hu-2018/images/GuixSD-horizontal-print.pdf b/talks/szabad-szoftver-konferencia-hu-2018/images/GuixSD-horizontal-print.pdf new file mode 120000 index 0000000..7e536b6 --- /dev/null +++ b/talks/szabad-szoftver-konferencia-hu-2018/images/GuixSD-horizontal-print.pdf @@ -0,0 +1 @@ +../../fsf-hu-talk-2018/images/GuixSD-horizontal-print.pdf \ No newline at end of file diff --git a/talks/szabad-szoftver-konferencia-hu-2018/images/GuixSD.pdf b/talks/szabad-szoftver-konferencia-hu-2018/images/GuixSD.pdf new file mode 120000 index 0000000..1f2477d --- /dev/null +++ b/talks/szabad-szoftver-konferencia-hu-2018/images/GuixSD.pdf @@ -0,0 +1 @@ +../../fsf-hu-talk-2018/images/GuixSD.pdf \ No newline at end of file diff --git a/talks/szabad-szoftver-konferencia-hu-2018/talk.pdf b/talks/szabad-szoftver-konferencia-hu-2018/talk.pdf new file mode 100644 index 0000000..506e768 Binary files /dev/null and b/talks/szabad-szoftver-konferencia-hu-2018/talk.pdf differ diff --git a/talks/szabad-szoftver-konferencia-hu-2018/talk.pdfpc b/talks/szabad-szoftver-konferencia-hu-2018/talk.pdfpc new file mode 100644 index 0000000..2105b3d --- /dev/null +++ b/talks/szabad-szoftver-konferencia-hu-2018/talk.pdfpc @@ -0,0 +1,87 @@ +[duration] +21 +[notes_position] +RIGHT +[last_minutes] +3 +[end_user_slide] +14 +[notes] +### 1 + +### 2 +Itt az elsÅ‘ követelmény lazÃtható, úgy, hogy ekvivalens bemenetetek esetén ekvivalens kimeneteket várunk el. + +A második követelmény valójában annyi, hogy perzisztens adatszerkezetben tároljuk az eredményeket. + +A gyakorlati megvalósÃtásokban irányÃtott aciklikus gráfot használunk. + +A cél az, hogy ha szükséges, akkor egy tetszÅ‘leges verziót újra elÅ‘ lehessen állÃtani. Az adatszerkezetben csak konzisztens állapotoknak megfelelÅ‘ konfigurációt tárolunk. + +Ez egy node esetén nem okoz problémát, de nagyobb deployment esetén ezt Ãgy nem lehet csinálni. + +Olyan módszerek is kellenek, amik ellenÅ‘zik, hogy az állapot valóban összeegyeztethetÅ‘ a tárolt gráffal. +### 3 +Például frissÃtés közben megszűnik az áramellátás, vagy egyszerűen valamelyik csomag frissÃtésekor hiba lép fel. A régi csomag függÅ‘ségek már eltávolÃtásra kerültek, esetleg maga a régi csomag is, az új csomagot pedig nem sikerült feltelepÃteni. Ez azt jelenti, hogy az adott csomag funkcionalitása nem elérhetÅ‘. A legsúlyosabb esetekben ez akár bootolhatatlan rendszert is eredményezhet. + +Ugyanez az idÅ‘ablak a nix és guix esetében egy symlink atomikus átváltására szűkül. Ha ez nem sikerül, akkor egyszerűen annyi történik, hogy a régi rendszeren maradunk. + +A nix és guix semmi olyan szoftvert nem töröl, ami valaha a rendszeren telepÃtve volt, erre kifejezetten kérni kell. Ilyen esetben a csomagkezelÅ‘ azokat a szoftvereket törli, amelyekrÅ‘l bizonyÃtani tudja, hogy azt más szoftver a rendszeren nem használja. LehetÅ‘ség van bizonyos szoftvereket megjelölni, hogy használatban vannak, Ãgy lehet kezelni a nem guix-el telepÃtett szoftverek függÅ‘ségeit, amirÅ‘l a guix nem tudhat. Jobb módszer, ha lehetséges guix csomagot készÃteni, mert Ãgy rendszer [...] + +A nixos és guixsd konfiguráció központosÃtja a konfigurációkezelést, és a GuixSD esetében lehetÅ‘vé teszi a konfigurációs függÅ‘ségek megvilágÃtását is (Shepherd service extension). + +Fontos alap feltételezés, hogy a központi csomagkezelés csak akkor működik, ha mindent nix-el/guix-el csomagolunk. +### 4 +A bitrÅ‘l bitre reprodukálhatóságnak rengeteg elÅ‘nye van. Az egyik legfontosabb, hogy helyi újrafordÃtással az eredményt összehasonlÃtva meggyÅ‘zÅ‘dehetünk róla, hogy a csomagot ugyanúgy állÃtották elÅ‘, mint ahogy mi tennénk. + +Ezen felül lehetÅ‘séget biztosÃt a helyettesÃtÅ‘csomagok hash alapján történÅ‘ azonosÃtására. + +Szintén lehetÅ‘séget ad arra, hogy a központi tároló tartalomcÃmezhetÅ‘ legyen. Ebben az esetben kialakÃtható zero trust architektúra, hiszen bárhonnan letöltve a helyetttesÃtÅ‘csomagot, biztosak lehetünk benne, hogy tényleg ugyanazt a szoftvert futtatjuk, nem vagyunk ráutalva arra, hogy megbÃzzunk a helyettesÃtÅ‘ket biztosÃtó szerverben. +### 5 +Ez egy nix kifejezés. Ez a nix csomagdefinÃciós nyelve. + +AlapvetÅ‘en egy haskell tÃpusú nyelv, némi bash szkripttel vegyÃtve. + +Ez egy külsÅ‘ DSL, saját ad-hoc szintaxisa van, és külön értelmezÅ‘ kell hozzá. + +Ezeket a kifejezéseket host side kódnak hÃvják. + +A build side kód c++. + +Külön repositoryban kezelik a host és build side kódokat. +### 6 +Ez egy guix csomagdefinÃció. + +A nyelv egy belsÅ‘ DSL, a hostnyelv a guile scheme. + +A nyelvet g-exp-nek nevezik. A scheme a define-syntax konstrukciójával különösen alkalmas belsÅ‘ DSL-ek definiálására, amik teljes mértékben olyan érzést eredményeznek a programozás során, mintha eleve a nyelv részét képeznék. + +A host side és build side kód ugyanabban a repoban van, és guile scheme nyelven Ãródott. + +Az egyetlen olyan rész ami még mindig C++ az a daemon. Jelenleg folyamatban van az újraimplementálása schemeben. +### 7 +A GuixSD egy teljes mértékben GNU FSDG-vel kompatibilis disztribúció. + +Ez a hivatalos GNU disztribúció. + +A GNU Guix a GNU hivatalos csomagkezelÅ‘je. + +A GNU Guile scheme a GNU hivatalos kiterjesztési nyelve. +### 8 +Ezen kÃvül lehetÅ‘ség van minden felhasználó számára tetszÅ‘leges profilokat definiálni, és bármelyik profil bármelyik generációjára váltani. + +Szintén lehetÅ‘ség van profil manifesteket készÃteni, ami lehetÅ‘vé teszi például a csomagok verzióinak kötését. + +LehetÅ‘ség van egyszerű parancssori argumentumokkal a szoftver patchelt vezióinak fordÃtása a tesztelési fázisban. + +A csomagkezelÅ‘ nyelv lehetÅ‘vé teszi a csomag örököltetését egy másik csomagból, ami azt jelenti, hogy kisebb variánsok, például egy patchelt verzió, vagy egy olyan, amin nem futtatjuk le a teszteket, esetleg más konfigurációs flagekkel, vagy bemenetekkel fordÃtunk csak néhány sor. +### 9 +Itt fontos megjegyezni, hogy milyen mértékben lehet azt funkcionálissá tenni. A GuixSD itt egy elég extrém irányt vett, a funkcionális működéshez szükséges dologkat a lehetÅ‘ legkorábban, már az initrd-ben betölti. + +Tulajdonképpen Ãgy a bootloader és a kernel parancssor kerül ki a funkcionális konfiguráció keretei közül. + +Ezen kÃvül jelenleg a rendszertelepÃtés nem funkcionális, elsÅ‘sorban nincs funkcionális particionáló nyelv. + +Tehát itt fordulhatnak még elÅ‘ inkonzisztenciák. + +Jelenleg igyekszünk, hogy lehetÅ‘séget biztosÃtsunk a rendszertelepÃtés funkcionálissá tételére, illetve a bootloader konfiguráció és a kernel command-line monitorozására. diff --git a/talks/szabad-szoftver-konferencia-hu-2018/talk.tex b/talks/szabad-szoftver-konferencia-hu-2018/talk.tex new file mode 100644 index 0000000..dc2fad9 --- /dev/null +++ b/talks/szabad-szoftver-konferencia-hu-2018/talk.tex @@ -0,0 +1,393 @@ +\documentclass{beamer} + +\usetheme{default} + +\usefonttheme{structurebold} +\usepackage{helvet} +\usecolortheme{seagull} % white on black + +\usepackage[utf8]{inputenc} +\PassOptionsToPackage{hyphens}{url}\usepackage{hyperref,xspace,multicol} +\usepackage[absolute,overlay]{textpos} +\usepackage{tikz} +\usetikzlibrary{arrows,shapes,trees,shadows,positioning} +\usepackage{fancyvrb} % for \Verb + +\usepackage{pgfpages} + +\setbeameroption{show notes on second screen=right} + +% Remember the position of every picture. +\tikzstyle{every picture}+=[remember picture] + +\tikzset{onslide/.code args={<#1>#2}{% + \only<#1>{\pgfkeysalso{#2}} % \pgfkeysalso doesn't change the path +}} + +% Colors. +\definecolor{guixred1}{RGB}{226,0,38} % red P +\definecolor{guixorange1}{RGB}{243,154,38} % guixorange P +\definecolor{guixyellow}{RGB}{254,205,27} % guixyellow P +\definecolor{guixred2}{RGB}{230,68,57} % red S +\definecolor{guixred3}{RGB}{115,34,27} % dark red +\definecolor{guixorange2}{RGB}{236,117,40} % guixorange S +\definecolor{guixtaupe}{RGB}{134,113,127} % guixtaupe S +\definecolor{guixgrey}{RGB}{91,94,111} % guixgrey S +\definecolor{guixdarkgrey}{RGB}{46,47,55} % guixdarkgrey S +\definecolor{guixblue1}{RGB}{38,109,131} % guixblue S +\definecolor{guixblue2}{RGB}{10,50,80} % guixblue S +\definecolor{guixgreen1}{RGB}{133,146,66} % guixgreen S +\definecolor{guixgreen2}{RGB}{157,193,7} % guixgreen S + +\setbeamerfont{title}{size=\huge} +\setbeamerfont{frametitle}{size=\huge} +\setbeamerfont{normal text}{size=\Large} + +% White-on-black color theme. +\setbeamercolor{structure}{fg=guixorange1,bg=black} +\setbeamercolor{title}{fg=white,bg=black} +\setbeamercolor{date}{fg=guixorange1,bg=black} +\setbeamercolor{frametitle}{fg=white,bg=black} +\setbeamercolor{titlelike}{fg=white,bg=black} +\setbeamercolor{normal text}{fg=white,bg=black} +\setbeamercolor{alerted text}{fg=guixyellow,bg=black} +\setbeamercolor{section in toc}{fg=white,bg=black} +\setbeamercolor{section in toc shaded}{fg=white,bg=black} +\setbeamercolor{subsection in toc}{fg=guixorange1,bg=black} +\setbeamercolor{subsection in toc shaded}{fg=white,bg=black} +\setbeamercolor{subsubsection in toc}{fg=guixorange1,bg=black} +\setbeamercolor{subsubsection in toc shaded}{fg=white,bg=black} +\setbeamercolor{frametitle in toc}{fg=white,bg=black} +\setbeamercolor{local structure}{fg=guixorange1,bg=black} + +\newcommand{\highlight}[1]{\alert{\textbf{#1}}} + +\title{Funkcionális csomagkezelés} +\subtitle{Szabad Szoftver Konferencia 2018} +\author{Boskovits Gábor} +\date{\small{2018. május 12., Budapest, Magyarország}} + +\setbeamertemplate{navigation symbols}{} % remove the navigation bar + +\AtBeginSection[]{ + \begin{frame} + \frametitle{} + \tableofcontents[currentsection] + \end{frame} +} + + +\newcommand{\screenshot}[1]{ + \begin{frame}[plain] + \begin{tikzpicture}[remember picture, overlay] + \node [at=(current page.center), inner sep=0pt] + {\includegraphics[width=\paperwidth]{#1}}; + \end{tikzpicture} + \end{frame} +} + +\begin{document} + +\maketitle + +\setbeamercolor{normal text}{fg=white,bg=black} + +\begin{frame}[fragile] + \frametitle{Mi a funkcionális csomagkezelés?} + + Egy sikeres csomagkezelési művelet eredménye csak a művelet bemeneteitÅ‘l függ, + az állapottól független. + + \begin{itemize} + \item A fordÃtási folyamat: tiszta függvény. + \item A lefordÃtott szoftver: perzisztens gráf. + \end{itemize} + + Az elméleti hátteret lásd: + + Eelco Dolstra. The Purely Functional Software Deployment Model. + PhD thesis, Faculty of Science, Utrecht, The Netherlands. + January 2006. ISBN 90-393-4130-3. + + % \note{20 perc} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Mi a probléma a jelenlegi modellel?} +\scriptsize{ + \begin{enumerate} + \item A frissÃtések és konfiguráció változtatások nehezek, gyakran nem tudunk + visszatérni az elÅ‘zÅ‘ jó konfigurációhoz, elÅ‘fordulhat, hogy egy sikertelen + csomagkezelési műveletet követÅ‘en a rendszer inkonzisztens állapotba kerül + \item Több csomagkezelési és konfigurálási művelet után követhetetlenné válik + a rendszer pillanatnyi állapota, lehetséges, hogy két rendszer, amelyeknek + ugyan abban az állapotban kellene lennie mégis különbözÅ‘ állapotba kerül + \item A konfiguráció szét van tördelve, gyakran még az sem világos, hogy egy + adott szoftver működését melyik konfigurációs beállÃtások befolyásolják, + nincs központi konfiguráció kezelés + \item A csomagok elérhetÅ‘ségi és telepÃtési információi szét vannak tördelve, + nagyrészt a nyelvspecifikus csomagkezelÅ‘knek köszönhetÅ‘en, nem áttekinthetÅ‘, + hogy egyáltalán milyen csomagok vannak egy adott rendszeren telepÃtve, nincs + központi csomagkezelés + \item Ezeknek a töredezett csomag és konfigurációs adatoknak köszönhetÅ‘en + nincs megfelelÅ‘ függÅ‘ségi információnk a rendszerrÅ‘l + \end{enumerate} +} +\end{frame} + +\begin{frame}[fragile] + \frametitle{A funkcionális csomagkezelÅ‘k alapvetÅ‘ működése} + + Jelenleg két funkcionális csomagkezelÅ‘t ismerünk, ezek a + Nix és a Guix. + + A működés alapelve a következÅ‘: a programokat egy központi helyre telepÃtik, + minden programnak külön izolált telepÃtési fája van. Ezek a megfelelÅ‘ + helyekre, például a felhasználók profiljaiba szimbolikus linkekkel kerülnek + becsatolásra. A központi tárolóhoz csak egy rendszergazdai jogosultságokkal + rendelkezÅ‘ szolgáltatás férhet hozzá. A szoftver fordÃtás izolált + környezetben történik, és csak a csomagleÃrásban kifejezetten bemenetként + emlÃtett csomagok állnak rendelkezésre a fordÃtási környezetben. A cél, hogy + az eredmény bitrÅ‘l bitre reprodukálható legyen. + +\end{frame} + +\begin{frame}[fragile] + \frametitle{CsomagdefinÃció példa - Nix} +\tiny{ + \begin{verbatim} +{ stdenv, fetchurl }: + +stdenv.mkDerivation rec { + name = "hello-2.10"; + + src = fetchurl { + url = "mirror://gnu/hello/${name}.tar.gz"; + sha256 = "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"; + }; + + doCheck = true; + + meta = { + description = "A program that produces a familiar, friendly greeting"; + longDescription = '' + GNU Hello is a program that prints "Hello, world!" when you run it. + It is fully customizable. + ''; + homepage = http://www.gnu.org/software/hello/manual/; + license = stdenv.lib.licenses.gpl3Plus; + maintainers = [ stdenv.lib.maintainers.eelco ]; + platforms = stdenv.lib.platforms.all; + }; +} + \end{verbatim} +} +\end{frame} + +\begin{frame}[fragile] + \frametitle{CsomagdefinÃció példa - Guix} +\tiny { +\begin{verbatim} +(define-module (gnu packages hello) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (guix licenses) + #:use-module (gnu packages gawk)) + +(define-public hello + (package + (name "hello") + (version "2.10") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/hello/hello-" version + ".tar.gz")) + (sha256 + (base32 + "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) + (build-system gnu-build-system) + (arguments '(#:configure-flags '("--enable-silent-rules"))) + (inputs `(("gawk" ,gawk))) + (synopsis "Hello, GNU world: An example GNU package") + (description "Guess what GNU Hello prints!") + (home-page "http://www.gnu.org/software/hello/") + (license gpl3+))) + + \end{verbatim} +} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Különbségek a Guix és a Nix között} + + Két fontos különbséget kell megemlÃtenünk: + \begin{enumerate} + \item MÃg a Nix egy külsÅ‘ DSL mellett tette le a voksát, addig a Guix egy + belsÅ‘ DSL-t válaszott. Ez lehetÅ‘vé teszi a Guix esetében a fogadó + programnyelv lehetÅ‘ségeinek teljes körű kihasználását. + \item A másik különbség filozófiai jellegű, a Guix nem támogatja a nem + szabad szoftvereket, a hivatalos csomagadatbázisokban csak szabad szoftver + található. Ez nem jelenti azt, hogy ilyen szoftver nem használható vagy + csomagolható Guix-el, de ezek a csomagok nem kerülhetnek be a hivatalos + repoba. + \end{enumerate} +\end{frame} + +\begin{frame}[fragile] + \frametitle{A Guix parancssor rövid bemutatása} + \begin{itemize} + \item guix package -r lua -u guile emacs -i guile-cairo@1.9.91 : egy + tranzakcióban törölje a lua, frissÃtse a guile,emacs és telepÃtse a + guile-cairo csomag 1.9.91-es verzióját. Ha ebbÅ‘l bármi nem sikerül, a + rendszer az eredeti állapotában marad. + \item guix package --roll-back : A legutóbbi csomagkezelési tranzakció + visszavonása + \item guix package -s emacs : Keressen információt az adott csomagokról + \item guix pull : A Guix frissÃtése + \item guix environment guix --ad-hoc git strace : Hozzon létre egy fejlesztÅ‘i + környezetet a guix csomaghoz, amiben a git és az strace is rendelkezésre áll + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Funkcionális rendszerkonfiguráció} + + A funkcionális csomagkezelés természetesnek tűnÅ‘ kiterjesztése a funkcionális + rendszerkonfiguráció. Erre mindkét csomagkezelÅ‘nek van megoldása, a NixOS és + a GuixSD disztribúciók. Ezek a Nix illetve Guix csomagkezelÅ‘t használják, és + kiegészÃtik egy rendszerkonfigurációs nyelvvel, illetve ehhez tartozó + felhasználói felületek, ami a Guix esetében a guix system parancs. + + ElÅ‘nyei: + \begin{itemize} + \item konfigurálható és kiterjeszthetÅ‘ rendszerszolgáltatások + \item tranzakcionális frissÃtés/visszaállÃtás + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Rendszerkonfiguráció - GuixSD} +\scriptsize { + \begin{verbatim} +(operating-system + (host-name "schememachine") + (timezone "Japan") + (locale "ja_JP.utf8") + (bootloader (grub-configuration (device "/dev/sda"))) + (file-systems (cons (file-system + (device "my-root") + (title 'label) + (mount-point "/") + (type "ext4")) + %base-file-systems)) + (users (cons (user-account + (name "alice") + (group "users") + (home-directory "/home/alice")) + %base-user-accounts)) + (services (cons* (dhcp-client-service) + (lsh-service #:port-number 2222) + %base-services))) + \end{verbatim} +} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{A guix system bemutatása} + + \begin{itemize} + \item guix system reconfigure file: a rendszer újrakonfigurálása a fájlban + szereplÅ‘ konfiguráció alapján + \item guix system roll-back: a rendszer visszaállÃtása az elÅ‘zÅ‘ konfigurációra + \item guix system vm file: rendszer indÃtása az adott konfigurációval + virtuális gépben + \item guix system container file: rendszer indÃtása az adott konfigurációval + konténerben + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{NixOps, Upcast} + A következÅ‘ lépés a teljes többgépes telepÃtések funkcionálissá tétele. Itt még + jelenleg elég sok a kihÃvás. A Nix csomagkezelÅ‘nek két megoldása van rá, a + hivatalos NixOps, és az Upcast. A NixOps egy sqlite adatbázisban tárolja a + telepÃtés állapotát, mÃg az Upcast erre egy szöveges fáljt használ, ami olyan + szempontból jobb, hogy verziókövetés alá lehet vonni. A Guix közösség még + keresi a megoldásokat a felmerülÅ‘ problémákra, Ãgy a Guix-nek erre még nincs + kész megoldása. +\end{frame} + +\begin{frame}[fragile] + \frametitle{Guix továbbfejlesztési tervek} + \begin{itemize} + \item szoftvercsatornák - tervezés alatt + \item több gépes telepÃtések - tervezés alatt + \item teljes forráskód alapú bootstrap útvonal - fejlesztés alatt + \item grafikus telepÃtÅ‘ - fejlesztés alatt + \item build farm webfelület - fejlesztés alatt (GSoC) + \item systemd kompatibilitás - feljlesztés alatt (GSoC) + \item a daemon úrjaimplementálás scheme-ben - fejlesztés alatt (GSoC) + \item barátságosabb kimenet - fejlesztés alatt (Outreachy) + \end{itemize} +\end{frame} + +\begin{frame}{A Guix és GuixSD közösség szÃvesen veszi a segÃtéget} + \vspace{0.7cm} + \large{ + \begin{itemize} + \item minél többen telepÃtik és használják a Guix-et, annál jobb + felhasználói élményt tud nyújtani + \item a fejlesztÅ‘k számára a hibajelentések és kérdések nagyon sokat + jelentenek, Ãgy tudják a Guix-et még jobbá tenni + \item a közösség számára fontos, hogy a felhasználóik és az újonnan + csatlakozó fejlesztÅ‘k megosszák az ötleteiket, hiszen Ãgy lehet + a Guix-et új, hasznos funkciókkal bÅ‘vÃteni + \end{itemize} + } +\end{frame} + +\begin{frame}[fragile] + +\vfill{ + \vspace{2.5cm} + \center{\includegraphics[width=0.3\textwidth]{images/GuixSD}}\\[1.0cm] + \texttt{boskov...@gmail.com}\hfill{\alert{\url{https://gnu.org/software/guix/}}} +} + +\end{frame} + +\begin{frame}[fragile] + + \begin{textblock}{12}(2, 8) + \tiny{ + Copyright \copyright{} 2010, 2012--2016 Ludovic Courtès \texttt{l...@gnu.org}.\\[3.0mm] + Copyright \copyright{} 2018 Gábor Boskovits \texttt{boskov...@gmail.com}.\\[3.0mm] + GNU GuixSD logo, CC-BY-SA 4.0, \url{https://gnu.org/s/guix/graphics} + + Copyright of other images included in this document is held by + their respective owners. + \\[3.0mm] + This work is licensed under the \alert{Creative Commons + Attribution-Share Alike 3.0} License. To view a copy of this + license, visit + \url{http://creativecommons.org/licenses/by-sa/3.0/} or send a + letter to Creative Commons, 171 Second Street, Suite 300, San + Francisco, California, 94105, USA. + \\[2.0mm] + At your option, you may instead copy, distribute and/or modify + this document under the terms of the \alert{GNU Free Documentation + License, Version 1.3 or any later version} published by the Free + Software Foundation; with no Invariant Sections, no Front-Cover + Texts, and no Back-Cover Texts. A copy of the license is + available at \url{http://www.gnu.org/licenses/gfdl.html}. + \\[2.0mm] + % Give a link to the 'Transparent Copy', as per Section 3 of the GFDL. + The source of this document is available from + \url{http://git.sv.gnu.org/cgit/guix/maintenance.git}. + } + \end{textblock} +\end{frame} + +\end{document}