<<

GNU Guix is 4 years old!

Ludovic Courtes`

GNU Hackers Meeting, Rennes, August 2016 The rise and fall of distros. “ and other distributions are going to be that thing you run docker on, little more.” — Jos Poortvliet, ownCloud developer

http://lwn.net/Articles/670566/ It’s also that thing you run inside Docker! main griefs:

I distros are inflexible

I distros “lag behind”

I developers have to “chase distros”

http://xkcd.com/1654/ → “app bundles”

Giving up? Giving up?

→ “app bundles” https://imagelayers.io/ Maybe what we need is an that feels like , & co.?

... still too low-level ... still too low-level

Maybe what we need is an app store that feels like apt, yum & co.?

“There is in fact another system with very similar goals, which is now called [...]”

“This is, to put it diplomatically, a heaping pile of steaming bullshit [...] served by the Canonical press department.”

— Adam Williamson (Red Hat, Fedora)

https://www.happyassassin.net/ “This is, to put it diplomatically, a heaping pile of steaming bullshit [...] served by the Canonical press department.”

“There is in fact another system with very similar goals, which is now called Flatpak [...]”

— Adam Williamson (Red Hat, Fedora)

https://www.happyassassin.net/ http://flatpak.org/ “app bundles” are headed wrong

I difficulty to compose software packages

I no “big picture” integration work

I where’s the Corresponding Source?

I “app” model/ commons mismatch

Guix

1. transactional 2. software environment manager 3. & tools to customize environments 4. packaging tools $ guix package -i gcc-toolchain coreutils sed ...

$ eval ‘guix package --search-paths‘ ...

$ guix package --manifest=my-software.scm ... A simple matter of installing the deps, right?

Want to get started hacking on GIMP? Want to get started hacking on GIMP?

A simple matter of installing the deps, right? -2.8.14

python2--2.24.0 libexif-0.6.21

-2.40.13 gegl-0.2.0 +-2.24.28

libgsf-1.14.34 babl-0.1.10 -1.38.1

-pixbuf-2.32.3 atk-2.18.0 -1.0.5 python2-pygobject-2.28.6

-introspection-1.46.0 python2-pycairo-1.10.0 cups-2.1.0

cups-filters-1.4.0 -1.14.2 python-waf-1.8.8

icu4c-55.1 -0.37.0 font-dejavu-2.34

libcroco-0.6.8 cairo-1.14.2 -1.28 -0.6.31 ijs-9.14.0

-2.46.1 libspectre-0.2.7 intltool-0.51.0 libdaemon-0.14 libtool-2.4.6

tzdata-2015g pixman-0.32.8 openjpeg-1.5.2 ghostscript-9.14.0 cups-minimal-2.1.0 dbus-1.10.0 --parser-2.44 file-5.25 -1.15

libpng-1.5.26 qpdf-5.1.3 lcms-2.6 libpaper-1.1.24 graphite2-1.3.3 python-wrapper-3.4.3 -3.4.7 -wrapper-2.69 autoconf-wrapper-2.69

coreutils-8.24 python2-fonttools-2.5 pcre-8.38 libtiff-4.0.6 python-3.4.3 python-2.7.10 libjpeg-8d which-2.21 guile-2.0.11 nettle-3.1.1 libidn-1.32 autoconf-2.69

libcap-2.24 python2--18.3.1 bzip2-1.0.6 libffi-3.2.1 acl-2.2.52 gdbm-1.11 -8.6.4 sqlite-3.10.0 libjpeg-9a -4.3.42 gmp-6.1.0 libgc-7.4.2 libltdl-2.4.6 libunistring-0.9.6

attr-2.4.47 tcl-8.6.4 bison-3.0.4 readline-6.3 libxft-2.3.2 libatomic-ops-7.4.2 libxinerama-1.1.3 libxrandr-1.4.2 libxcursor-1.1.14 libxi-1.7.4 libxcomposite-0.4.4 libxdamage-1.1.4

flex-2.6.0 -2.11.94 ncurses-6.0 gettext-0.19.7 libxrender-0.9.8 libxext-1.3.3 libxfixes-5.0.1 compositeproto-0.4.2

freetype-2.6 -2.2.10 bison-2.7.1 gs-fonts-8.11 -2.1.0 libx11-1.6.2 fixesproto-5.0

-1.4.17 xextproto-7.3.0 libxcb-1.11 kbproto-1.0.6 inputproto-2.3.1

-1.1.28 -proto-1.11 libxau-1.0.8 xtrans-1.3.5 libxdmcp-1.1.1 randrproto-1.4.0

-2.9.3 python-minimal-wrapper-3.4.3 renderproto-0.11.1 libpthread-stubs-0.3 -1.6.4 xproto-7.0.26

python-minimal-3.4.3 libgpg-error-1.21 xineramaproto-1.2.1 util-macros-1.19.0 damageproto-1.2.1

zlib-1.2.8 openssl-1.0.2e pkg-config-0.29 libtasn1-4.7

perl-5.22.1 $ guix environment --container gimp ...

$ guix environment --container gimp \ --ad-hoc git autoconf automake gdb ... Creating package variants at the command line $ guix package -i git \ --with-input=openssl=libressl ...

$ guix package -i \ --with-source=./emacs-25.1rc0.tar.gz ... $ guix package -i emacs \ --with-source=./emacs-25.1rc0.tar.gz ...

$ guix package -i git \ --with-input=openssl=libressl ... Your personal packages or variants in GUIX PACKAGE PATH! Security updates “grafted” onto available binaries gimp-2.8.14

python2-pygtk-2.24.0 libexif-0.6.21

librsvg-2.40.13 gegl-0.2.0 gtk+-2.24.28

libgsf-1.14.34 babl-0.1.10 pango-1.38.1

gdk-pixbuf-2.32.3 atk-2.18.0 harfbuzz-1.0.5 python2-pygobject-2.28.6

gobject-introspection-1.46.0 python2-pycairo-1.10.0 cups-2.1.0

cups-filters-1.4.0 cairo-1.14.2 python-waf-1.8.8

icu4c-55.1 poppler-0.37.0 font-dejavu-2.34

libcroco-0.6.8 cairo-1.14.2 tar-1.28 avahi-0.6.31 ijs-9.14.0

glib-2.46.1 libspectre-0.2.7 intltool-0.51.0 libdaemon-0.14 libtool-2.4.6

tzdata-2015g pixman-0.32.8 openjpeg-1.5.2 ghostscript-9.14.0 cups-minimal-2.1.0 dbus-1.10.0 perl-xml-parser-2.44 file-5.25 automake-1.15

libpng-1.5.26 qpdf-5.1.3 lcms-2.6 libpaper-1.1.24 graphite2-1.3.3 python-wrapper-3.4.3 gnutls-3.4.7 autoconf-wrapper-2.69 autoconf-wrapper-2.69

coreutils-8.24 python2-fonttools-2.5 pcre-8.38 libtiff-4.0.6 python-3.4.3 python-2.7.10 libjpeg-8d which-2.21 guile-2.0.11 nettle-3.1.1 libidn-1.32 autoconf-2.69

libcap-2.24 python2-setuptools-18.3.1 bzip2-1.0.6 libffi-3.2.1 acl-2.2.52 gdbm-1.11 tk-8.6.4 sqlite-3.10.0 libjpeg-9a bash-4.3.42 gmp-6.1.0 libgc-7.4.2 libltdl-2.4.6 libunistring-0.9.6

attr-2.4.47 tcl-8.6.4 bison-3.0.4 readline-6.3 libxft-2.3.2 libatomic-ops-7.4.2 libxinerama-1.1.3 libxrandr-1.4.2 libxcursor-1.1.14 libxi-1.7.4 libxcomposite-0.4.4 libxdamage-1.1.4

flex-2.6.0 fontconfig-2.11.94 ncurses-6.0 gettext-0.19.7 libxrender-0.9.8 libxext-1.3.3 libxfixes-5.0.1 compositeproto-0.4.2

freetype-2.6 indent-2.2.10 bison-2.7.1 gs-fonts-8.11 expat-2.1.0 libx11-1.6.2 fixesproto-5.0

m4-1.4.17 xextproto-7.3.0 libxcb-1.11 kbproto-1.0.6 inputproto-2.3.1

libxslt-1.1.28 xcb-proto-1.11 libxau-1.0.8 xtrans-1.3.5 libxdmcp-1.1.1 randrproto-1.4.0

libxml2-2.9.3 python-minimal-wrapper-3.4.3 renderproto-0.11.1 libpthread-stubs-0.3 libgcrypt-1.6.4 xproto-7.0.26

python-minimal-3.4.3 libgpg-error-1.21 xineramaproto-1.2.1 util-macros-1.19.0 damageproto-1.2.1

zlib-1.2.8 openssl-1.0.2e pkg-config-0.29 libtasn1-4.7

perl-5.22.1 GuixSD: declarative OS config -libre Linux-libre initial RAM disk Linux-libre initial RAM disk Guile Linux-libre

initial RAM disk Guile

PID 1: GNU Shepherd services... Linux-libre

initial RAM disk Guile

PID 1: GNU Shepherd services... Guile Linux-libre

initial RAM disk Guile

PID 1: GNU Shepherd services... Guile

applications Status. 4 years!

I Aug. 2012 — GNU Hackers Meeting, Dusseldorf¨ I Nov. 2012 — dubbed GNU I Jan. 2013 — 0.1 I ... I July 2014 — 0.7, installable I ... I Nov. 2015 — 0.9.0, new service framework, etc. I Jan. 2016 — successful fundraiser for new build farm I Mar. 2016 — 0.10.0, grafts, GNOME I Aug. 2016 — 0.11.0, system tests, more services growth!

I 3,800+ packages

I 4 architectures

I binaries at https://hydra.gnu.org

I ≈500 new packages per release

Scaling up. importers & updaters

I guix import I 8.5 importers: GNU, Nix, PyPI, CPAN, CRAN, Hackage, ELPA, Gem, (GSoC 2016) I guix refresh I 11 updaters: GNU, GNOME, KDE, Xorg, ELPA, CRAN, Bioconductor, Hackage, PyPI, Gem, GitHub

I guix lint - cve (vulnerabilities) I 30 committers, but 5–10 frequent reviewers I 50+ emails per day, hard to track patches I Patchwork? QEMU’s patches? suggestions?

contributions

I documented processes, code of conduct

I consensus-based decision making

I tools: guix lint (12 checkers!), guix build --rounds=2, etc.

I good reviews & mentoring I 50+ emails per day, hard to track patches I Patchwork? QEMU’s patches? suggestions?

contributions

I documented processes, code of conduct

I consensus-based decision making

I tools: guix lint (12 checkers!), guix build --rounds=2, etc.

I good reviews & mentoring

I 30 committers, but 5–10 frequent reviewers contributions

I documented processes, code of conduct

I consensus-based decision making

I tools: guix lint (12 checkers!), guix build --rounds=2, etc.

I good reviews & mentoring

I 30 committers, but 5–10 frequent reviewers I 50+ emails per day, hard to track patches I Patchwork? QEMU’s patches? suggestions? maintainership, responsibilities

I Ricardo Wurmus co-maintainer since July! I currently ≈3 build farm sysadmins I ... but heading towards distributed sysadmin! I run GuixSD everywhere, version-control that I eventually: guix deploy build farm & funding

I hardware donated by FSF, TUM, GNU Spain, individuals

I 2 Novena boards (ARMv7) donated by Bunnie

I raised $8,000+ in January 2016

I 5,000 EUR donated by Igalia

I “Guix Europe” NPO created in France in 2016 build farm & funding

I hardware donated by FSF, TUM, GNU Spain, individuals

I 2 Novena boards (ARMv7) donated by Bunnie I raised $8,000+Thankin You!January :-) 2016 I 5,000 EUR donated by Igalia

I “Guix Europe” NPO created in France in 2016

Libreboot inside! No METM! What’s left before 1.0? getting to 1.0

I guix pull & authenticated checkouts

I performance & usability improvements I GuixSD I encrypted root file system I LVM support I more system services I fix bugs and glitches!

I self-hosted infra: guix publish and Cuirass your help needed!

I install the distribution

I use it, report bugs, add packages

I help with the infrastructure + admin

I donate hardware/money

I share your ideas! ludo@.org http://gnu.org/software/guix/ Copyright c 2010, 2012–2016 Ludovic Courtes` [email protected].

GNU GuixSD logo, CC-BY-SA 4.0, http://gnu.org/s/guix/graphics Copyright of other images included in this document is held by their respective owners.

This work is licensed under the Creative Commons Attribution-Share Alike 3.0 License. To view a copy of this license, visit 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.

At your option, you may instead copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the ; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at http://www.gnu.org/licenses/gfdl.html.

The source of this document is available from http://git.sv.gnu.org/cgit/guix/maintenance.git.