aboutsummaryrefslogtreecommitdiff
-*- mode: org; coding: utf-8; -*-

#+TITLE: Tentative GNU Guix Road Map

Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>

  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
  notice and this notice are preserved.

The goals of the GNU Guix project are two-fold:

  - to build a purely functional package manager, based on Nix and
    Guile;

  - to use it to build a practical 100% free software distribution of
    GNU/Linux and possibly other GNU variants, with a focus on the
    promotion and tight integration of GNU components–the GNU system.

Since its inception, the project has gone a long way towards that goal.  Below
is a list of items we want for version "1.0" of the Guix System Distribution.
There will be a few 0.x releases by then to give the new features more
exposure and testing.

You're welcome to discuss this road map on guix-devel@gnu.org or #guix on
the Libera Chat IRC network!

* Features scheduled for 1.0

  - larger & more robust build farm
    + we need a powerful, dedicated front-end
    + armhf-linux build machine
    + leave Hydra in favor of 'guix publish' + custom code?
  - more OS features
    + LVM support
    + encrypted root
    + configurable name service switch
    + whole-system unit tests, using VMs
  - more service definitions
    + mcron, postfix(?), wicd(?), etc.
  - better 'guix system'
    + 'reconfigure' should be able to restart non-essential services
    + support for '--list-generations' and '--delete-generations'
  - better 'guix pull'
    + using Git to fetch the source instead of re-downloading everything
    + build more quickly
    + install new .mo files and new manual
    + authentication of the Guix source: use signed commits?
  - simplified, purely declarative service list in 'operating-system'
    + it should be possible to inspect the service instance declarations and
      settings
  - GUIs
    + integrate guix-web?
    + guile-ncurses installer?
  - 'guix publish'?

* Features for later

  - complete GNU/Hurd port
  - use content-based addressing when downloading substitutes to reduce
    bandwidth requirements
    + design nar v2 format where file contents are replaced by their hashes
    + leverage /gnu/store/.links
  - binary origin tracking
    + keep signatures in sqlite.db
    + preserve signatures upon import/export
  - peer-to-peer distribution of updates (GNUnet?)
  - more deterministic builds
    + identify & fix sources of non-determinism in builds
    + strengthen guix-daemon containers to further increase reproducibility
    + trusting-trust: bootstrap with different tool chains
    + fixed-point: re-bootstrap until fixed point is reached
    + distributed validation: compare contents of store items with others
      * resist a hydra.gnu.org compromise
  - reproducible containers: mix of 'guix environment' and 'guix system vm'
  - execute code with least privilege
    + build containers like guix-daemon does
    + provide a Plash-like interface in Bash
  - daemon rewritten in Guile
  - more shepherd integration
    + monitor network interfaces and start/stop events based on that
    + include a DHCP client written in Scheme
720db2ce12e079f2dbabe'>gnu: linux-libre: Default to schedutil cpufreq governor on arm and arm64....This has been the recommended default for arm and arm64 since since v5.9 (upstream commit f259eab3ea0e7ed73db91f6358274dd3a9a27d79). * gnu/packages/aux-files/linux-libre/5.10-arm.conf, gnu/packages/aux-files/linux-libre/5.10-arm.conf, gnu/packages/aux-files/linux-libre/5.11-arm.conf, gnu/packages/aux-files/linux-libre/5.11-arm.conf: Enable CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL, disable CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE. Vagrant Cascadian 2021-05-06gnu: linux-libre: Update arm64 config to support Pinebook Pro....* gnu/packages/aux-files/linux-libre/5.11-arm64.conf: Add configurations to support video, audio, USB-C and battery on Pinebook Pro. Vagrant Cascadian 2021-03-31gnu: linux-libre 5.10: Update to 5.10.27....* gnu/packages/linux.scm (linux-libre-5.10-version): Update to 5.10.27. (linux-libre-5.10-pristine-source): Update hash. * gnu/packages/aux-files/linux-libre/5.10-x86_64.conf: Update for linux-libre@5.10.27. Leo Famulari 2021-03-31gnu: linux-libre: Update to 5.11.11....* gnu/packages/linux.scm (linux-libre-5.11-version): Update to 5.11.11. (linux-libre-5.11-pristine-source): Update hash. * gnu/packages/aux-files/linux-libre/5.11-x86_64.conf: Update for linux-libre@5.11.11. Leo Famulari 2021-02-21gnu: ungoogled-chromium: Update default preferences....* gnu/packages/aux-files/chromium/master-preferences.json: Adjust for upstream changes. Marius Bakke 2021-02-16gnu: Add linux-libre 5.11....* gnu/packages/linux.scm (linux-libre-5.11-version, deblob-scripts-5.11, linux-libre-5.11-pristine-source, linux-libre-5.11-source, linux-libre-5.11): New variables. * gnu/packages/aux-files/linux-libre/5.11-x86_64.conf, gnu/packages/aux-files/linux-libre/5.11-i686.conf, gnu/packages/aux-files/linux-libre/5.11-arm.conf, gnu/packages/aux-files/linux-libre/5.11-arm64.conf: New files. * Makefile.am (AUX_FILES): Add them. Leo Famulari 2021-02-07guile: Do not install Guile/libgc allocators for GMP....Fixes <https://bugs.gnu.org/46330>. * gnu/packages/aux-files/guile-launcher.c (main): Clear 'scm_install_gmp_memory_functions'. Ludovic Courtès 2021-02-04gnu: Update linux-libre configurations for 5.10.13....* gnu/packages/aux-files/linux-libre/5.10-arm.conf, gnu/packages/aux-files/linux-libre/5.10-arm64.conf, gnu/packages/aux-files/linux-libre/5.10-i686.conf, gnu/packages/aux-files/linux-libre/5.10-x86_64.conf: Update for 5.10.13. Leo Famulari 2021-02-03gnu: Remove leftover kernel configurations for linux-libre 5.9....This is a followup to commit 8727870ff4e4d5016431985a888f3ca589d81e02. * gnu/packages/aux-files/linux-libre/5.9-arm.conf, gnu/packages/aux-files/linux-libre/5.9-arm64.conf, gnu/packages/aux-files/linux-libre/5.9-i686.conf, gnu/packages/aux-files/linux-libre/5.9-x86_64.conf: Delete files. * Makefile.am (AUX_FILES): Remove them. Leo Famulari 2020-12-20gnu: vim: Automatically find vim plugins....* gnu/packages/vim.scm (vim)[arguments]: Add new 'install-guix.vim phase to install vendor specific vimrc. * gnu/packages/aux-files/guix.vim: New file. * Makefile.am (AUX_FILES): Register it. Efraim Flashner 2020-12-19gnu: linux-libre: Update to 5.10.1....* gnu/packages/aux-files/linux-libre/5.10-arm.conf, gnu/packages/aux-files/linux-libre/5.10-arm64.conf, gnu/packages/aux-files/linux-libre/5.10-i686.conf, gnu/packages/aux-files/linux-libre/5.10-x86_64.conf: New files. * Makefile.am (AUX_FILES): Add them. * gnu/packages/linux.scm (linux-libre-5.10-version, deblob-scripts-5.10, linux-libre-5.10-pristine-source, linux-libre-5.10-source, linux-libre-headers-5.10, linux-libre-5.10): New variables. (linux-libre-version, linux-libre-pristine-source, linux-libre-source, linux-libre, linux-libre-with-bpf): Update to 5.10.1. Leo Famulari 2020-12-11guix: 'guile' executable ignores GUILE_LOAD_PATH during startup....When starting the 'guix' command, this ensures Guile modules are immediately found instead of being search for in other directories. This reduces the number of 'stat' calls during startup when GUILE_LOAD_PATH is set to (almost) that of "env -i $(type -P guix)". * gnu/packages/aux-files/guile-launcher.c (load_path) (load_compiled_path): New variables. (inner_main): Restore GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH and set %load-path and %load-compiled-path accordingly. (main): Save GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH and unset them. Ludovic Courtès 2020-10-31pack: Relocatable wrapper leaves root available to child processes....Fixes <https://bugs.gnu.org/44261>. Reported by Jan Nieuwenhuizen <janneke@gnu.org>. * gnu/packages/aux-files/run-in-namespace.c (exec_in_user_namespace): Add call to 'prctl'. Call 'mount' for NEW_ROOT and define 'is_tmpfs'. When IS_TMPFS is true, call 'umount' and 'rmdir' after 'waitpid'; otherwise, call 'rm_rf' only when 'waitpid' returns -1 the second time. (exec_with_loader): Call 'prctl'. Remove NEW_ROOT only when 'waitpid' returns -1 the second time, otherwise leave it behind. * tests/guix-pack-relocatable.sh (wait_for_file): New function. Add test. Ludovic Courtès 2020-10-30gnu: linux-libre: Update to 5.9.2....* gnu/packages/linux.scm (linux-libre-5.9-version): Update to 5.9.2. (deblob-scripts-5.9, linux-libre-5.9-pristine-source): Update hashes. * gnu/packages/aux-files/linux-libre/5.9-arm.conf, gnu/packages/aux-files/linux-libre/5.9-arm64.conf, gnu/packages/aux-files/linux-libre/5.9-i686.conf, gnu/packages/aux-files/linux-libre/5.9-x86_64.conf: Update kernel configurations for 5.9.2. Leo Famulari 2020-10-30guix: pack: Fix offset calculation for store directory mount point....Fixes wrapping of non-package things, where the target store directory may differ in length from the original. * guix/scripts/pack.scm (wrapped-package)<build-wrapper>: Define WRAPPER_PROGRAM macro with wrapper's file name. * gnu/packages/aux-files/run-in-namespace.c (main): Offset index by len of that file name. Eric Bavier 2020-10-24gnu: linux-libre: Update to 5.9.1....* gnu/packages/aux-files/linux-libre/5.8-arm.conf, gnu/packages/aux-files/linux-libre/5.8-arm64.conf, gnu/packages/aux-files/linux-libre/5.8-i686.conf, gnu/packages/aux-files/linux-libre/5.8-x86_64.conf: Delete files. * gnu/packages/aux-files/linux-libre/5.9-arm.conf, gnu/packages/aux-files/linux-libre/5.9-arm64.conf, gnu/packages/aux-files/linux-libre/5.9-i686.conf, gnu/packages/aux-files/linux-libre/5.9-x86_64.conf: New files. * Makefile.am (AUX_FILES): Adjust accordingly. * gnu/packages/linux.scm (linux-libre-5.8-version, deblob-scripts-5.8, linux-libre-5.8-pristine-source, linux-libre-5.8-source, linux-libre-headers-5.8, linux-libre-5.8): Remove variables. (linux-libre-5.9-version, deblob-scripts-5.9, linux-libre-5.9-pristine-source, linux-libre-5.9-source, linux-libre-headers-5.9, linux-libre-5.9): New variables. (linux-libre-version, linux-libre-pristine-source, linux-libre-source, linux-libre): Point to linux-libre-5.9*. (linux-libre-with-bpf): Use linux-libre-5.9. Leo Famulari 2020-10-15gnu: linux-libre: Enable XDP sockets and their monitoring....* gnu/packages/aux-files/linux-libre/4.19-arm.conf: Enable AF_XDP sockets and the associated monitor interface. * gnu/packages/aux-files/linux-libre/4.19-arm64.conf: Likewise * gnu/packages/aux-files/linux-libre/4.19-i686.conf: Likewise * gnu/packages/aux-files/linux-libre/4.19-x86_64.conf: Likewise * gnu/packages/aux-files/linux-libre/5.4-arm.conf: Likewise * gnu/packages/aux-files/linux-libre/5.4-arm64.conf: Likewise * gnu/packages/aux-files/linux-libre/5.4-i686.conf: Likewise * gnu/packages/aux-files/linux-libre/5.4-x86_64.conf: Likewise * gnu/packages/aux-files/linux-libre/5.8-arm.conf: Likewise * gnu/packages/aux-files/linux-libre/5.8-arm64.conf: Likewise * gnu/packages/aux-files/linux-libre/5.8-i686.conf: Likewise * gnu/packages/aux-files/linux-libre/5.8-x86_64.conf: Likewise Tobias Geerinckx-Rice via Guix-patches via 2020-10-05self: Use a 'guile' that doesn't complain about locales....Since commit ba48895899a117d6ace2209c3f54411a4a989133, selected UTF-8 locales are bundled. However, because 'guix-command' is itself a Guile script, users would still see Guile's warning, particularly on foreign distros: $ LC_ALL=sdf guix foo guile: warning: failed to install locale hint: Consider installing the `glibc-utf8-locales' [...] User commands would print that warning, but more importantly, each invocation of 'guix substitute' would print it, even though 'guix-daemon.service' explicitly chooses "en_US.utf8", which is in 'glibc-utf8-locales'. This leads to confusion since users would keep seeing this message unless/until they realize they also need to install 'glibc-utf8-locales' in root's profile. This patch gets rid of "guile: warning: ..." for a guix-pulled 'guix' command. * guix/self.scm (specification->package): Add "gcc-toolchain". (quiet-guile): New procedure. (guix-command): Use it. * gnu/packages/aux-files/guile-launcher.c: New file. * Makefile.am (AUX_FILES): Add it. Ludovic Courtès