summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-10-28 01:05:37 +0200
committerLudovic Courtès <ludo@gnu.org>2016-10-28 01:05:37 +0200
commit0735cb03a91d6fe1e644b0409ecc790eefe8f543 (patch)
treee064a44394581fc21e1163a807a9d0148493c278
parent864ff90859459615872d3d3b5e1574ac08c3839a (diff)
downloadguix-artwork-0735cb03a91d6fe1e644b0409ecc790eefe8f543.tar
guix-artwork-0735cb03a91d6fe1e644b0409ecc790eefe8f543.tar.gz
website: Import news entries from Savannah as Haunt posts.
* website/post: New directory, with 54 .sxml files.
-rw-r--r--website/posts/back-from-the-european-lisp-symposium.sxml20
-rw-r--r--website/posts/back-from-the-gnu-hackers-meeting.sxml21
-rw-r--r--website/posts/boot-to-guile.sxml23
-rw-r--r--website/posts/chris-webber-talks-about-guix-in-chicago-september-30th.sxml41
-rw-r--r--website/posts/container-provisioning-with-guix.sxml55
-rw-r--r--website/posts/distro-of-the-linux-based-gnu-system-ported-to-mips.sxml30
-rw-r--r--website/posts/emacs-as-a-general-purpose-package-manager.sxml36
-rw-r--r--website/posts/gnome-in-guixsd.sxml126
-rw-r--r--website/posts/gnu-dmd-0.1-released.sxml16
-rw-r--r--website/posts/gnu-dmd-0.2-released.sxml19
-rw-r--r--website/posts/gnu-guix--guixsd-0.10.0-released.sxml93
-rw-r--r--website/posts/gnu-guix-0.1-released.sxml26
-rw-r--r--website/posts/gnu-guix-0.2-released.sxml32
-rw-r--r--website/posts/gnu-guix-0.3-released.sxml31
-rw-r--r--website/posts/gnu-guix-0.4-released;-happy-birthday-gnu.sxml35
-rw-r--r--website/posts/gnu-guix-0.5-released.sxml40
-rw-r--r--website/posts/gnu-guix-0.6-released.sxml41
-rw-r--r--website/posts/gnu-guix-0.7-released.sxml37
-rw-r--r--website/posts/gnu-guix-0.8-released.sxml64
-rw-r--r--website/posts/gnu-guix-0.8.1-released.sxml65
-rw-r--r--website/posts/gnu-guix-0.8.2-released.sxml78
-rw-r--r--website/posts/gnu-guix-0.8.3-released.sxml72
-rw-r--r--website/posts/gnu-guix-0.9.0-released.sxml84
-rw-r--r--website/posts/gnu-guix-and-guixsd-0.11.0-released.sxml84
-rw-r--r--website/posts/gnu-guix-at-fosdem.sxml15
-rw-r--r--website/posts/gnu-guix-looks-for-gsoc-students.sxml32
-rw-r--r--website/posts/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.sxml50
-rw-r--r--website/posts/gnu-guix-recruits-for-gsoc.sxml52
-rw-r--r--website/posts/gnu-guix-talk-at-opentechsummit-berlin-may-14th.sxml34
-rw-r--r--website/posts/gnu-guix-talk-in-boston-ma-(usa)-on-january-20th.sxml43
-rw-r--r--website/posts/gnu-guix-talk-in-rennes-france-november-9th.sxml47
-rw-r--r--website/posts/gnu-guix-welcomes-four-students-for-gsoc.sxml62
-rw-r--r--website/posts/gnu-guix-welcomes-three-students-for-gsoc.sxml45
-rw-r--r--website/posts/gsoc-update.sxml53
-rw-r--r--website/posts/guix--gsoc.sxml29
-rw-r--r--website/posts/guix-at-libreplanet-2016.sxml40
-rw-r--r--website/posts/guix-at-openbio-codefest-2014.sxml17
-rw-r--r--website/posts/guix-at-the-2014-gnu-hackers-meeting.sxml29
-rw-r--r--website/posts/guix-at-the-european-lisp-symposium.sxml15
-rw-r--r--website/posts/guix-gets-cross-compilation-support.sxml21
-rw-r--r--website/posts/guix-starts-fundraising-campaign-with-support-from-the-fsf.sxml58
-rw-r--r--website/posts/guix-tox-talk-at-pyconfr-october-17th.sxml41
-rw-r--r--website/posts/guixsd-system-tests.sxml172
-rw-r--r--website/posts/introducing-guix-a-package-manager-and-distro-for-gnu.sxml22
-rw-r--r--website/posts/join-gnu-guix-for-gsoc.sxml56
-rw-r--r--website/posts/join-guix-for-an-on-line-hackathon-on-sep.-28-29.sxml28
-rw-r--r--website/posts/join-us-for-a-guix-hackathon-on-sep.-27-28.sxml35
-rw-r--r--website/posts/meet-guix-at-fosdem.sxml66
-rw-r--r--website/posts/one-week-to-fosdem.sxml17
-rw-r--r--website/posts/porting-guix-and-guixsd.sxml56
-rw-r--r--website/posts/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.sxml41
-rw-r--r--website/posts/reproducible-builds-a-means-to-an-end.sxml115
-rw-r--r--website/posts/service-composition-in-guixsd.sxml149
-rw-r--r--website/posts/timely-delivery-of-security-updates.sxml116
54 files changed, 2725 insertions, 0 deletions
diff --git a/website/posts/back-from-the-european-lisp-symposium.sxml b/website/posts/back-from-the-european-lisp-symposium.sxml
new file mode 100644
index 0000000..648e122
--- /dev/null
+++ b/website/posts/back-from-the-european-lisp-symposium.sxml
@@ -0,0 +1,20 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Back from the European Lisp Symposium")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 5 6 2013 7200))
+ (content
+ div
+ (p "The "
+ (a (@ (href "http://www-sop.inria.fr/members/Manuel.Serrano/conferences/els13.html"))
+ "European Lisp Symposium")
+ " (ELS) is over now, and it\x92s been pleasant experience: thoughtful discussions, beautiful city, and parentheses all around. Thanks to all the Lispers and Schemers who made it to ELS for the friendly atmosphere!"
+ (br))
+ (p "The slides of the talk I gave on the design and implementation of Guix are "
+ (a (@ (href "http://www.gnu.org/software/guix/guix-els-20130603.pdf"))
+ "available on-line")
+ ". Nick Levine also published "
+ (a (@ (href "http://www.nicklevine.org/els2013/"))
+ "audio recordings")
+ " of most of the talks (thanks!)."
+ (br)))))
diff --git a/website/posts/back-from-the-gnu-hackers-meeting.sxml b/website/posts/back-from-the-gnu-hackers-meeting.sxml
new file mode 100644
index 0000000..c18d9bf
--- /dev/null
+++ b/website/posts/back-from-the-gnu-hackers-meeting.sxml
@@ -0,0 +1,21 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Back from the GNU Hackers Meeting")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 2 9 2013 7200))
+ (content
+ div
+ (p "The "
+ (a (@ (href "http://www.gnu.org/ghm/2013/paris"))
+ "GNU Hackers Meeting")
+ " took place last week in Paris. As usual, it was a nice place to meet fellow hackers, grow new ideas, and to learn about what other projects are up to. Thanks to "
+ (a (@ (href "http://www.irill.org")) "IRILL")
+ " for hosting the event, and a big thanks to "
+ (a (@ (href "http://ageinghacker.net/")) "Luca")
+ " for the very professional organization!"
+ (br))
+ (p "Several Guix hackers were present, with no less than "
+ (a (@ (href "http://www.gnu.org/software/guix/#talks"))
+ "two talks advertising Guix")
+ ". The first talk demoed the package manager, both from a user's and from a hacker's perspective, and with a look forward. The second talk delivered a \"packaging how-to\" that should be helpful to anyone willing to contribute to the GNU system distribution."
+ (br)))))
diff --git a/website/posts/boot-to-guile.sxml b/website/posts/boot-to-guile.sxml
new file mode 100644
index 0000000..815c160
--- /dev/null
+++ b/website/posts/boot-to-guile.sxml
@@ -0,0 +1,23 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Boot-to-Guile!")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 16 2 2013 3600))
+ (content
+ div
+ (p "As a contribution to "
+ (a (@ (href "http://lists.gnu.org/archive/html/guile-user/2013-01/msg00007.html"))
+ "Guile's birthday potluck")
+ ", Guix has been extended with the infrastructure to build "
+ (a (@ (href "http://lists.gnu.org/archive/html/guile-user/2013-02/msg00131.html"))
+ "a Boot-to-Guile QEMU disk image")
+ "."
+ (br))
+ (p "The image has GRUB to boot Linux-Libre, which in turn runs directly Guile and an init script in Scheme from its initrd. To put it differently, it boots Guile and its device driver environment known as Linux-Libre. :-)"
+ (br))
+ (p "In addition to being fun, it actually has a practical impact. First, Guix now has infrastructure to create bootable GNU/Linux-Libre QEMU images."
+ (br))
+ (p "Second, using Guile in the initrd proves to be very convenient: all the expressivity and power of Guile and Scheme, without the complexity and code duplication associated with specific tool suites like klibc, Ash, and BusyBox."
+ (br))
+ (p "Happy birthday Guile 2.0, and happy hacking!"
+ (br)))))
diff --git a/website/posts/chris-webber-talks-about-guix-in-chicago-september-30th.sxml b/website/posts/chris-webber-talks-about-guix-in-chicago-september-30th.sxml
new file mode 100644
index 0000000..cbabfde
--- /dev/null
+++ b/website/posts/chris-webber-talks-about-guix-in-chicago-september-30th.sxml
@@ -0,0 +1,41 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "Chris Webber talks about Guix in Chicago, September 30th")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 18 9 2015 7200))
+ (content
+ div
+ (p (a (@ (href "http://dustycloud.org/"))
+ "Chris Webber")
+ " of "
+ (a (@ (href "http://mediagoblin.org/"))
+ "MediaGoblin")
+ " fame "
+ (a (@ (href "https://chicagolug.org/meetings/2015-09-30.html"))
+ "will be giving two talks")
+ " for the Chicago GNU/Linux User Group meeting on September 30th. The first talk will discuss the state of federation on the Web, while the second one is entitled "
+ (em "Functional Package Management and Deployment with Guix")
+ ":"
+ (br))
+ (p (em "Tired of being stuck after an upgrade? Wish your operating system could roll forward and backwards in time, more like Git? Want a way to get really reproducible software? Or just want a better alternative to $YOUR_LANGUAGE's stressful packaging ecosystem you can run on an existing distro? And why on earth would you want something called a \"symlink forest\" anyway? Discover all this and more in this exciting talk about the GNU Guix project!")
+ (br))
+ (p "If you're in the Chicago area, do not miss Chris!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/container-provisioning-with-guix.sxml b/website/posts/container-provisioning-with-guix.sxml
new file mode 100644
index 0000000..5328ccb
--- /dev/null
+++ b/website/posts/container-provisioning-with-guix.sxml
@@ -0,0 +1,55 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Container provisioning with Guix")
+ (author . "David Thompson")
+ (date unquote
+ (make-date 0 0 0 0 27 10 2015 3600))
+ (content
+ div
+ (p "The upcoming release of GNU Guix will feature an implementation of Linux containers named, following Scheme conventions, "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/build/linux-container.scm#n215"))
+ "call-with-container")
+ ". Containers are a lightweight virtualization technique used to isolate processes sharing the same host machine. A container has its own separate global kernel resources such as mount points, networking interfaces, users, hostname, and processes."
+ (br))
+ (p "Containers are a hot topic, and there are many implementations available, but Guix containers are built differently. Compared to other container implementations such as Docker, the most notable difference is that disk images and layered file systems are not used. Instead, the necessary software packages are inserted into containers via simple bind mounts. A pleasant consequence of this structure is that software is deduplicated system-wide. A package used in any number of containers is only on disk in a single place. Additionally, some containers may be created by unprivileged users, allowing any Guix user to create isolated sandboxes for their applications to play in."
+ (br))
+ (p "One of the programs that uses call-with-container is "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-environment.html"))
+ "'guix environment'")
+ ", the generic virtual development environment creation tool. A --container flag has been introduced that will, as the name suggests, spawn the environment inside of a container. The container only has file system access to the directory from which 'guix environment' was invoked and the read-only store directories of the dependencies. Additional directories and files may be shared from the host using the --expose and --share flags. For example, a \"containerized\" development environment that is capable of building Guix from source may be created like so:"
+ (br))
+ (div (@ (class "example"))
+ (pre "guix environment --container guix "))
+ (p "Likewise, the "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-system.html"))
+ "'guix system'")
+ " tool has been extended with a 'container' action for creating scripts that launch full-blown GuixSD containers:"
+ (br))
+ (div (@ (class "example"))
+ (pre "guix system container my-system.scm "))
+ (p "Please note, however, that GuixSD containers may only be created by the root user at this time."
+ (br))
+ (p "In order to use call-with-container, a kernel with support for user namespaces is required. User namespaces were introduced in Linux 3.8, but several distributions disable them by default."
+ (br))
+ (p "There is still much work to be done in order to make call-with-container a robust container platform. For example, control groups could be used to arbitrarily limit the resources a container can consume, and virtual network interfaces could be used to give containers access to the net without sharing the host system's network interfaces. If you would like to help improve call-with-container, or any other part of the Guix codebase, please "
+ (a (@ (href "http://www.gnu.org/software/guix/contribute/"))
+ "join the fun")
+ "!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/distro-of-the-linux-based-gnu-system-ported-to-mips.sxml b/website/posts/distro-of-the-linux-based-gnu-system-ported-to-mips.sxml
new file mode 100644
index 0000000..e2fc86a
--- /dev/null
+++ b/website/posts/distro-of-the-linux-based-gnu-system-ported-to-mips.sxml
@@ -0,0 +1,30 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "Distro of the Linux-based GNU system ported to MIPS")
+ (author . "Ludovic Courtès")
+ (date unquote
+ (make-date 0 0 0 0 28 10 2013 3600))
+ (content
+ div
+ (p "The Guix-based distro "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2013-10/msg00174.html"))
+ "has been ported to MIPS64")
+ ", specifically to the "
+ (a (@ (href "http://en.wikipedia.org/wiki/Loongson"))
+ "Loongson")
+ " processors notably found in the free-software-friendly "
+ (a (@ (href "http://en.wikipedia.org/wiki/Lemote#Netbook_computers"))
+ "Yeeloong laptops")
+ "."
+ (br))
+ (p "Technically, "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/guix.html#Porting"))
+ "\"porting\"")
+ " here means that the \"bootstrap binaries\" were cross-compiled to +mips64el-linux-gnu+, and then used as an input to the "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/guix.html#Bootstrapping"))
+ "distro's bootstrapping process")
+ "---a purely functional, and trackable, process."
+ (br))
+ (p "Thanks to Mark and Nikita for their tireless work to make this happen!"
+ (br)))))
diff --git a/website/posts/emacs-as-a-general-purpose-package-manager.sxml b/website/posts/emacs-as-a-general-purpose-package-manager.sxml
new file mode 100644
index 0000000..e2ea5c3
--- /dev/null
+++ b/website/posts/emacs-as-a-general-purpose-package-manager.sxml
@@ -0,0 +1,36 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "Emacs as a general-purpose package manager")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 4 9 2014 7200))
+ (content
+ div
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ ", the package manager written for the GNU system, now has a neat Emacs user interface! It offers a visual, user-friendly alternative to the guix package "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-package.html"))
+ "command-line interface")
+ "."
+ (br))
+ (p "For those familiar with "
+ (a (@ (href "http://www.gnu.org/software/emacs/manual/html_node/emacs/Packages.html"))
+ "package.el")
+ ", the main user interface is quite similar: commands like guix-newest-available-packages, guix-search-by-regexp, and guix-installed-packages present a browsable list of packages. Individual packages can be selected, which displays additional details and presents a button to install or delete them. It is also possible to mark a set of packages for installation, upgrade, or deletion, and execute the set of operations in a single transaction."
+ (br))
+ (p "The interface has been developed by Alex Kost and was merged in Guix a day ago. It uses "
+ (a (@ (href "http://nongnu.org/geiser/"))
+ "Geiser")
+ ", the beloved Guile/Emacs interface and development environment, to communicate with the underlying Guile process. That Guile process, in turn, simply uses Guix and "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Package-Modules.html"))
+ "the whole distribution")
+ " as libraries\x97the goodness of embedding the "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Defining-Packages.html"))
+ "packaging DSL")
+ " in a general-purpose language."
+ (br))
+ (p "Try it out and "
+ (a (@ (href "http://www.gnu.org/software/guix/#contact"))
+ "let us know")
+ " what you think!"
+ (br)))))
diff --git a/website/posts/gnome-in-guixsd.sxml b/website/posts/gnome-in-guixsd.sxml
new file mode 100644
index 0000000..1a3c3d6
--- /dev/null
+++ b/website/posts/gnome-in-guixsd.sxml
@@ -0,0 +1,126 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNOME in GuixSD")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 23 3 2016 3600))
+ (content
+ div
+ (p "It\x92s a feature that many users were waiting for: proper "
+ (a (@ (href "https://www.gnome.org/")) "GNOME")
+ " support in GuixSD. Good news: the forthcoming Guix and GuixSD release will give you exactly that! Don\x92t miss the obligatory "
+ (a (@ (href "https://www.gnu.org/software/guix/screenshots/0.9.1/gnome-totem-epiphany.png"))
+ "screenshot")
+ "!"
+ (br))
+ (p "You would think adding GNOME is routine distro work involving a lot of packaging and bits of plumbing that\x92s already been done a hundred times, which is probably true! Yet, adding GNOME support turned out to be interesting in many ways: it\x92s a good test for GuixSD\x92s declarative operating system configuration framework, it\x92s a way to formalize how this whole software stack fits together, and it\x92s been an insightful journey into GNU/Linux desktop plumbing!"
+ (br))
+ (p "Of course, a lot of software needs to be packaged to begin with. This had been on-going for some time, culminating with the addition of a "
+ (a (@ (href "https://www.gnu.org/software/guix/packages/#gnome"))
+ "gnome meta-package")
+ " thanks to the hard work of ??? (Sou Bunnbu) and other hackers. On the way, we added "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2015-12/msg00173.html"))
+ "an auto-updater for GNOME packages")
+ ", because all these package recipes need love."
+ (br))
+ (p "The more interesting parts were system integration. Modern GNOME/Freedesktop environments rely on a number of daemons, most of which talk over "
+ (a (@ (href "https://www.freedesktop.org/wiki/Software/dbus/"))
+ "D-Bus")
+ ", and extending each other\x92s functionality: udev, udisks, upower, colord, geoclue, and polkit, to name a few. Being able to "
+ (em "compose")
+ " all these system services was one of the driving use cases behind "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8412"))
+ "the design of GuixSD\x92s new service composition framework")
+ ". With this design, we knew we were able to have fine control over the "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Service-Composition.html"))
+ "service composition graph")
+ ". Challenge #1 overcome!"
+ (br))
+ (p "Since GuixSD uses the "
+ (a (@ (href "https://www.gnu.org/software/shepherd/"))
+ "GNU Shepherd")
+ " and not systemd as its init system, we needed a way to provide the "
+ (a (@ (href "https://freedesktop.org/wiki/Software/systemd/logind/"))
+ "\x93logind\x94")
+ " functionality that systemd implements, and which allows GNOME to know about "
+ (a (@ (href "https://www.freedesktop.org/wiki/Software/systemd/multiseat/"))
+ "users, sessions, and seats")
+ "."
+ (br))
+ (p "So Andy Wingo courageously started by "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2015-04/msg00352.html"))
+ "extracting")
+ " logind from systemd, leading to "
+ (a (@ (href "https://github.com/wingo/elogind"))
+ "\x93elogind\x94")
+ ". At this point, we had this daemon that could keep track of logged-in users and active sessions, and which GNOME could talk to over D-Bus\x85 provided all the relevant "
+ (a (@ (href "http://www.linux-pam.org/"))
+ "PAM services")
+ " would use the pam_elogind module so that elogind knows when a user logs in and out, as Andy "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00439.html"))
+ "nicely explained it")
+ "."
+ (br))
+ (p "This pam_elogind thing is a typical example of a cross-cutting concern: "
+ (em "if")
+ " you use elogind, "
+ (em "then")
+ " you want all the relevant login-related PAM services (mingetty, the X login manager, commands such as su, the SSH daemon, etc.) to use pam_elogind. To achieve that, we "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/commit/?id=12c00bca92e3eef2b86565924bbefc39397b5497"))
+ "updated")
+ " our PAM service such that it could be "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2016-02/msg00163.html"))
+ "extended")
+ " with such "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/commit/?id=e7ad0d586251383a4c8b00222e8dec61d491f03b"))
+ "cross-cutting modules")
+ ". At last, we had proper logind support! "
+ (br))
+ (p "At this point, the brave could start using GNOME on GuixSD but would soon realize that, for example, the \x93power off\x94 button wouldn\x92t have the desired effect, or that changing a laptop\x92s backlight wouldn\x92t work because "
+ (a (@ (href "https://www.freedesktop.org/wiki/Software/polkit/"))
+ "polkit")
+ ", the daemon that allows unprivileged users to perform privileged operations like that one, was "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2016-02/msg01000.html"))
+ "missing essential policy files")
+ "."
+ (br))
+ (p "You would think you can finally change the brightness of your screen, but no! Turns out that polkit would "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2016-02/msg01170.html"))
+ "refuse to run gnome-setting-daemon\x92s backlight helper program")
+ " because "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2016-03/msg00247.html"))
+ "elogind happened to fail to map PIDs to sessions")
+ ". Whatever."
+ (br))
+ (p "Of course there were still a bunch of embarrassing glitches such as "
+ (a (@ (href "http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22666"))
+ "GNOME suspending right after it wakes up from suspend")
+ ", failure to start in QEMU, or "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2016-03/msg00690.html"))
+ "the lack of GNOME\x92s favorite font")
+ ". Well, it seems that all these are gone now!"
+ (br))
+ (p "GuixSD users can now enable GNOME by adding "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2016-03/msg00639.html"))
+ "one line")
+ " in their "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Using-the-Configuration-System.html"))
+ "operating system configuration")
+ ". Overall, this has been a nice experience involving a variety of areas."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-dmd-0.1-released.sxml b/website/posts/gnu-dmd-0.1-released.sxml
new file mode 100644
index 0000000..e054e1f
--- /dev/null
+++ b/website/posts/gnu-dmd-0.1-released.sxml
@@ -0,0 +1,16 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU dmd 0.1 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 2 12 2013 3600))
+ (content
+ div
+ (p (a (@ (href "http://www.gnu.org/software/dmd"))
+ "GNU dmd")
+ " 0.1 has been "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2013-12/msg00014.html"))
+ "released")
+ ", providing many improvements and bug fixes."
+ (br))
+ (p "GNU dmd is a dependency-based service manager meant to be used as the init system in GNU. It is written in Guile Scheme."
+ (br)))))
diff --git a/website/posts/gnu-dmd-0.2-released.sxml b/website/posts/gnu-dmd-0.2-released.sxml
new file mode 100644
index 0000000..348d503
--- /dev/null
+++ b/website/posts/gnu-dmd-0.2-released.sxml
@@ -0,0 +1,19 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU dmd 0.2 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 8 7 2014 7200))
+ (content
+ div
+ (p (a (@ (href "http://www.gnu.org/software/dmd"))
+ "GNU dmd")
+ " 0.2 has been "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2014-07/msg00039.html"))
+ "released")
+ ". It provides new features such as the ability to load new definitions for existing services, as well as bug fixes and an improved "
+ (a (@ (href "http://www.gnu.org/software/dmd/manual"))
+ "manual")
+ "."
+ (br))
+ (p "GNU dmd is a dependency-based service manager meant to be used as the init system in GNU. It is written in Guile Scheme."
+ (br)))))
diff --git a/website/posts/gnu-guix--guixsd-0.10.0-released.sxml b/website/posts/gnu-guix--guixsd-0.10.0-released.sxml
new file mode 100644
index 0000000..a79b26b
--- /dev/null
+++ b/website/posts/gnu-guix--guixsd-0.10.0-released.sxml
@@ -0,0 +1,93 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix & GuixSD 0.10.0 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 29 3 2016 7200))
+ (content
+ div
+ (p "We are pleased to announce the new beta release of GNU\xa0Guix and GuixSD, version 0.10.0!"
+ (br))
+ (p "The release comes with USB installation images to install the standalone "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/System-Installation.html"))
+ "GuixSD")
+ ", and with tarballs to install the package manager on top of a running GNU/Linux system, either "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Requirements.html"))
+ "from source")
+ " or "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Binary-Installation.html"))
+ "from binaries")
+ "."
+ (br))
+ (p "It\x92s been almost 5 months since the previous release, and many things happened! The highlights include:"
+ (br))
+ (ul (li "Our \x93grafting\x94 mechanism for "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Security-Updates.html"))
+ "security updates")
+ " has been fixed to be generally applicable. Read "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8470"))
+ "this post")
+ " for more information on the challenges behind this.\n")
+ (li (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Substitutes.html"))
+ "Substitutes")
+ " are now fetched by default over HTTPS and from a faster mirror.\n")
+ (li "A number of packages have been made "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8407"))
+ "bit-for-bit reproducible")
+ ", including glibc, Perl, Emacs packages, and Python packages. This work was simplified by "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-challenge.html"))
+ "guix challenge")
+ " and by the new "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Additional-Build-Options.html#Additional-Build-Options"))
+ "--check")
+ " and "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Common-Build-Options.html#Common-Build-Options"))
+ "--rounds")
+ " build options, and also by the insight gathered from "
+ (a (@ (href "https://reproducible-builds.org/"))
+ "other reproducible builds efforts")
+ ".\n")
+ (li "GNOME is "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8491"))
+ "now available")
+ ", via the "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Desktop-Services.html"))
+ "gnome-desktop-service procedure")
+ ".\n")
+ (li (a (@ (href "https://www.gnu.org/software/guix/packages/"))
+ "639 new packages")
+ ", about as many package updates, greatly simplified by the addition of new "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-import.html"))
+ "importers")
+ " and "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-refresh.html"))
+ "auto-updaters")
+ ".\n")
+ (li "A wealth of "
+ (a (@ (href "https://debbugs.gnu.org/cgi/pkgreport.cgi?pkg=guix#_4_2_5"))
+ "bug fixes")
+ ", documentation improvements, "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Emacs-Interface.html"))
+ "Emacs niceties")
+ ", and more!\n"))
+ (p "See "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2016-03/msg01241.html"))
+ "https://lists.gnu.org/archive/html/guix-devel/2016-03/msg01241.html")
+ " for details."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-0.1-released.sxml b/website/posts/gnu-guix-0.1-released.sxml
new file mode 100644
index 0000000..e72ef7a
--- /dev/null
+++ b/website/posts/gnu-guix-0.1-released.sxml
@@ -0,0 +1,26 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.1 released!")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 18 1 2013 3600))
+ (content
+ div
+ (p "Version 0.1 of the GNU Guix functional package manager and its baby distribution of user-land software has been released. See "
+ (a (@ (href "http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00191.html"))
+ "http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00191.html")
+ " for the original announcement."
+ (br))
+ (p "In addition to standard package management features, Guix supports"
+ (br)
+ "\ntransactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection (more details "
+ (a (@ (href "http://www.gnu.org/software/guix/manual"))
+ "in the manual")
+ ".)"
+ (br))
+ (p "The distro is not a bootable distro yet, but rather one to be installed on top of a running GNU/Linux system. It includes GNU libc 2.17, GCC 4.7.2, GNU Emacs 24.2, GNU Guile 2.0.7, and more."
+ (br))
+ (p "Building the distribution is a cooperative effort, and you are invited to "
+ (a (@ (href "http://www.gnu.org/software/guix/#contribute"))
+ "join")
+ "!"
+ (br)))))
diff --git a/website/posts/gnu-guix-0.2-released.sxml b/website/posts/gnu-guix-0.2-released.sxml
new file mode 100644
index 0000000..5ddaae0
--- /dev/null
+++ b/website/posts/gnu-guix-0.2-released.sxml
@@ -0,0 +1,32 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.2 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 12 5 2013 7200))
+ (content
+ div
+ (p "The second alpha release of "
+ (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is available. It comes with a number of new features, notably:"
+ (br))
+ (ul (li "The "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-package.html"))
+ "\"guix package\"")
+ " command supports upgrades of user profiles and full-text package searches.\n")
+ (li "Binary packages are "
+ (a (@ (href "http://hydra.gnu.org:3000/jobset/gnu/master"))
+ "continuously built")
+ " and may be transparently downloaded as \"substitutes\" to the result of a local build.\n")
+ (li "The new "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-pull.html"))
+ "\"guix pull\"")
+ " command updates the user's copy of Guix and its distro from Git.\n")
+ (li "New Scheme interfaces are available to facilitate package management in various ways.\n"))
+ (p "The distribution has grown to more than 400 packages; noteworthy additions include Xorg and TeXLive."
+ (br))
+ (p "See the "
+ (a (@ (href "http://lists.gnu.org/archive/html/bug-guix/2013-05/msg00034.html"))
+ "original announcement")
+ " for more information."
+ (br)))))
diff --git a/website/posts/gnu-guix-0.3-released.sxml b/website/posts/gnu-guix-0.3-released.sxml
new file mode 100644
index 0000000..2a59b10
--- /dev/null
+++ b/website/posts/gnu-guix-0.3-released.sxml
@@ -0,0 +1,31 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.3 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 17 7 2013 7200))
+ (content
+ div
+ (p "The third alpha release of "
+ (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is available. The highlights are:"
+ (br))
+ (ul (li "Binary packages are now "
+ (a (@ (href "http://hydra.gnu.org/jobset/gnu/master"))
+ "continuously built")
+ " for both x86_64 and i686.\n")
+ (li (a (@ (href "http://www.gnu.org/software/guix/manual/guix.html#index-cross_002dcompilation-1"))
+ "Cross-")
+ (a (@ (href "http://www.gnu.org/software/guix/manual/guix.html#index-cross_002dcompilation"))
+ "compilation")
+ " support has been added.\n")
+ (li "33 packages were added to the distro, notably GTK+ and related libraries, and 25 were upgraded.\n")
+ (li "Many bug fixes and "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/"))
+ "improvements to the manual")
+ ".\n"))
+ (p "See "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2013-07/msg00046.html"))
+ "the original announcement")
+ " for details."
+ (br)))))
diff --git a/website/posts/gnu-guix-0.4-released;-happy-birthday-gnu.sxml b/website/posts/gnu-guix-0.4-released;-happy-birthday-gnu.sxml
new file mode 100644
index 0000000..5d3d890
--- /dev/null
+++ b/website/posts/gnu-guix-0.4-released;-happy-birthday-gnu.sxml
@@ -0,0 +1,35 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "GNU Guix 0.4 released; happy birthday, GNU!")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 27 9 2013 7200))
+ (content
+ div
+ (p "We are pleased to celebrate "
+ (a (@ (href "http://www.gnu.org/gnu30"))
+ "GNU's 30th anniversary")
+ " with the fourth alpha release of "
+ (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ "."
+ (br))
+ (p "The highlights are:" (br))
+ (ul (li "New APIs for the instantiation of the global system environment, and for the creation of QEMU images of the system.\n")
+ (li "New --list-generations and --delete-generations command-line options.\n")
+ (li "60 packages were added to the distro, and 27 were upgraded, notably glibc.\n"))
+ (p "In addition, we provide a virtual machine image showing preliminary work toward getting a stand-alone GNU system. It features "
+ (a (@ (href "http://www.gnu.org/software/dmd"))
+ "GNU dmd")
+ ", a dependency-based init system written in Guile Scheme, and of course it comes with Guix installed. The image is self-reproducible in that the recipe to build it is part of Guix."
+ (br))
+ (p "See the "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2013-09/msg00235.html"))
+ "original announcement")
+ " for details."
+ (br))
+ (p "Join us on-line in the next couple of days for a "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=7720"))
+ "hackathon")
+ " to celebrate GNU's birthday!"
+ (br)))))
diff --git a/website/posts/gnu-guix-0.5-released.sxml b/website/posts/gnu-guix-0.5-released.sxml
new file mode 100644
index 0000000..4f92e7f
--- /dev/null
+++ b/website/posts/gnu-guix-0.5-released.sxml
@@ -0,0 +1,40 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.5 released")
+ (author . "Ludovic Courtès")
+ (date unquote
+ (make-date 0 0 0 0 11 12 2013 3600))
+ (content
+ div
+ (p "We are pleased to announce the fifth alpha release of "
+ (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ "."
+ (br))
+ (p "The highlights are:" (br))
+ (ul (li "Port to the Loongson MIPS64 processors, using the n32 ABI.\n")
+ (li "New "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/guix.html#The-Store-Monad"))
+ "monad interface")
+ " to handle operations on the store.\n")
+ (li "New "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/guix.html#System-Configuration"))
+ "whole-system configuration API")
+ ", allowing users to declare and instantiate a machine's settings.\n")
+ (li "110 new packages, including \"big ones\" such as "
+ (a (@ (href "http://www.gnu.org/software/gnuzilla/"))
+ "GNU IceCat")
+ " and hacker's favorites such as "
+ (a (@ (href "http://www.markwitmer.com/guile-xcb/guile-wm.html"))
+ "Guile-WM")
+ ". ;-)\n"))
+ (p "An updated QEMU virtual machine is provided, featuring Guix 0.5 and "
+ (a (@ (href "http://www.gnu.org/software/dmd"))
+ "dmd")
+ " 0.1."
+ (br))
+ (p "See "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2013-12/msg00061.html"))
+ "the original announcement")
+ " for details."
+ (br)))))
diff --git a/website/posts/gnu-guix-0.6-released.sxml b/website/posts/gnu-guix-0.6-released.sxml
new file mode 100644
index 0000000..004fbe4
--- /dev/null
+++ b/website/posts/gnu-guix-0.6-released.sxml
@@ -0,0 +1,41 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.6 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 9 4 2014 7200))
+ (content
+ div
+ (p "We are pleased to announce the sixth alpha release of "
+ (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ "."
+ (br))
+ (p "This release provides a bunch of new features, among other things:"
+ (br))
+ (ul (li (a (@ (href "http://www.gnu.org/software/guix/manual/guix.html#Substitutes"))
+ "\"Substitutes\"")
+ " (pre-built binaries) must now be signed and authorized to be installed;\n")
+ (li "Builds can be "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/guix.html#Daemon-Offload-Setup"))
+ "offloaded")
+ " to other build machines over SSH; we use this facility for our "
+ (a (@ (href "http://hydra.gnu.org"))
+ "build farm")
+ ".\n")
+ (li "The +guix build+ command has a "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/guix.html#Invoking-guix-build"))
+ "new --with-source option")
+ " that allows a package to be built from a tarball other than that specified in the source. This is notably useful for maintainers who want to test pre-releases of their package.\n")
+ (li (a (@ (href "http://www.gnu.org/software/guix/package-list.html"))
+ "91 new packages")
+ ", including GNU Octave, and many upgrades, notably GNU libc 2.19.\n"))
+ (p "An updated QEMU x86_64 image is provided, featuring Guix 0.6 and "
+ (a (@ (href "http://www.gnu.org/software/dmd"))
+ "dmd")
+ " 0.1. It starts an X server with WindowMaker."
+ (br))
+ (p "See the "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00160.html"))
+ "original announcement")
+ " for details."
+ (br)))))
diff --git a/website/posts/gnu-guix-0.7-released.sxml b/website/posts/gnu-guix-0.7-released.sxml
new file mode 100644
index 0000000..ab53dce
--- /dev/null
+++ b/website/posts/gnu-guix-0.7-released.sxml
@@ -0,0 +1,37 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.7 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 25 7 2014 7200))
+ (content
+ div
+ (p "We are pleased to announce the next alpha release of GNU Guix, version 0.7."
+ (br))
+ (p "This release is an important milestone for the project since it is the first to provide an image to install the GNU system from a USB stick."
+ (br))
+ (p "Noteworthy features for the release are:"
+ (br))
+ (ul (li "The GNU operating system can now be "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/System-Installation.html"))
+ "installed")
+ ". Try it out!\n")
+ (li "To make it possible the "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-system"))
+ "guix system")
+ " command has been augmented with new options, and support for 'operating-system' "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Using-the-Configuration-System.html"))
+ "declarations")
+ " has been vastly improved.\n")
+ (li "Programming has been simplified with the introduction of "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/G_002dExpressions.html"))
+ "\"G-expressions\"")
+ ", which capture dependencies used by build-side expressions.\n")
+ (li "More than 130 "
+ (a (@ (href "http://www.gnu.org/software/guix/package-list.html"))
+ "packages")
+ " have been added, including \"big ones\" like the GIMP and Maxima.\n"))
+ (p "See the "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2014-07/msg00292.html"))
+ "original announcement")
+ " for details."
+ (br)))))
diff --git a/website/posts/gnu-guix-0.8-released.sxml b/website/posts/gnu-guix-0.8-released.sxml
new file mode 100644
index 0000000..ec5a100
--- /dev/null
+++ b/website/posts/gnu-guix-0.8-released.sxml
@@ -0,0 +1,64 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.8 released")
+ (author . "Ludovic Courtès")
+ (date unquote
+ (make-date 0 0 0 0 18 11 2014 3600))
+ (content
+ div
+ (p "We are pleased to announce the next alpha release of GNU Guix, version 0.8."
+ (br))
+ (p "The release comes both with a source tarball, which allows you to install it "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Installation.html"))
+ "on top a running GNU/Linux system")
+ ", and a USB installation image to install the "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/System-Installation.html"))
+ "standalone operating system")
+ "."
+ (br))
+ (p "The highlights for this release include:"
+ (br))
+ (ul (li "A new "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-environment.html"))
+ "guix environment")
+ " command for the bookkeeping and reproduction of development environments.\n")
+ (li "An "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Emacs-Interface.html"))
+ "Emacs user interface")
+ " as an alternative to the "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-package.html"))
+ "command-line interface")
+ " for package management.\n")
+ (li "An "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Security-Updates.html"))
+ "experimental mechanism")
+ " for faster deployment of security updates.\n")
+ (li "operating-system declarations can now "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/operating_002dsystem-Reference.html"))
+ "specify")
+ " swap devices, "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Mapped-Devices.html"))
+ "mapped devices")
+ ", firmware, and more.\n")
+ (li "More developer tools, notably "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-lint.html"))
+ "guix lint")
+ " and "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-import.html"))
+ "guix import")
+ ".\n")
+ (li "162 packages have been added, with more than 100 package updates.\n"))
+ (p "See the "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2014-11/msg00379.html"))
+ "original announcement")
+ " for details."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is the functional package manager for the GNU system, and a distribution thereof."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. It also offers a declarative approach to operating system configuration management. Guix uses low-level mechanisms from the Nix package manager, with Guile Scheme programming interfaces."
+ (br))
+ (p "At this stage the distribution can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el."
+ (br)))))
diff --git a/website/posts/gnu-guix-0.8.1-released.sxml b/website/posts/gnu-guix-0.8.1-released.sxml
new file mode 100644
index 0000000..8d68ac3
--- /dev/null
+++ b/website/posts/gnu-guix-0.8.1-released.sxml
@@ -0,0 +1,65 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.8.1 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 29 1 2015 3600))
+ (content
+ div
+ (p "We are pleased to announce the next alpha release of GNU Guix, version 0.8.1."
+ (br))
+ (p "The release comes both with a source tarball, which allows you to install it "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Installation.html"))
+ "on top of a running GNU/Linux system")
+ ", and a USB installation image to install the standalone "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/System-Installation.html"))
+ "Guix System Distribution")
+ "."
+ (br))
+ (p "The highlights for this release include:"
+ (br))
+ (ul (li "A new "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8175"))
+ "port to ARMv7")
+ ".\n")
+ (li "New "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-system.html"))
+ "guix system vm")
+ " options to share file systems with the host.\n")
+ (li "New configuration interfaces for "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Locales.html"))
+ "locale definitions")
+ " and for "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Base-Services.html"))
+ "nscd")
+ ".\n")
+ (li "The addition of a CPAN importer to "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-import.html"))
+ "guix import")
+ ", and more checkers for "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-lint.html"))
+ "guix lint")
+ ".\n")
+ (li "164 new packages and 222 package updates.\n")
+ (li "Many "
+ (a (@ (href "http://bugs.gnu.org/guix"))
+ "bug fixes")
+ " and usability improvements.\n"))
+ (p "See the "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2015-01/msg00443.html"))
+ "original announcement")
+ " for details."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution is an advanced distribution of the GNU system."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. It also offers a declarative approach to operating system configuration management. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language."
+ (br))
+ (p "At this stage the Guix System Distribution can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-0.8.2-released.sxml b/website/posts/gnu-guix-0.8.2-released.sxml
new file mode 100644
index 0000000..48b7fea
--- /dev/null
+++ b/website/posts/gnu-guix-0.8.2-released.sxml
@@ -0,0 +1,78 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.8.2 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 14 5 2015 7200))
+ (content
+ div
+ (p "We are pleased to announce the next alpha release of GNU Guix, version 0.8.2."
+ (br))
+ (p "The release comes both with tarballs, which allow you to install it on top of a running GNU/Linux system, either "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Requirements.html"))
+ "from source")
+ " or "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Binary-Installation.html"))
+ "from a binaries")
+ ", and a USB installation image to install the standalone "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/System-Installation.html"))
+ "Guix System Distribution")
+ " (GuixSD)."
+ (br))
+ (p "The highlights for this release include:"
+ (br))
+ (ul (li "The "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Binary-Installation.html"))
+ "new method")
+ " to install Guix on a running system from binaries, which can greatly simplify installation.\n")
+ (li "GuixSD has new configuration interfaces for things like the "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Name-Service-Switch.html"))
+ "name service switch")
+ ", new "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Services.html"))
+ "service definitions")
+ ", easier "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Using-the-Configuration-System.html"))
+ "desktop-style configuration")
+ ", and many tweaks and fixes.\n")
+ (li "A new "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-publish.html"))
+ "guix publish command")
+ " allowing everyone to publish their own binaries.\n")
+ (li "718 new "
+ (a (@ (href "http://www.gnu.org/software/guix/package-list.html"))
+ "packages")
+ " (including \"big ones\" like GnuCash, IcedTea, and GHC) and 189 package updates\n")
+ (li "Countless "
+ (a (@ (href "http://bugs.gnu.org/guix"))
+ "bug fixes")
+ " and usability improvements.\n"))
+ (p "See "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2015-05/msg00195.html"))
+ "http://lists.gnu.org/archive/html/guix-devel/2015-05/msg00195.html")
+ " for details."
+ (br))
+ (p "Special thanks go to "
+ (a (@ (href "http://sirgazil.bitbucket.org/"))
+ "Luis Felipe López Acevedo")
+ ", the incredible designer of the "
+ (a (@ (href "http://www.gnu.org/software/guix"))
+ "new web site")
+ " and GuixSD logo!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-0.8.3-released.sxml b/website/posts/gnu-guix-0.8.3-released.sxml
new file mode 100644
index 0000000..734d521
--- /dev/null
+++ b/website/posts/gnu-guix-0.8.3-released.sxml
@@ -0,0 +1,72 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.8.3 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 22 7 2015 7200))
+ (content
+ div
+ (p "We are pleased to announce the next alpha release of GNU Guix, version 0.8.3."
+ (br))
+ (p "The release comes with USB installation images to install the standalone "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/System-Installation.html"))
+ "Guix System Distribution")
+ " (GuixSD), and with tarballs to install the package manager on top of a running GNU/Linux system, either "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Requirements.html"))
+ "from source")
+ " or "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Binary-Installation.html"))
+ "from binaries")
+ "."
+ (br))
+ (p "The highlights for this release include:"
+ (br))
+ (ul (li "The ability to "
+ (em "declare")
+ " the packages that must be present in your profile, and to pass that to "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-package.html#profile_002dmanifest"))
+ "guix package's new --manifest option")
+ ".\n")
+ (li (a (@ (href "http://www.gnu.org/software/guix//manual/html_node/Invoking-guix-environment.html"))
+ "guix environment")
+ " has a new --ad-hoc option to quickly spawn "
+ (em "ad hoc")
+ " development environments.\n")
+ (li "New tools: "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-edit.html"))
+ "guix edit")
+ " to open a package recipe, "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-size.html"))
+ "guix size")
+ " to profile the disk usage of a package and its dependencies, "
+ (a (@ (href "http://www.gnu.org/software/guix//manual/html_node/Invoking-guix-gc.html"))
+ "guix gc --verify")
+ " to check the integrity of the store.\n")
+ (li (a (@ (href "http://www.gnu.org/software/guix/packages/"))
+ "179 new packages")
+ ", notably LibreOffice, Coq, and a Guile-Emacs snapshot.\n")
+ (li "Many "
+ (a (@ (href "http://bugs.gnu.org/guix"))
+ "bug fixes")
+ " and assorted improvements!\n"))
+ (p "See "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2015-07/msg00585.html"))
+ "http://lists.gnu.org/archive/html/guix-devel/2015-07/msg00585.html")
+ " for details."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-0.9.0-released.sxml b/website/posts/gnu-guix-0.9.0-released.sxml
new file mode 100644
index 0000000..8df1cb8
--- /dev/null
+++ b/website/posts/gnu-guix-0.9.0-released.sxml
@@ -0,0 +1,84 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix 0.9.0 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 5 11 2015 3600))
+ (content
+ div
+ (p "We are pleased to announce the next alpha release of GNU Guix, version 0.9.0."
+ (br))
+ (p "The release comes with USB installation images to install the standalone "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/System-Installation.html"))
+ "GuixSD")
+ ", and with tarballs to install the package manager on top of a running GNU/Linux system, either "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Requirements.html"))
+ "from source")
+ " or "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Binary-Installation.html"))
+ "from binaries")
+ "."
+ (br))
+ (p "The highlights for this release include:"
+ (br))
+ (ul (li "Support for "
+ (a (@ (href "http://savannah.gnu.org/forum/forum.php?forum_id=8386"))
+ "automatic container provisioning")
+ " in "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-environment.html"))
+ "guix environment")
+ ", for development environments, and in "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-system.html"))
+ "guix system")
+ ", for full GuixSD deployments.\n")
+ (li "A brand new "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Service-Composition.html"))
+ "service composition framework")
+ " for GuixSD. It significantly improves extensibility and modularity, while providing a framework that makes it easy to reason about how system services relate to each other. This was one of the main design issues that needed to be addressed on the road to 1.0.\n")
+ (li "The new "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-graph.html"))
+ "guix graph")
+ " command can draw package dependency graphs with different levels of details. Likewise, "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-system.html"))
+ "guix system")
+ " has a new extension-graph command to draw the system's service composition graph, and a dmd-graph command to draw the service dependency graph as seen by "
+ (a (@ (href "http://www.gnu.org/software/dmd/"))
+ "GNU dmd")
+ ".\n")
+ (li "The new "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-challenge.html"))
+ "guix challenge")
+ " command allows users to challenge the authenticity of "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Substitutes.html"))
+ "substitutes")
+ " provided by a server. More on that in a future post!\n")
+ (li (a (@ (href "http://www.gnu.org/software/guix/packages/"))
+ "543 new packages")
+ ", notably Idris and many "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-import.html"))
+ "imported")
+ " Haskell, Python, and R packages.\n")
+ (li (a (@ (href "http://debbugs.gnu.org/rrd/guix.html"))
+ "Bug fixes")
+ ", documentation, and other niceties!\n"))
+ (p "See "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2015-11/msg00131.html"))
+ "https://lists.gnu.org/archive/html/guix-devel/2015-11/msg00131.html")
+ " for details."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-and-guixsd-0.11.0-released.sxml b/website/posts/gnu-guix-and-guixsd-0.11.0-released.sxml
new file mode 100644
index 0000000..83eea8b
--- /dev/null
+++ b/website/posts/gnu-guix-and-guixsd-0.11.0-released.sxml
@@ -0,0 +1,84 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "GNU\xa0Guix and GuixSD\xa00.11.0 released")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 3 8 2016 7200))
+ (content
+ div
+ (p "It is a pleasure to announce the new beta release of GNU\xa0Guix and GuixSD, version 0.11.0!"
+ (br))
+ (p "The release comes with USB installation images to install the standalone "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/System-Installation.html"))
+ "GuixSD")
+ ", and with tarballs to install the package manager on top of your GNU/Linux distro, either "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Requirements.html"))
+ "from source")
+ " or "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Binary-Installation.html"))
+ "from binaries")
+ ". "
+ (br))
+ (p "It\x92s been 4 months since the previous release, during which 70 people contributed code and packages. The highlights include:"
+ (br))
+ (ul (li "New GuixSD system services, including an "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Scheduled-Job-Execution.html"))
+ "mcron service")
+ ", a "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Networking-Services.html"))
+ "Dropbear SSH service")
+ ", and a "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Various-Services.html#Dictionary-Services"))
+ "Dico dictionary service")
+ ".\n")
+ (li "Infrastructure for "
+ (a (@ (href "http://savannah.gnu.org/forum/forum.php?forum_id=8605"))
+ "whole-system tests")
+ ".\n")
+ (li "Compression support for "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-publish.html"))
+ "guix publish")
+ ".\n")
+ (li "An Emacs mode to "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Emacs-Package-Locations.html"))
+ "browse package definition locations")
+ ".\n")
+ (li "GuixSD support for "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Mapped-Devices.html"))
+ "RAID devices")
+ ".\n")
+ (li (a (@ (href "https://www.gnu.org/software/guix/packages/"))
+ "484 new packages")
+ ", 678 package updates notably glibc\xa02.23 and linux-libre\xa04.7, as well as several "
+ (a (@ (href "https://reproducible-builds.org"))
+ "bit-reproducibility")
+ " issues fixed\n")
+ (li "Assorted improvements to all the "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Utilities.html"))
+ "tool set")
+ ", many "
+ (a (@ (href "https://debbugs.gnu.org/cgi/pkgreport.cgi?pkg=guix#_4_2_5"))
+ "bug fixes")
+ " and improvements to the manual!\n"))
+ (p "See "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2016-08/msg00219.html"))
+ "https://lists.gnu.org/archive/html/guix-devel/2016-08/msg00219.html")
+ " for details."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a transactional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-at-fosdem.sxml b/website/posts/gnu-guix-at-fosdem.sxml
new file mode 100644
index 0000000..1cca11b
--- /dev/null
+++ b/website/posts/gnu-guix-at-fosdem.sxml
@@ -0,0 +1,15 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix at FOSDEM")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 27 1 2015 3600))
+ (content
+ div
+ (p "Guix will be present at FOSDEM in Brussels, Belgium, with a talk entitled "
+ (a (@ (href "https://fosdem.org/2015/schedule/event/the_emacs_of_distros/"))
+ "\"The Emacs of Distros\"")
+ " this Saturday, at 3PM, in room H.1302."
+ (br))
+ (p "The talk will give an update on developments in Guix and the Guix System Distribution since last year, and will explain and demo the overall philosophy behind its design---how Guix seeks to empower users."
+ (br))
+ (p "Hope to see you there!" (br)))))
diff --git a/website/posts/gnu-guix-looks-for-gsoc-students.sxml b/website/posts/gnu-guix-looks-for-gsoc-students.sxml
new file mode 100644
index 0000000..6e05753
--- /dev/null
+++ b/website/posts/gnu-guix-looks-for-gsoc-students.sxml
@@ -0,0 +1,32 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix looks for GSoC students")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 27 2 2014 3600))
+ (content
+ div
+ (p "This year again "
+ (a (@ (href "http://www.gnu.org/software/guix"))
+ "Guix")
+ " participates in the Google Summer of Code under the umbrella of the GNU Project."
+ (br))
+ (p "If you are an "
+ (a (@ (href "https://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#2._Whos_eligible_to_participate_as_a"))
+ "eligible student")
+ ", your contributions to GNU's package manager and to the GNU system are welcome!"
+ (br))
+ (p "We have collected "
+ (a (@ (href "http://www.gnu.org/software/soc-projects/ideas-2014.html#guix"))
+ "project ideas")
+ " touching a variety of topics. If you are a free software hacker passionate about GNU/Linux packaging, Scheme, functional programming, Emacs, or peer-to-peer networking, check out the proposed projects. The list is far from exhaustive, so feel free to bring your own!"
+ (br))
+ (p "Get in touch with us on "
+ (a (@ (href "http://www.gnu.org/software/guix/#mail"))
+ "the mailing list")
+ " and on the #guix IRC channel."
+ (br))
+ (p "Make sure to send your application to Google "
+ (a (@ (href "https://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#8._When_can_I_apply_for_Google_Summer_of"))
+ "by March 24th")
+ "."
+ (br)))))
diff --git a/website/posts/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.sxml b/website/posts/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.sxml
new file mode 100644
index 0000000..7ec301d
--- /dev/null
+++ b/website/posts/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.sxml
@@ -0,0 +1,50 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "GNU Guix ported to ARM and other niceties of the new year")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 9 1 2015 3600))
+ (content
+ div
+ (p "A new port of GNU Guix to ARM using the \"hard float\" ABI "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/commit/?h=core-updates&id=aa1e19477b2d78884fc500fef497cd6677604d9b"))
+ "has just landed")
+ ", thanks to the hard work of Mark H Weaver and John Darrington. This makes it the fourth supported architecture after x86_64, i686, and mips64el. We are looking for ARM hardware donations that would allow us to add this architecture to our "
+ (a (@ (href "http://hydra.gnu.org"))
+ "continuous integration build farm")
+ "; your help is welcome!"
+ (br))
+ (p "In other news, there has been work to "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2014-11/msg00670.html"))
+ "improve Linux module handling")
+ ", the addition of "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2014-12/msg00300.html"))
+ "session support")
+ " in the login manager, "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2014-12/msg00413.html"))
+ "more tooling")
+ " in 'guix lint', an "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2014-12/msg00278.html"))
+ "nscd configuration interface")
+ ", many new "
+ (a (@ (href "https://www.gnu.org/software/guix/package-list.html"))
+ "packages")
+ " (Xfce, NumPy, SciPy, and Clang, to name a few), and "
+ (a (@ (href "http://debbugs.gnu.org/cgi/pkgreport.cgi?archive=both;package=guix"))
+ "many bug fixes")
+ ". Getting closer to a new release!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is the functional package manager for the GNU system, and a distribution thereof."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. It also offers a declarative approach to operating system configuration management. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language."
+ (br))
+ (p "At this stage the distribution can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armhf."
+ (br)))))
diff --git a/website/posts/gnu-guix-recruits-for-gsoc.sxml b/website/posts/gnu-guix-recruits-for-gsoc.sxml
new file mode 100644
index 0000000..6041e9c
--- /dev/null
+++ b/website/posts/gnu-guix-recruits-for-gsoc.sxml
@@ -0,0 +1,52 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GNU Guix recruits for GSoC")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 13 3 2015 3600))
+ (content
+ div
+ (p "This year again "
+ (a (@ (href "http://www.gnu.org/software/guix"))
+ "Guix")
+ " participates in the Google Summer of Code under the umbrella of "
+ (a (@ (href "http://www.gnu.org"))
+ "the GNU Project")
+ "."
+ (br))
+ (p "If you are an "
+ (a (@ (href "https://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/help_page#2._Whos_eligible_to_participate_as_a"))
+ "eligible student")
+ ", your contributions to GNU's package manager and to the Guix System Distribution are welcome!"
+ (br))
+ (p "We have collected "
+ (a (@ (href "http://www.gnu.org/software/soc-projects/ideas-2015.html#guix"))
+ "project ideas")
+ " (see also "
+ (a (@ (href "http://www.gnu.org/software/soc-projects/ideas-2015.html#dmd"))
+ "related ideas for GNU dmd")
+ ") touching a variety of topics. If you are a free software hacker passionate about GNU/Linux packaging, Scheme, functional programming, operating system development, or peer-to-peer networking, check out the proposed projects. The list is far from exhaustive, so feel free to bring your own!"
+ (br))
+ (p "Get in touch with us on the "
+ (a (@ (href "http://www.gnu.org/software/guix/#mail"))
+ "mailing list")
+ " and on the #guix IRC channel."
+ (br))
+ (p "Make sure to send your application to Google by "
+ (a (@ (href "https://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/help_page#8._When_can_I_apply_for_Google_Summer_of"))
+ "March 27th")
+ "."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution (GuixSD) is an advanced distribution of the GNU system that relies on GNU Guix."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. It also offers a declarative approach to operating system configuration management. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language."
+ (br))
+ (p "At this stage the Guix System Distribution can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-talk-at-opentechsummit-berlin-may-14th.sxml b/website/posts/gnu-guix-talk-at-opentechsummit-berlin-may-14th.sxml
new file mode 100644
index 0000000..dbee521
--- /dev/null
+++ b/website/posts/gnu-guix-talk-at-opentechsummit-berlin-may-14th.sxml
@@ -0,0 +1,34 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "GNU Guix talk at OpenTechSummit, Berlin, May 14th")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 12 5 2015 7200))
+ (content
+ div
+ (p (a (@ (href "http://elephly.net/"))
+ "Ricardo Wurmus")
+ " will be giving a talk about GNU Guix and GuixSD at the "
+ (a (@ (href "http://opentechsummit.net/"))
+ "OpenTechSummit")
+ " in Berlin, Germany, on May 14th. The talk will take place at "
+ (a (@ (href "http://opentechsummit.net/Programm.pdf"))
+ "3:15pm in track 2")
+ " and covers topics such as the fundamentals of functional package management, software management features with GNU Guix, and system description in GuixSD."
+ (br))
+ (p "Ricardo has been making major contributions to Guix over the last year and is a long-time free software contributor. If you are in Berlin area, do not miss the talk!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution (GuixSD) is an advanced distribution of the GNU system that relies on GNU Guix."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. It also offers a declarative approach to operating system configuration management. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language."
+ (br))
+ (p "At this stage the Guix System Distribution can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-talk-in-boston-ma-(usa)-on-january-20th.sxml b/website/posts/gnu-guix-talk-in-boston-ma-(usa)-on-january-20th.sxml
new file mode 100644
index 0000000..c97fc13
--- /dev/null
+++ b/website/posts/gnu-guix-talk-in-boston-ma-(usa)-on-january-20th.sxml
@@ -0,0 +1,43 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "GNU Guix talk in Boston, MA (USA) on January 20th")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 11 1 2016 3600))
+ (content
+ div
+ (p (a (@ (href "https://dthompson.us/"))
+ "David Thompson")
+ " will be giving a "
+ (a (@ (href "http://blu.org/cgi-bin/calendar/2016-jan"))
+ "talk about Guix on January 20th")
+ " at the BLU gathering at MIT in Boston, Massachusetts (USA)."
+ (br))
+ (p (em "David gives an overview of what functional package management is all about and how it differs from traditional imperative package management.")
+ (br))
+ (p (em "He also demonstrates some interesting features of Guix such as transactional package management, unprivileged package management, bit-reproducible builds, and full system configuration management.")
+ (br))
+ (p "The talk will take place in MIT building E-51, room 325."
+ (br))
+ (p "David is a GNU hacker who contributes to Guix and Guile; he implemented "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8386"))
+ "container support")
+ " in Guix. If you are in the Boston area, do not miss him!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-talk-in-rennes-france-november-9th.sxml b/website/posts/gnu-guix-talk-in-rennes-france-november-9th.sxml
new file mode 100644
index 0000000..43ee035
--- /dev/null
+++ b/website/posts/gnu-guix-talk-in-rennes-france-november-9th.sxml
@@ -0,0 +1,47 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "GNU Guix talk in Rennes, France, November 9th")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 2 11 2015 3600))
+ (content
+ div
+ (p "Ludovic Courtès will be giving a talk about GNU Guix and GuixSD "
+ (a (@ (href "http://www.agendadulibre.org/events/10182"))
+ "in Rennes, France, on November 9th")
+ ". The event is organized by the three local free software and hacker organizations:"
+ (br))
+ (p (em " \x93It used to work perfectly, then I upgraded something, and somehow\x85\x94 Sounds like a déjà vu? Sometimes feel like software deployment is unpredictable? Dissatisfied with Dockerfiles, Vagrantfiles, and co? Ever wondered if you can trust your compiler or the integrity of those binary packages you have downloaded?")
+ (br))
+ (p (em "This talk introduces GNU Guix, a package manager that implements the functional package management paradigm pioneered by "
+ (a (@ (href "http://nixos.org/nix")) "Nix")
+ " to address these issues. Guix supports transactional upgrades and rollbacks, as well as support for multiple software profiles. In this talk, I will introduce functional package management and demonstrate Guix on practical use cases. I will discuss the implications on (bit-)reproducible packages and environments, and how this can lead to verifiable binaries. Lastly, we will see how this extends to whole-system deployments with GuixSD, the Guix System Distribution.")
+ (br))
+ (p "Earlier on that day, a similar talk with a focus on security and reproducibility issues will be given at "
+ (a (@ (href "http://www.inria.fr/en/centre/rennes"))
+ "Inria")
+ ", thanks to the support of "
+ (a (@ (href "http://grothoff.org/christian/"))
+ "Christian Grothoff")
+ " and the "
+ (a (@ (href "http://sed.bordeaux.inria.fr/"))
+ "software development department")
+ " in Bordeaux."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-welcomes-four-students-for-gsoc.sxml b/website/posts/gnu-guix-welcomes-four-students-for-gsoc.sxml
new file mode 100644
index 0000000..5a82038
--- /dev/null
+++ b/website/posts/gnu-guix-welcomes-four-students-for-gsoc.sxml
@@ -0,0 +1,62 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "GNU\xa0Guix welcomes four students for GSoC")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 24 4 2016 7200))
+ (content
+ div
+ (p "We are glad to announce that four students will join GNU\xa0Guix for the 2016 Google Summer of Code (GSoC):"
+ (br))
+ (ul (li "Efraim will hack a "
+ (a (@ (href "https://libreplanet.org/wiki/Group:Guix/GSoC-2016#Write_a_Bourne-shell_compiler_front-end_for_Guile"))
+ "Bourne-shell compiler front-end for Guile")
+ ". While this may sound a bit crazy (and rather fun :-)), the motivation behind this is to help reduce "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Bootstrapping.html"))
+ "the set of binaries GNU\xa0Guix relies on for bootstrapping")
+ ".\n")
+ (li "Jelle will work on an npm "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-import.html"))
+ "importer")
+ " and "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Build-Systems.html"))
+ "build system")
+ " for "
+ (a (@ (href "https://libreplanet.org/wiki/Group:Guix/GSoC-2016#NPM_package_importer_and_builder"))
+ "npm")
+ ". This will allow users to deploy JavaScript programming environments "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-environment.html"))
+ "in a controlled fashion")
+ ", integrated with the rest of the system.\n")
+ (li "Manolis, who contributed a GNU/Hurd port of Guix "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8318"))
+ "last year")
+ ", will work on "
+ (a (@ (href "https://libreplanet.org/wiki/Group:Guix/GSoC-2016#Port_GuixSD_to_GNU.2FHurd"))
+ "porting GuixSD to GNU/Hurd")
+ ".\n")
+ (li "Mathieu "
+ (a (@ (href "https://libreplanet.org/wiki/Group:Guix/GSoC-2016#Rewrite_Hydra_to_be_more_integrated_with_Guix"))
+ "will write")
+ " a continuous integration tool à la "
+ (a (@ (href "https://nixos.org/hydra/")) "Hydra")
+ ". This will improve integration with Guix and will power continuous builds of our packages.\n"))
+ (p "All four projects sound exciting to us and we are happy to see progress on these fronts. Happy hacking!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a transactional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gnu-guix-welcomes-three-students-for-gsoc.sxml b/website/posts/gnu-guix-welcomes-three-students-for-gsoc.sxml
new file mode 100644
index 0000000..f397939
--- /dev/null
+++ b/website/posts/gnu-guix-welcomes-three-students-for-gsoc.sxml
@@ -0,0 +1,45 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "GNU Guix welcomes three students for GSoC")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 2 5 2015 7200))
+ (content
+ div
+ (p "GNU Guix got 3 slots for the Google Summer of Code (GSoC), as part of GNU, which participates as an organization. So we are pleased to welcome three students this summer:"
+ (br))
+ (ul (li "Rohan "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2015-04/msg00559.html"))
+ "will work on a DHCP client")
+ " written in Guile Scheme, with the goal of making it easy to integrate it with "
+ (a (@ (href "http://www.gnu.org/software/dmd/"))
+ "GNU dmd")
+ ";\n")
+ (li "Manolis will be able to "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2015-04/msg00560.html"))
+ "keep working on porting Guix to GNU/Hurd")
+ ", with the eventual goal of being able to run GuixSD on "
+ (a (@ (href "http://hurd.gnu.org")) "GNU/Hurd")
+ ";\n")
+ (li "Rémi "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2015-04/msg00562.html"))
+ "will work on peer-to-peer software distribution")
+ " over "
+ (a (@ (href "http://gnunet.org/")) "GNUnet")
+ ".\n"))
+ (p "All three projects have very exciting prospects and we are thrilled to get them started! We are also glad that this allows us to strengthen ties with several other GNU packages."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution (GuixSD) is an advanced distribution of the GNU system that relies on GNU Guix."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. It also offers a declarative approach to operating system configuration management. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language."
+ (br))
+ (p "At this stage the Guix System Distribution can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/gsoc-update.sxml b/website/posts/gsoc-update.sxml
new file mode 100644
index 0000000..30a7cd5
--- /dev/null
+++ b/website/posts/gsoc-update.sxml
@@ -0,0 +1,53 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GSoC update")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 19 7 2015 7200))
+ (content
+ div
+ (p "This year Guix was lucky to have "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8264"))
+ "3 GSoC projects")
+ ", and they have made rather good progress so far:"
+ (br))
+ (ul (li "Manolis successfully completed the recipes to get a "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-hurd"))
+ "cross-compilation toolchain to GNU/Hurd")
+ ", with part of the work already in the main branch. This allowed him to produce statically-linked bootstrap binaries (stumbling upon nasty ld.so issues on the way.) Manolis is now "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2015-07/msg00029.html"))
+ "running Guix and building packages natively")
+ " on GNU/Hurd, which will constitute a large part of the remainder of his project.\n")
+ (li "Rémi has written "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix/gnunet.git/tree/"))
+ "Guile bindings")
+ " to crucial parts of the "
+ (a (@ (href "https://gnunet.org")) "GNUnet")
+ " API, including the file sharing API. This will allow him to move to the next step: Writing "
+ (a (@ (href "http://lists.gnu.org/archive/html/guix-devel/2015-07/msg00033.html"))
+ "tools to publish and retrieve")
+ " Guix "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Substitutes.html"))
+ "substitutes")
+ " (pre-built binaries.)\n")
+ (li "Rohan laid the foundations of the "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix/dhcp.git/tree/"))
+ "DHCP client")
+ ". The current code can send packets on all the configured network interfaces. Rohan hopes to have working code to establish leases in the following weeks.\n"))
+ (p "Happy hacking!" (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/guix--gsoc.sxml b/website/posts/guix--gsoc.sxml
new file mode 100644
index 0000000..079bf9a
--- /dev/null
+++ b/website/posts/guix--gsoc.sxml
@@ -0,0 +1,29 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Guix & GSoC")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 12 4 2013 7200))
+ (content
+ div
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "Guix")
+ " participates in the Google Summer of Code under GNU's umbrella. If you are "
+ (a (@ (href "https://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page"))
+ "an eligible student")
+ ", your contributions to GNU's package manager and distribution are welcome!"
+ (br))
+ (p "We have collected "
+ (a (@ (href "http://www.gnu.org/software/soc-projects/ideas-2013.html#guix"))
+ "project ideas")
+ ", some connected with other projects such as GNUnet and Emacs. Come and discuss them on "
+ (a (@ (href "http://www.gnu.org/software/guix/#mail"))
+ "the mailing list")
+ " and on the #guix channel of the Freenode IRC network."
+ (br))
+ (p "The project list if far from exhaustive, so feel free to bring your own!"
+ (br))
+ (p "Make sure to "
+ (a (@ (href "https://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page#8._When_can_I_apply_for_Google_Summer_of"))
+ "send your application to Google by May 3rd")
+ "."
+ (br)))))
diff --git a/website/posts/guix-at-libreplanet-2016.sxml b/website/posts/guix-at-libreplanet-2016.sxml
new file mode 100644
index 0000000..62d41fa
--- /dev/null
+++ b/website/posts/guix-at-libreplanet-2016.sxml
@@ -0,0 +1,40 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Guix at LibrePlanet 2016")
+ (author . "David Thompson")
+ (date unquote (make-date 0 0 0 0 15 3 2016 3600))
+ (content
+ div
+ (p "GNU hackers Christopher Allan Webber (whom you may know from the "
+ (a (@ (href "http://mediagoblin.org"))
+ "GNU MediaGoblin project")
+ ") and David Thompson will be co-presenting "
+ (a (@ (href "https://libreplanet.org/2016/program/#day-1-timeslot-4-session-2"))
+ "\"Solving the Deployment Crisis with Guix\"")
+ " at "
+ (a (@ (href "https://libreplanet.org/2016"))
+ "LibrePlanet 2016")
+ " this Saturday, March 19th. Chris and David will be focusing on the hardships and obstacles that users face when trying to exercise their software freedom by self-hosting web applications, offering Guix as a solution. The presentation will be held from 10:55 AM to 11:40 AM in room 32-141 of the MIT Stata Center in Cambridge, Massachusetts."
+ (br))
+ (h4 "About LibrePlanet")
+ (p (a (@ (href "https://libreplanet.org"))
+ "LibrePlanet")
+ " is an annual conference run by the FSF and MIT's Student Information Processing Board for free software users, developers, and activists to gather and share ideas. Admission is gratis for FSF associate members."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/guix-at-openbio-codefest-2014.sxml b/website/posts/guix-at-openbio-codefest-2014.sxml
new file mode 100644
index 0000000..1d320d3
--- /dev/null
+++ b/website/posts/guix-at-openbio-codefest-2014.sxml
@@ -0,0 +1,17 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Guix at OpenBio Codefest 2014")
+ (author . "David Thompson")
+ (date unquote (make-date 0 0 0 0 13 7 2014 7200))
+ (content
+ div
+ (p "On Wednesday, July 9th, David Thompson gave a brief introduction to GNU Guix at the "
+ (a (@ (href "http://www.open-bio.org/wiki/Codefest_2014"))
+ "Open Bioinformatics Codefest 2014 hackathon")
+ ". The objective of the Codefest is to give developers of bioinformatics software a chance to be fully focused on their projects for a few days and work in person. These developers are concerned with the reliability and reproducibility of their operating systems, and the limitations of their package management utilities."
+ (br))
+ (p "See the "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix/maintenance.git/plain/talks/codefest-2014/guix-codefest-2014.pdf"))
+ "slides on-line")
+ "."
+ (br)))))
diff --git a/website/posts/guix-at-the-2014-gnu-hackers-meeting.sxml b/website/posts/guix-at-the-2014-gnu-hackers-meeting.sxml
new file mode 100644
index 0000000..f30f06c
--- /dev/null
+++ b/website/posts/guix-at-the-2014-gnu-hackers-meeting.sxml
@@ -0,0 +1,29 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Guix at the 2014 GNU Hackers Meeting")
+ (author . "Ludovic Courtès")
+ (date unquote
+ (make-date 0 0 0 0 11 10 2014 7200))
+ (content
+ div
+ (p "The Guix talk of this summer's GNU Hackers Meeting is now "
+ (a (@ (href "http://www.gnu.org/software/guix/#talks"))
+ "available on-line")
+ "."
+ (br))
+ (p "It gives an introduction to Guix from a user's viewpoint, and covers topics such as features for GNU maintainers, programming interfaces, declarative operating system configuration, status of the GNU/Hurd port, and the new Emacs and Web interfaces---with a bunch of demos."
+ (br))
+ (p "Do not miss "
+ (a (@ (href "http://audio-video.gnu.org/video/ghm2014/"))
+ "other fine talks from the GHM")
+ ". Many thanks to everyone who took care of the video recordings."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is the functional package manager for the GNU system, and a distribution thereof."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. It also offers a declarative approach to operating system configuration management. Guix uses low-level mechanisms from the Nix package manager, with Guile Scheme programming interfaces."
+ (br))
+ (p "At this stage the distribution can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el."
+ (br)))))
diff --git a/website/posts/guix-at-the-european-lisp-symposium.sxml b/website/posts/guix-at-the-european-lisp-symposium.sxml
new file mode 100644
index 0000000..a3f8b74
--- /dev/null
+++ b/website/posts/guix-at-the-european-lisp-symposium.sxml
@@ -0,0 +1,15 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Guix at the European Lisp Symposium")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 21 5 2013 7200))
+ (content
+ div
+ (p "A "
+ (a (@ (href "http://arxiv.org/abs/1305.4584"))
+ "paper")
+ " presenting the design of Guix's Scheme API and packaging language has been accepted for the "
+ (a (@ (href "http://www-sop.inria.fr/members/Manuel.Serrano/conferences/els13.html"))
+ "2013 European Lisp Symposium (ELS)")
+ ". ELS will take place in Madrid on June 3-4."
+ (br)))))
diff --git a/website/posts/guix-gets-cross-compilation-support.sxml b/website/posts/guix-gets-cross-compilation-support.sxml
new file mode 100644
index 0000000..a2b1325
--- /dev/null
+++ b/website/posts/guix-gets-cross-compilation-support.sxml
@@ -0,0 +1,21 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Guix gets cross-compilation support")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 26 6 2013 7200))
+ (content
+ div
+ (p (a (@ (href "http://lists.gnu.org/archive/html/bug-guix/2013-05/msg00114.html"))
+ "Recently")
+ ", "
+ (a (@ (href "http://www.gnu.org/software/guix/"))
+ "Guix")
+ " gained cross-compilation support. What this means is that existing package definitions can be reused to cross compile packages. So for instance one can cross-compile Guile and its dependencies for MIPS with:"
+ (br))
+ (div (@ (class "example"))
+ (pre "guix build --target=mips64el-linux-gnu guile "))
+ (p "This may sound like an unexpected feature for a \"package manager\". In fact, it is particularly useful when porting the GNU system distribution to new platforms. The distribution being self-contained, it is bootstrapped from a small set of pre-built binaries. With cross-compilation support, porting to a new platform boils down to "
+ (a (@ (href "http://lists.gnu.org/archive/html/bug-guix/2013-06/msg00147.html"))
+ "cross-compiling the bootstrap binaries")
+ " for that platform."
+ (br)))))
diff --git a/website/posts/guix-starts-fundraising-campaign-with-support-from-the-fsf.sxml b/website/posts/guix-starts-fundraising-campaign-with-support-from-the-fsf.sxml
new file mode 100644
index 0000000..7958a8d
--- /dev/null
+++ b/website/posts/guix-starts-fundraising-campaign-with-support-from-the-fsf.sxml
@@ -0,0 +1,58 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "Guix starts fundraising campaign with support from the FSF")
+ (author . "Ludovic Courtès")
+ (date unquote
+ (make-date 0 0 0 0 16 12 2015 3600))
+ (content
+ div
+ (p "The GNU\xa0Guix project is glad to announce its first fundraising campaign, supported by the Free Software Foundation (FSF). As the FSF "
+ (a (@ (href "https://www.fsf.org/blogs/community/fsf-announces-support-for-gnu-guix"))
+ "announced today")
+ ", the campaign\x92s primary goal is to help increase the capacity of the project\x92s build farm. We believe Guix offers a great tool set to increase the freedom and autonomy of computer users, and we are excited that the FSF supports the project!"
+ (br))
+ (p "Until now, the build farm behind hydra.gnu.org had been working on hardware and hosting "
+ (a (@ (href "https://www.gnu.org/software/guix/donate/"))
+ "generously provided")
+ " by several organizations and individuals\x97thank you! To cope with the growing number of "
+ (a (@ (href "https://www.gnu.org/software/guix/packages/"))
+ "packages")
+ " and users, we felt that the time has come to call to the community to strengthen the project\x92s infrastructure. Our first action will be to change the build farm\x92s front-end, which orchestrates builds and "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Substitutes.html"))
+ "distributes binaries")
+ ". Next we want to add more build machines, with two goals in mind: being able to quickly test changes that trigger lots of rebuilds, and being able to identify "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8407"))
+ "non-verifiable builds")
+ "."
+ (br))
+ (p "Donations can be made on the "
+ (a (@ (href "https://my.fsf.org/civicrm/contribute/transact?reset=1&id=50"))
+ "FSF-hosted page for the campaign")
+ ". 10% of your contribution will also go to help the FSF "
+ (a (@ (href "https://fsf.org/appeal"))
+ "meet its current fundraising goal")
+ "."
+ (br))
+ (p "GNU\xa0Guix also welcomes contributions, both technical and non-technical: testing, adding new packages, writing code, translating messages and package descriptions to your native language, helping with Web design, and more. Check out "
+ (a (@ (href "http://www.gnu.org/software/guix/contribute/"))
+ "the contribution page")
+ "!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/guix-tox-talk-at-pyconfr-october-17th.sxml b/website/posts/guix-tox-talk-at-pyconfr-october-17th.sxml
new file mode 100644
index 0000000..a439ebf
--- /dev/null
+++ b/website/posts/guix-tox-talk-at-pyconfr-october-17th.sxml
@@ -0,0 +1,41 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "Guix-Tox talk at PyConFR, October 17th")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 9 10 2015 7200))
+ (content
+ div
+ (p "Bonjour ! Cyril Roelandt of Red Hat who works on OpenStack will be "
+ (a (@ (href "http://www.pycon.fr/2015/schedule/presentation/47/"))
+ "giving a talk")
+ " about Guix-Tox at PyConFR in Pau, France, on October 17th."
+ (br))
+ (p (a (@ (href "https://git.framasoft.org/Steap/guix-tox"))
+ "Guix-Tox")
+ " is a young variant of the "
+ (a (@ (href "http://tox.testrun.org/")) "Tox")
+ " \"virtualenv\" management tool for Python that uses "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-environment.html"))
+ "guix environment")
+ " as its back-end. In essence, while Tox restricts itself to building pure Python environments, Guix-Tox takes advantages of Guix to build complete environments, including dependencies that are outside Tox's control, thereby improving environment reproducibility. Cyril will demonstrate practical use cases with OpenStack."
+ (br))
+ (p "If you're around, do not miss the talk. If you're a Pythonista, you can help by providing feedback on Guix-Tox!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/guixsd-system-tests.sxml b/website/posts/guixsd-system-tests.sxml
new file mode 100644
index 0000000..15146b6
--- /dev/null
+++ b/website/posts/guixsd-system-tests.sxml
@@ -0,0 +1,172 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "GuixSD system tests")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 28 6 2016 7200))
+ (content
+ div
+ (p "From its inception, Guix has had a thorough test suite\x97something that\x92s not only reassuring, but also the thing that allows for fearless evolution of the code. That we didn\x92t have this safety net when hacking on the whole operating system, GuixSD, made it uncomfortable and more risky. We are now addressing the problem with the introduction of "
+ (em "system tests")
+ ", closing one of the major roadblocks towards 1.0."
+ (br))
+ (p "Before going into details, let me recap the sorts of testing that already occurred in Guix land."
+ (br))
+ (h4 "Unit tests")
+ (p "Guix\x92s "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/tests"))
+ "test suite")
+ " currently contains almost 600 "
+ (em "unit tests")
+ ". Each one of these stresses one particular function or subset of the functionality of Guix. This covers core package management functionality such as package builds, utility modules such as monads or the public key infrastructure (PKI) used for authenticating binaries, maintenance tools such as "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-lint.html"))
+ "lint")
+ " and the "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-import.html"))
+ "importers")
+ ", as well as the command-line interface."
+ (br))
+ (p "Since Guix provides Scheme modules for use "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/G_002dExpressions.html"))
+ "both in the package management front-end and on the \x93build side\x94")
+ ", the latter is also tested. This includes part of the "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Build-Systems.html"))
+ "build systems")
+ ", and helpers like our "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/guix/build/gremlin.scm#n264"))
+ "ELF validation module")
+ "."
+ (br))
+ (h4 "Package tests")
+ (p "Then come the software packages that Guix ships. All of the packages in the distro are under "
+ (a (@ (href "https://hydra.gnu.org/jobset/gnu/master"))
+ "continuous integration")
+ " on the 4 supported architectures (32-bit and 64-bit Intel compatible, as well as MIPS64 and ARMv7.) Our build farm serves the resulting binaries, which users can choose to download as "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Substitutes.html"))
+ "substitutes for local builds")
+ ". Our build server, which currently runs an instance of "
+ (a (@ (href "https://nixos.org/hydra/")) "Hydra")
+ ", always shows the number of succeeding/failing builds on its dashboard. That way, breakage introduced by changes in the package collection is always rapidly detected. This is a direct benefit of the "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Introduction.html"))
+ "functional packaging model")
+ "."
+ (br))
+ (p "Additionally, our policy is to always run each package\x92s test suite (typically \x93make check\x94) as part of its build process, unless there is a serious technical obstacle to doing that. That way, we can, and do catch integration issues, incompatibilities, and plain bugs before they hit users."
+ (br))
+ (h4 "System tests")
+ (p "So far, so good. Now, what about GuixSD itself? GuixSD did not have an automated test suite until now. What it did have, though, is the ability to instantiate an operating system in a virtual machine (VM) or in a container. You would write your "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Using-the-Configuration-System.html"))
+ "operating system declaration")
+ " in a file, then run, say:"
+ (br))
+ (div (@ (class "example"))
+ (pre "guix system vm my-config.scm "))
+ (p "This "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-system.html#Invoking-guix-system"))
+ "gives you a script to launch a VM")
+ " running an instance of the OS declared in \x91my-config.scm\x92. Already pretty convenient! And indeed, even more so back in the days when we were eating a fair amount of dog food. In fact, that\x92s how we ate our "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=7506"))
+ "first")
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=7737"))
+ "dog food dishes")
+ ", and the VM infrastructure was the fork and knife that made it more tolerable."
+ (br))
+ (p "So what could we test exactly? Roughly, we want to test that the instantiated system behaves according to the source \x91operating-system\x92 declaration: that user accounts are all there, that system services are running as expected, that all of the configuration is taken into account."
+ (br))
+ (p "To do that, we need to run the system under test in a VM, but we also need to instrument it. We use "
+ (a (@ (href "http://qemu.org")) "QEMU")
+ " to run our VMs, and QEMU along with the Linux virtio-serial module nicely supports communication between the guest operating system and the host, a strategy also used by "
+ (a (@ (href "https://github.com/NixOS/nixpkgs/blob/master/nixos/lib/test-driver/Machine.pm"))
+ "NixOS\x92 test driver")
+ ". Concretely, we define a "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/build/marionette.scm"))
+ "\x93marionette\x94")
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/tests.scm#n129"))
+ "service")
+ ", which hooks a Guile "
+ (a (@ (href "https://www.gnu.org/software/guile/manual/html_node/The-REPL.html"))
+ "read-eval-print loop")
+ " (REPL) inside the guest. This allows the host to evaluate arbitrary code in the guest VM."
+ (br))
+ (p "Now we can write build processes ("
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Derivations.html"))
+ "aka. \x93derivations\x94")
+ ") that will:"
+ (br))
+ (ol (li "instantiate an instrumented variant of the operating system configuration we want to test in a VM image;\n")
+ (li "spawn the VM, run a series of tests on the guest OS, and return the test results.\n"))
+ (p "Thus, a system test to make sure the "
+ (a (@ (href "https://www.gnu.org/software/guile/manual/html_node/System-Identification.html#index-scm_005funame"))
+ "\x91uname\x92")
+ " system call returns something that matches the OS declaration looks like this:"
+ (br))
+ (div (@ (class "example"))
+ (pre "(define (run-test)\n (define os\n ;; The declaration of the OS we want to instantiate and test.\n ;; Calling 'marionette-operating-system' instruments it.\n (marionette-operating-system\n (operating-system\n (host-name \"komputilo\")\n (timezone \"Europe/Berlin\")\n (locale \"en_US.UTF-8\")\n\n (bootloader (grub-configuration (device \"/dev/sdX\")))\n (file-systems %base-file-systems))))\n\n ;; Compute the script to run OS in a VM.\n (mlet %store-monad ((run (system-qemu-image/shared-store-script\n os #:graphic? #f)))\n (define test\n ;; The actual test. Here \x93#~\x94 is like \x93quote\x94, allowing us\n ;; to describe code to run in the build environment; it\x92s a\n ;; \x93g-expression.\x94\n #~(begin\n (use-modules (gnu build marionette)\n (srfi srfi-64)\n (ice-9 match))\n\n (define marionette\n\t ;; Spawn the VM that runs the declared OS.\n (make-marionette (list #$run)))\n\n (mkdir #$output)\n (chdir #$output)\n\n (test-begin \"basic\")\n\n (test-assert \"uname\"\n\t ;; Call the \x91uname\x92 Scheme function in the guest.\n\t ;; In the host, make sure its result (a vector) matches\n\t ;; our OS declaration above.\n (match (marionette-eval '(uname) marionette)\n (#(\"Linux\" host-name version _ architecture)\n (and (string=? host-name\n #$(operating-system-host-name os))\n (string-prefix? #$(package-version\n (operating-system-kernel os))\n version)\n (string-prefix? architecture %host-type)))))\n\n (test-end)\n (exit (= (test-runner-fail-count (test-runner-current)) 0))))\n\n ;; Turn the test into a buildable \x93derivation\x94.\n (gexp->derivation \"simple-test\" test\n #:modules '((gnu build marionette)))))\n"))
+ (p "There are interesting things going on here. First, while this is all Scheme code, there are in fact three tiers or strata of code at play here: the code that produces the OS declaration and the derivation, the build code of that derivation\x97the test\x97embodied in a "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/G_002dExpressions.html"))
+ "g-expression")
+ ", and code sent from the host to the guest VM via \x91marionette-eval\x92."
+ (br))
+ (p "Using Scheme all the way means we can share code, use the right tools such as the "
+ (a (@ (href "http://srfi.schemers.org/srfi-64/srfi-64.html"))
+ "SRFI-64 test framework")
+ " here, pass values from one tier to another, and so on. And of course, being a full-blown language rather than shell scripts or similar means we have a rich and semantically-clear interface at our fingertips: we can directly access the data structures that matter rather than grepping the output of high-level commands. As an example, we can directly query the "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Shepherd-Services.html"))
+ "system service manager")
+ " right "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/services/herd.scm"))
+ "from Scheme")
+ ", which is often useful in system tests."
+ (br))
+ (h4 "Status")
+ (p "Guix now includes the test infrastructure described above; running \x93make check-system\x94 runs all the currently defined tests. Currently we have "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/tests/base.scm"))
+ "tests for basic functionality")
+ ". This includes making sure that all the system services declared are available and running. We have tests for specific system services such as the "
+ (a (@ (href "https://www.gnu.org/software/mcron/"))
+ "mcron")
+ " job scheduling daemon\x97inspired by your parents\x92 cron, but with a powerful Scheme interface\x97and "
+ (a (@ (href "http://avahi.org/")) "Avahi")
+ " and its "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Name-Service-Switch.html"))
+ "name service switch")
+ " (NSS) integration."
+ (br))
+ (p "Last but not least, we have "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/tests/install.scm"))
+ "tests")
+ " of the full "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/System-Installation.html"))
+ "GuixSD installation procedure")
+ ", which turned out to be "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2016-06/msg00815.html"))
+ "more involved")
+ " than the other tests. This works by running the GuixSD installation image in a VM, using another VM image as the target installation media, and finally booting the newly-installed system."
+ (br))
+ (p "All the tests are automatically run on our build farm (see "
+ (a (@ (href "https://hydra.gnu.org/job/gnu/master/test.basic.x86_64-linux"))
+ "here")
+ ", "
+ (a (@ (href "https://hydra.gnu.org/job/gnu/master/test.installed-os.x86_64-linux"))
+ "here")
+ ", or "
+ (a (@ (href "https://hydra.gnu.org/job/gnu/master/test.mcron.i686-linux"))
+ "there")
+ "), which provides quick feedback. One step closer to 1.0!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a transactional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/introducing-guix-a-package-manager-and-distro-for-gnu.sxml b/website/posts/introducing-guix-a-package-manager-and-distro-for-gnu.sxml
new file mode 100644
index 0000000..b85d770
--- /dev/null
+++ b/website/posts/introducing-guix-a-package-manager-and-distro-for-gnu.sxml
@@ -0,0 +1,22 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "Introducing Guix, a package manager and distro for GNU")
+ (author . "Ludovic Courtès")
+ (date unquote
+ (make-date 0 0 0 0 22 11 2012 3600))
+ (content
+ div
+ (p (a (@ (href "http://www.gnu.org/software/guix/"))
+ "GNU Guix")
+ " is an on-going project to build a purely functional package manager and free software distribution of the GNU system."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection."
+ (br))
+ (p "Guix is approaching its first alpha release. It comes with a small and growing, self-contained user-land software distribution."
+ (br))
+ (p "The "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/ROADMAP"))
+ "road map")
+ " details the current plan. Let us know what you think, and join the fun!"
+ (br)))))
diff --git a/website/posts/join-gnu-guix-for-gsoc.sxml b/website/posts/join-gnu-guix-for-gsoc.sxml
new file mode 100644
index 0000000..7c8ae9b
--- /dev/null
+++ b/website/posts/join-gnu-guix-for-gsoc.sxml
@@ -0,0 +1,56 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Join GNU\xa0Guix for GSoC")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 8 3 2016 3600))
+ (content
+ div
+ (p "This year again the "
+ (a (@ (href "https://www.gnu.org/"))
+ "GNU Project")
+ " is a mentoring organization for the "
+ (a (@ (href "https://summerofcode.withgoogle.com/"))
+ "Google Summer of Code")
+ " (GSoC), and "
+ (a (@ (href "https://www.gnu.org/software/guix"))
+ "Guix")
+ " is participating under GNU\x92s umbrella."
+ (br))
+ (p "We have collected project ideas for "
+ (a (@ (href "https://libreplanet.org/wiki/Group:Guix/GSoC-2016"))
+ "Guix, GuixSD")
+ ", and "
+ (a (@ (href "https://libreplanet.org/wiki/Group:Guix/GSoC-2016#Project_ideas_for_the_GNU_Shepherd"))
+ "the GNU Shepherd")
+ " covering a wide range of topics. If you are passionate about computing freedom, Scheme, functional programming, or operating system development, check out the proposed projects. The list is far from exhaustive, so feel free to bring your own!"
+ (br))
+ (p "Get in touch with us on the "
+ (a (@ (href "https://www.gnu.org/software/guix/about/#contact"))
+ "mailing lists")
+ " or #guix on the Freenode IRC network."
+ (br))
+ (p "If you are an "
+ (a (@ (href "https://developers.google.com/open-source/gsoc/faq#can_i_participate_in_gsoc_as_both_a_mentor_and_a_student"))
+ "eligible student")
+ ", make sure to apply "
+ (a (@ (href "https://developers.google.com/open-source/gsoc/timeline"))
+ "by March 25th")
+ "."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "https://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "https://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "https://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/join-guix-for-an-on-line-hackathon-on-sep.-28-29.sxml b/website/posts/join-guix-for-an-on-line-hackathon-on-sep.-28-29.sxml
new file mode 100644
index 0000000..3f9c498
--- /dev/null
+++ b/website/posts/join-guix-for-an-on-line-hackathon-on-sep.-28-29.sxml
@@ -0,0 +1,28 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "Join Guix for an on-line hackathon on Sep. 28-29!")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 18 9 2013 7200))
+ (content
+ div
+ (p "GNU Guix "
+ (a (@ (href "http://www.gnu.org/gnu30/celebration"))
+ "joins other projects")
+ " in celebrating "
+ (a (@ (href "http://www.gnu.org/gnu30/"))
+ "GNU's 30th anniversary")
+ "."
+ (br))
+ (p "Join the #guix channel of the Freenode IRC network for a Guix hackathon on Sep. 28-29!"
+ (br))
+ (p "Tasks will include "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/guix.html#Defining-Packages"))
+ "packaging")
+ " your favorite software, hunting "
+ (a (@ (href "http://bugs.gnu.org/guix")) "bugs")
+ ", and improving stand-alone builds of the Guix-based GNU system. This is accessible to anyone with experience with GNU/Linux packages; people with experience in "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " may find additional things to work on."
+ (br))
+ (p "Happy hacking!" (br)))))
diff --git a/website/posts/join-us-for-a-guix-hackathon-on-sep.-27-28.sxml b/website/posts/join-us-for-a-guix-hackathon-on-sep.-27-28.sxml
new file mode 100644
index 0000000..47c4e7c
--- /dev/null
+++ b/website/posts/join-us-for-a-guix-hackathon-on-sep.-27-28.sxml
@@ -0,0 +1,35 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "Join us for a Guix hackathon on Sep. 27-28!")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 16 9 2014 7200))
+ (content
+ div
+ (p "The GNU Guix project is organizing a hackathon on September 27th and 28th, 2014. The hackathon will take place primarily on-line, on the #guix IRC channel on Freenode. We have started collecting a "
+ (a (@ (href "http://libreplanet.org/wiki/Group:Guix/Hackathon-09-2014"))
+ "list of hacking ideas")
+ ". Feel free to "
+ (a (@ (href "http://www.gnu.org/software/guix/#contact"))
+ "stop by")
+ " and make more suggestions!"
+ (br))
+ (p "The hackathon is accessible to anyone with experience in GNU/Linux packaging or systems hacking. Scheme programmers will find additional things to work on in the tool set. Finally, we will also be welcoming newcomers and helping them get started."
+ (br))
+ (p "This is a followup to "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=7720"))
+ "last year's hackathon")
+ ", organized for "
+ (a (@ (href "http://www.gnu.org/gnu/initial-announcement.html"))
+ "GNU's 30th anniversary")
+ "."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is the functional package manager for the GNU system, and a distribution thereof."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. It also offers a declarative approach to operating system configuration management. Guix uses low-level mechanisms from the Nix package manager, with Guile Scheme programming interfaces."
+ (br))
+ (p "At this stage the distribution can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el."
+ (br)))))
diff --git a/website/posts/meet-guix-at-fosdem.sxml b/website/posts/meet-guix-at-fosdem.sxml
new file mode 100644
index 0000000..446e05f
--- /dev/null
+++ b/website/posts/meet-guix-at-fosdem.sxml
@@ -0,0 +1,66 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Meet Guix at FOSDEM!")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 22 1 2016 3600))
+ (content
+ div
+ (p "One week to "
+ (a (@ (href "https://fosdem.org/2016")) "FOSDEM")
+ "! This year, there will be no less than six Guix-related talks. This and the fact that we are addressing different communities is exciting."
+ (br))
+ (p "First, on Saturday morning, in the "
+ (a (@ (href "https://fosdem.org/2016/schedule/track/gnu_guile/"))
+ "GNU Guile track")
+ " (room K.3.201):"
+ (br))
+ (ul (li (a (@ (href "https://fosdem.org/2016/schedule/event/guixhurd/"))
+ "Adding GNU/Hurd support to GNU Guix")
+ " (Manolis Ragkousis)\n")
+ (li (a (@ (href "https://fosdem.org/2016/schedule/event/guix/"))
+ "A gentle introduction to functional package management with GNU Guix")
+ " (Ricardo Wurmus)\n")
+ (li (a (@ (href "https://fosdem.org/2016/schedule/event/guixdistro/"))
+ "Your distro is a Scheme library")
+ " (Ludovic Courtès)\n")
+ (li (a (@ (href "https://fosdem.org/2016/schedule/event/guixmodules/"))
+ "Foreign packages in GNU Guix")
+ " (Pjotr Prins)\n"))
+ (p "On Saturday afternoon:" (br))
+ (ul (li (a (@ (href "https://fosdem.org/2016/schedule/event/deployments_with_gnu_guix/"))
+ "Reproducible and Customizable Deployments with GNU Guix")
+ " (Ludovic Courtès, "
+ (a (@ (href "https://fosdem.org/2016/schedule/track/distributions/"))
+ "distributions track")
+ ", room K.4.201)\n")
+ (li (a (@ (href "https://fosdem.org/2016/schedule/event/guix_tox/"))
+ "Guix-tox, a functional version of tox")
+ " (Cyril Roelandt, "
+ (a (@ (href "https://fosdem.org/2016/schedule/track/python/"))
+ "Python track")
+ ", room UD2.218A)\n"))
+ (p "On Sunday noon:" (br))
+ (ul (li (a (@ (href "https://fosdem.org/2016/schedule/event/hpc_bigdata_gnu_guix/"))
+ "Reproducible and User-Controlled Package Management in HPC with GNU Guix")
+ " (Ricardo Wurmus, "
+ (a (@ (href "https://fosdem.org/2016/schedule/track/hpc,_big_data_and_data_science/"))
+ "HPC track")
+ ", room AW1.126)\n"))
+ (p "See you there!" (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/one-week-to-fosdem.sxml b/website/posts/one-week-to-fosdem.sxml
new file mode 100644
index 0000000..18b61e0
--- /dev/null
+++ b/website/posts/one-week-to-fosdem.sxml
@@ -0,0 +1,17 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "One week to FOSDEM!")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 25 1 2014 3600))
+ (content
+ div
+ (p (a (@ (href "https://fosdem.org/2014/"))
+ "FOSDEM")
+ " takes place next week. We'll be giving a "
+ (a (@ (href "https://fosdem.org/2014/schedule/event/gnuguix/"))
+ "talk")
+ " about Guix and the GNU system on Sunday at noon, in the "
+ (a (@ (href "https://fosdem.org/2014/schedule/track/distributions/"))
+ "distributions devroom")
+ ". Interested parties, freedom supporters, GNU hackers, and Schemers all alike are welcome to join in!"
+ (br)))))
diff --git a/website/posts/porting-guix-and-guixsd.sxml b/website/posts/porting-guix-and-guixsd.sxml
new file mode 100644
index 0000000..0768c28
--- /dev/null
+++ b/website/posts/porting-guix-and-guixsd.sxml
@@ -0,0 +1,56 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Porting Guix and GuixSD")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 7 9 2015 7200))
+ (content
+ div
+ (p "Quite a lot has happened lately when it comes to porting Guix and GuixSD to other systems."
+ (br))
+ (p "A few weeks ago, Manolis Ragkousis "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00379.html"))
+ "announced")
+ " the completion of the GSoC project whose purpose was to port Guix to the Hurd. The system distribution, GuixSD, cannot run GNU/Hurd yet, but the package manager itself can both cross-compile from GNU/Linux to GNU/Hurd and build natively on GNU/Hurd. The work of Manolis is being gradually merged in the main branch."
+ (br))
+ (p "More recently, Mark H Weaver "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00500.html"))
+ "posted")
+ " a series of patches porting GuixSD to MIPS (Lemote Yeeloong), making it the first GuixSD port to non-Intel-compatible hardware (the package manager itself has supported mips64el "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=7766"))
+ "for two years")
+ " already.) By removing several platform-specific assumptions, this work paves the way for future ports."
+ (br))
+ (p "Lastly, we are glad to report the "
+ (a (@ (href "http://www.gnu.org/software/guix/donate/"))
+ "donation")
+ " of "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2015-09/msg00134.html"))
+ "two ARM machines")
+ " for our build farm. They will allow us to continuously test the ARM port, which was completed "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8175"))
+ "earlier this year")
+ ", and to publish pre-built binaries on our "
+ (a (@ (href "http://hydra.gnu.org/jobset/gnu/master"))
+ "build farm")
+ ". We are grateful to the donors whose contribution makes a big difference for the development of Guix on ARM. If you would like to help out with hardware and/or hosting, "
+ (a (@ (href "http://www.gnu.org/software/guix/donate/"))
+ "please get in touch")
+ "!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.sxml b/website/posts/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.sxml
new file mode 100644
index 0000000..66777d0
--- /dev/null
+++ b/website/posts/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.sxml
@@ -0,0 +1,41 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "Reproducible and User-Controlled Software Environments in HPC with Guix")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 1 7 2015 7200))
+ (content
+ div
+ (p "Our paper entitled "
+ (a (@ (href "https://hal.inria.fr/hal-01161771/en"))
+ "Reproducible and User-Controlled Software Environments in HPC with Guix")
+ " was accepted for "
+ (a (@ (href "http://reppar.org/")) "RepPar")
+ ", a workshop on reproducibility in parallel computing:"
+ (br))
+ (p " Support teams of high-performance computing (HPC) systems often find themselves between a rock and a 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\x97software 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 show how it can improve reproducibility and sharing among researchers with representative use cases. "
+ (br))
+ (p "The paper can be thought of as a followup to the recent "
+ (a (@ (href "http://elephly.net/posts/2015-04-17-gnu-guix.html"))
+ "experience report")
+ " by Ricardo Wurmus."
+ (br))
+ (p "We believe package management and reproducibility are key topics for HPC research. We are glad to have this opportunity to discuss the subject with researchers of the field."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/reproducible-builds-a-means-to-an-end.sxml b/website/posts/reproducible-builds-a-means-to-an-end.sxml
new file mode 100644
index 0000000..98abb97
--- /dev/null
+++ b/website/posts/reproducible-builds-a-means-to-an-end.sxml
@@ -0,0 +1,115 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title .
+ "Reproducible builds: a means to an end")
+ (author . "Ludovic Courtès")
+ (date unquote
+ (make-date 0 0 0 0 11 11 2015 3600))
+ (content
+ div
+ (h4 "What we stand for")
+ (p "GNU Guix is committed to improving the freedom and autonomy of computer users. This obviously manifests in the fact that GuixSD is a "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "fully free distro")
+ ", and this is what GNU stands for. All the packages in Guix are built from source, including things like firmware where there is an unfortunate tendency to use pre-built binaries; that way, users can know what software they run. On the technical side, Guix also tries hard to empower users by making the whole system as hackable as possible, in a uniform way\x97making "
+ (a (@ (href "https://www.gnu.org/philosophy/free-sw.html"))
+ "Freedom #1")
+ " practical, à la Emacs."
+ (br))
+ (p "Guix provides pre-compiled binaries of software packages as a service to its users\x97these are "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Substitutes.html"))
+ "substitutes")
+ " for local builds. This is a convenient way to save time, but it could become a threat to users if they cannot establish that those substitutes are authentic\x97that their "
+ (a (@ (href "http://www.gnu.org/licenses/gpl.html#section1"))
+ "Corresponding Source")
+ " really is what it claims to be."
+ (br))
+ (h4 "Reproducible builds")
+ (p "We view \x93reproducible builds\x94 as a technical means to an end: that of guaranteeing user autonomy and safety. What matters here is that, if package build processes are reproducible, then users actually have a chance to "
+ (em "verify")
+ " that the substitutes (pre-compiled binaries) they download correspond to the source code that supposedly produced them."
+ (br))
+ (p "Guix builds packages in a "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Features.html"))
+ "fully isolated environment")
+ " to maximize reproducibility\x97a crucial feature inherited from "
+ (a (@ (href "http://nixos.org/nix/")) "Nix")
+ ". Thus, by construction, very few variations are possible between separate instances of a build environment; the set of files accessible in the environment, the host name, environment variables, locale, and so on are fully under control and cannot change. This eliminates a "
+ (a (@ (href "https://reproducible-builds.org/docs/test-bench/"))
+ "whole class of possible discrepancies")
+ " between independent builds."
+ (br))
+ (p "The only things that may vary are the kernel, and the hardware. The most prominent example of how \x91hardware\x92 details can leak into a build process are timestamps: it\x92s unfortunately quite common for build processes to query the system clock and record it in build outputs. Eelco Dolstra, Andres Löh, and Nicolas Pierron described sources of non-determinism in their "
+ (a (@ (href "https://nixos.org/~eelco/pubs/nixos-jfp-final.pdf"))
+ "2010 JFP paper about NixOS")
+ ", along with a study on how this affects packages of the distribution in practice. The "
+ (a (@ (href "https://wiki.debian.org/ReproducibleBuilds"))
+ "Reproducible Debian")
+ " project has since made a similar evaluation but at a larger scale, and with a larger number of independent builds, thereby providing more insight."
+ (br))
+ (p "Reproducible Debian has demonstrated one thing: contrary to what one might expect, sources of non-determinism are common in build processes. To eliminate the sources of non-determinism that remain in spite of the isolation techniques used in Nix and Guix, the most viable approach appears to be to fix upstream projects that suffer from these problems\x97one by one."
+ (br))
+ (p "The "
+ (a (@ (href "http://reproducible-builds.org"))
+ "reproducible-builds.org")
+ " project is a great effort to try and address that collectively. We are glad Guix hackers were invited to participate in the first "
+ (a (@ (href "https://reproducible-builds.org/events/athens2015/"))
+ "Reproducible Build Summit")
+ " organized by the project, which will take place in December."
+ (br))
+ (h4 "Going further")
+ (p "How can we take advantage of the fact that builds are reproducible, when they are, to actually empower users? There are several things we can do."
+ (br))
+ (p "First, users must be able to build software locally in the same way distribution developers would do it. This possibility is an integral part of the transparent source/binary deployment model provided by functional package management; Guix users can use the --no-substitutes command-line option to force a local build."
+ (br))
+ (p "Second, we must make it easy for users to use the binary provider of their choice, and possibly to use several of them, something that Guix allows."
+ (br))
+ (p "Third, it must be equally simple for any user to publish their locally-built binaries as a way to improve diversity and avoid any single point of failure or trust. The "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-publish.html"))
+ "guix publish")
+ " command is a simple way to serve signed binaries over HTTP. A fully peer-to-peer approach based on GNUnet was tackled as part of "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8318"))
+ "GSoC 2015")
+ "; the code needs more work before it can be integrated into Guix, but the approach is promising."
+ (br))
+ (p "Last but not least, users must be able to challenge binary providers "
+ (em "by themselves")
+ ". The ability to verify binaries should not be the privilege of power developers. To address that, the "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8398"))
+ "just-released")
+ " 0.9.0 version of GNU Guix provides a new command called "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-challenge.html"))
+ "guix challenge")
+ ". The command allows users to automatically compare the build results of their local builds against those served by one or more binary providers. It allows both to find out about non-reproducible builds\x97and indeed, has already "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2015-10/msg00728.html"))
+ "proved")
+ " to be "
+ (a (@ (href "http://debbugs.gnu.org/cgi/bugreport.cgi?bug=21803"))
+ "fruitful")
+ ", and possibly to find out about compromised servers."
+ (br))
+ (p "This and other matters were discussed in a "
+ (a (@ (href "https://gnunet.org/guix2015video"))
+ "Guix talk earlier this week")
+ " ("
+ (a (@ (href "https://www.gnu.org/software/guix/guix-rennes-20151109.pdf"))
+ "slides")
+ "). We strongly believe in a future where the ability to authenticate distribution-provided binaries will be commonplace. Let\x92s build it!"
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/service-composition-in-guixsd.sxml b/website/posts/service-composition-in-guixsd.sxml
new file mode 100644
index 0000000..0f5a4d4
--- /dev/null
+++ b/website/posts/service-composition-in-guixsd.sxml
@@ -0,0 +1,149 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Service composition in GuixSD")
+ (author . "Ludovic Courtès")
+ (date unquote
+ (make-date 0 0 0 0 19 11 2015 3600))
+ (content
+ div
+ (p "GuixSD provides a declarative, stateless approach to operating system configuration management. In this context, the mechanism offered to select and compose system services is a crucial one. This post presents the new service framework introduced in the "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8398"))
+ "0.9.0 version")
+ " of GNU\xa0Guix."
+ (br))
+ (h4 "Declarative Configuration Management")
+ (p "GuixSD is not like your parents\x92 distro. Instead of fiddling with configuration files all around, or running commands that do so as a side effect, the system administrator "
+ (em "declares")
+ " what the system will be like. This takes the form of an "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Using-the-Configuration-System.html"))
+ "operating-system declaration")
+ ", which specifies all the details: file systems, user accounts, locale, timezone, system services, etc."
+ (br))
+ (p "If you\x92re familiar with it, this may remind you of what deployment tools like Ansible and Puppet provide. There is an important difference though: GuixSD takes a stateless\x97or \x93purely functional\x94\x97approach. This means that instantiating the system with "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-system.html"))
+ "guix system")
+ " always produces the same result, without modifying the current system state. This is what makes it possible to test new system configurations, roll-back to previous ones, and so on. The "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-system.html"))
+ "guix system")
+ " command allows system configurations to be instantiated on the bare metal, in virtual machines, or in "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8386"))
+ "containers")
+ ", which makes it easy to test them."
+ (br))
+ (p "In GuixSD, operating-system declarations are first-class objects in the "
+ (a (@ (href "https://www.gnu.org/software/guile/"))
+ "host language")
+ ". They can be inspected at the REPL:"
+ (br))
+ (div (@ (class "example"))
+ (pre "scheme@(guile-user)> ,use (gnu)\nscheme@(guile-user)> (define os (load \"os-config.scm\"))\nscheme@(guile-user)> (operating-system-kernel os)\n$1 = #<package linux-libre-4.2.6 gnu/packages/linux.scm:279 2ea90c0>\nscheme@(guile-user)> (length (operating-system-user-services os))\n$2 = 30\nscheme@(guile-user)> (map user-account-name (operating-system-users os))\n$3 = (\"alice\" \"nobody\" \"root\")\n"))
+ (p "It is also possible to write functions that take or return OS configurations. For instance, the "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/vm.scm#n382"))
+ "virtualized-operating-system function")
+ " returns a variant of the given OS where the set of file systems and the initrd are changed so that the resulting OS can be used in a lightweight virtual machine environment. Likewise for "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/system/linux-container.scm#n50"))
+ "containerized-operating-system")
+ "."
+ (br))
+ (h4 "Services Beyond Daemons")
+ (p "System services are specified in the services field of operating-system declarations, which is a list of service objects. As a user, we want to be able to ideally add one line specifying the "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Services.html"))
+ "system service")
+ " we want to add, possibly with several instances of a service, and have GuixSD do the right thing."
+ (br))
+ (p "Before 0.9.0, GuixSD had a narrow definition of what a \x93system service\x94 is. Each service in the operating-system configuration had to map to exactly one dmd service\x97"
+ (a (@ (href "https://www.gnu.org/software/dmd"))
+ "GNU dmd")
+ " is the init system of GuixSD. This would work well in many cases: an SSH server or a log-in daemon is indeed a service that dmd has to take care of, even a file system mount is an operation that can be usefully inserted into dmd\x92s service dependency graph."
+ (br))
+ (p "However, this simple mapping failed to capture more complex service composition patterns. A striking example is \x93super-daemons\x94\x97daemons that can spawn other daemons, such as dbus-daemon or inetd. From the user viewpoint, it does not matter whether a daemon is started by dmd, or by dbus-daemon, or by inetd; this should be transparent. If it\x92s a D-Bus service, then dbus-daemon\x92s configuration file should be told about the service; if it\x92s an inetd service, then inetd.conf should be augmented accordingly; if it\x92s a dmd service, information on how to start and stop it should go to dmd\x92s configuration file. Unfortunately, the pre-0.9.0 services could not express such things."
+ (br))
+ (p "Worse, this approach did not capture the more general pattern of "
+ (em "service extension")
+ ". In the examples above, the super-daemons are effectively "
+ (em "extended")
+ " by other services that rely on them. But there are many cases where services are similarly extended: "
+ (a (@ (href "https://wiki.gentoo.org/wiki/Project:Eudev"))
+ "eudev")
+ " can be passed new device rules, "
+ (a (@ (href "http://www.freedesktop.org/wiki/Software/polkit/"))
+ "polkit")
+ " can be extended with new rules and actions, the "
+ (a (@ (href "http://www.linux-pam.org/"))
+ "Pluggable authentication module system (PAM)")
+ " can be extended with new services, and so on. At that point it was clear that GuixSD\x92s naive approach wouldn\x92t scale."
+ (br))
+ (h4 "Composing System Services")
+ (p "The lesson learned from these observations is that system services "
+ (em "extend")
+ " each other in various way. The new "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Service-Composition.html"))
+ "service composition framework")
+ " is built around this model: \x93system services\x94, broadly defined, can extend each other, and services and their \x93extends\x94 relationships form a graph. The root of the graph is the operating system itself."
+ (br))
+ (p "We can see that this pattern applies to services that are not daemons. PAM is one such example. Accounts are another example: GuixSD provides an \x93account service\x94 that can be extended with new user accounts or groups; for example, the "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Networking-Services.html#index-ntp_002dservice"))
+ "Network time protocol (NTP) daemon")
+ " needs to run under the unprivileged \x93ntp\x94 user, so the NTP service extends the account service with an \x93ntp\x94 user account. Likewise, the \x93/etc\x94 service can be extended with new files to be added to /etc; the \x93setuid\x94 service can be extended with new programs to be made setuid-root. "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Service-Reference.html"))
+ "See the manual")
+ " for more examples."
+ (br))
+ (p "The nice thing is that composition of services is made "
+ (em "explicit")
+ ": extensions can only happen where explicit extension relationships have been "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Service-Types-and-Services.html"))
+ "declared")
+ ". By looking at the extension graph, users can see how services fit together. The "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-system.html#system_002dextension_002dgraph"))
+ "guix system extension-graph")
+ " command, for instance, takes an operating-system declaration and renders the extension graph in the Graphviz format, making it easy to inspect the OS configuration structure."
+ (br))
+ (p "The API makes it easy to see how services contributed to a specific service\x92s configuration. For instance, the following expression shows the PAM service as extended by other declared services:"
+ (br))
+ (div (@ (class "example"))
+ (pre "(fold-services (operating-system-services os) \n #:target-type pam-root-service-type)\n"))
+ (p "The result is a service object whose value is a list of pam-service objects. Likewise, the following expression returns the /etc service, whose value is a list of entries to be added to /etc:"
+ (br))
+ (div (@ (class "example"))
+ (pre "(fold-services (operating-system-services os) \n #:target-type etc-service-type)\n"))
+ (p "This contrasts with the approach taken by "
+ (a (@ (href "http://nixos.org/")) "NixOS")
+ ", GuixSD\x92s cousin, and described in this "
+ (a (@ (href "https://nixos.org/~eelco/pubs/nixos-jfp-final.pdf"))
+ "2010 paper")
+ ". In NixOS, the whole system configuration is described in an \x93attribute set\x94\x97a list of key/value associations, similar to JavaScript objects or Python dictionaries. Each NixOS service is passed the whole system configuration, allowing it to inspect and change any part of it."
+ (br))
+ (p "This form of "
+ (a (@ (href "https://en.wikipedia.org/wiki/Ambient_authority"))
+ "ambient authority")
+ " gives a lot of flexibility, but it makes it harder to reason about service composition\x97all a service implementation does is inspect, add, or modify attributes of the global configuration, which may or may not affect other services. The use of a loose key/value dictionary also prevents good error reporting; for instance, a typo in a service name may go undetected. Lastly, NixOS services are enabled by writing service.enable\xa0=\xa0true stanzas, which leads to complications for services that may have several instances, each with its own configuration."
+ (br))
+ (h4 "Wrapping Up")
+ (p "The new "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Service-Composition.html"))
+ "service composition framework")
+ " in GuixSD 0.9.0 addresses shortcomings found in previous versions of GuixSD. It simplifies operating-system declarations for users, and provides a highly extensible framework that clearly exposes the way services are composed."
+ (br))
+ (p "This new framework has already allowed us to integrate "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Desktop-Services.html"))
+ "Freedesktop and GNOME services")
+ " in a convenient way. We hope it will prove fruitful as we address other types of services, such as Web services."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))
diff --git a/website/posts/timely-delivery-of-security-updates.sxml b/website/posts/timely-delivery-of-security-updates.sxml
new file mode 100644
index 0000000..e5e5aec
--- /dev/null
+++ b/website/posts/timely-delivery-of-security-updates.sxml
@@ -0,0 +1,116 @@
+(begin
+ (use-modules (srfi srfi-19))
+ `((title . "Timely delivery of security updates")
+ (author . "Ludovic Courtès")
+ (date unquote (make-date 0 0 0 0 2 3 2016 3600))
+ (content
+ div
+ (p "Yesterday, a "
+ (a (@ (href "http://openssl.org/news/secadv/20160301.txt"))
+ "new version of OpenSSL was released")
+ ", addressing several serious vulnerabilities, some of which are "
+ (a (@ (href "https://drownattack.com/"))
+ "nicknamed \"DROWN\"")
+ ". Like all free software distributions, we were waiting to deploy the fixes as soon as possible. This time though, we are happy to report that we were able to "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/commit/?id=caeadfddb01d2cda19d2f761ba9906ef8f162173"))
+ "deploy it")
+ " to users faster than before: an hour or so after disclosure. This was made possible by fixing our fast update deployment mechanism, which is based on "
+ (em "grafts")
+ "."
+ (br))
+ (h4 "Updates in a functional package management framework")
+ (p "GNU\xa0Guix implements the "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Introduction.html"))
+ "functional package management discipline")
+ ". What this means is that the the package graph in Guix is an immutable, "
+ (a (@ (href "https://en.wikipedia.org/wiki/Persistent_data_structure"))
+ "persistent data structure")
+ "\x97similar to a singly-linked list in a functional programming language, or to the "
+ (a (@ (href "http://eagain.net/articles/git-for-computer-scientists/"))
+ "object graph in the Git version control system")
+ "."
+ (br))
+ (p "A common difficulty with persistent data structures is the algorithmic complexity of updates\x97the computational cost of updating an arbitrary element of the data structure. For instance, to update the nth element of a singly-linked list, you first need to traverse and copy the n\xa0?\xa01 elements at the head of the list, then insert the new element and make it point to the tail of the list."
+ (br))
+ (p "With the functional package management paradigm, the cost of updating a package is simple to understand: you need to rebuild the package itself, "
+ (em "and all the packages that depend on it")
+ ". This is nice in many ways: all packages "
+ (em "must")
+ " build from source, there is no way we can be using binaries that cannot be "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8407"))
+ "rebuilt from their Corresponding Source")
+ ", breakage due to incompatible application binary interfaces (ABIs) is foreign to our users, we have a precise trail of the tools that produced binaries\x97that is, builds are "
+ (a (@ (href "https://en.wikipedia.org/wiki/Referential_transparency"))
+ "\x93referentially transparent\x94")
+ ", and as a bonus, we get "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Features.html"))
+ "features")
+ " such as transactional upgrades and rollbacks, peaceful coexistence of different variants of the same package, and more."
+ (br))
+ (p "But obviously, this update cost is very high when all you want is to deliver an important security update in a core package. Regarding yesterday\x92s update, "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Invoking-guix-refresh.html"))
+ "guix refresh -l openssl")
+ " shows that 2,115 packages depend on OpenSSL. On top of that, Guix supports 4 architectures, so needless to say, rebuilding everything that depends on OpenSSL would take time. Sure, users do not have to wait for "
+ (a (@ (href "http://www.gnu.org/software/guix/manual/html_node/Substitutes.html"))
+ "pre-built binaries")
+ " and can instead build just what they need locally; in practice, they\x92d better have a powerful machine, though."
+ (br))
+ (h4 "Grafting important updates")
+ (p "A solution to this problem has been floating around for some time: the idea is to "
+ (em "graft")
+ " important package updates onto packages that depend on it. That way, we would rebuild OpenSSL, but all we need to do for packages that depend on OpenSSL is to substitute the reference to the \x93broken\x94 OpenSSL with a reference to the security update, with the understanding that this substitution process is orders of magnitude cheaper than rebuilding packages, and faster than redownloading rebuilt packages."
+ (br))
+ (p "Shea Levy had implemented a form of grafting "
+ (a (@ (href "https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/replace-dependency.nix"))
+ "in Nixpkgs")
+ " in 2013, and Guix itself has provided "
+ (a (@ (href "https://www.gnu.org/software/guix/manual/html_node/Security-Updates.html"))
+ "the infrastructure for grafted updates")
+ " since "
+ (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8147"))
+ "version 0.8")
+ " in 2014. With Guix, package developers simply have to "
+ (a (@ (href "http://git.savannah.gnu.org/cgit/guix.git/commit/?id=caeadfddb01d2cda19d2f761ba9906ef8f162173"))
+ "define a replacement")
+ " in the object representing the package that needs an update and the tools automatically pick the replacement and graft it onto packages as needed."
+ (br))
+ (p "The problem is that these implementations had a severe limitation, described in "
+ (a (@ (href "http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22139"))
+ "this bug report")
+ ": grafting was not "
+ (em "recursive")
+ ". When we provided a patched OpenSSL to be grafted, any package that directly depended on OpenSSL, would be appropriately grafted to refer to the new OpenSSL. However, if a package depended on libfoo, which in turn depended on OpenSSL, then that package would keep referring to the old libfoo, which refered to the old OpenSSL. That made grafts useless in most situations."
+ (br))
+ (h4 "Good news!")
+ (p "This bug was finally addressed, "
+ (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2016-03/msg00009.html"))
+ "just in time for yesterday\x92s OpenSSL update")
+ ". We have identified things to improve, but overall, it has worked pretty well. It has worked so well that we even experienced "
+ (a (@ (href "http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22876#8"))
+ "our first ABI break")
+ " like all "
+ (a (@ (href "https://bugzilla.redhat.com/show_bug.cgi?id=1313509"))
+ "real")
+ (a (@ (href "https://bugs.gentoo.org/show_bug.cgi?id=576128"))
+ "distros")
+ "!"
+ (br))
+ (p "From now on, we have confidence that we can deliver important updates quickly using grafts, and happily rebuild the world in the background, whenever is convenient. This is an important improvement for functional package management to keep our users happy and safe."
+ (br))
+ (h4 "About GNU Guix")
+ (p (a (@ (href "http://www.gnu.org/software/guix"))
+ "GNU Guix")
+ " is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
+ (a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
+ "respects the user's freedom")
+ "."
+ (br))
+ (p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
+ (a (@ (href "http://www.gnu.org/software/guile"))
+ "Guile")
+ " modules, using extensions to the "
+ (a (@ (href "http://schemers.org")) "Scheme")
+ " language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
+ (br))
+ (p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
+ (br)))))