X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/c0b3c89f16c2ba36da66a4259a271db449ee66ca..3159fcf14519f02c79ad84b441985982cb1efeb9:/TODO diff --git a/TODO b/TODO dissimilarity index 77% index 831ca80a15..f854f7fa98 100644 --- a/TODO +++ b/TODO @@ -1,143 +1,124 @@ --*- mode: org; coding: utf-8; -*- - -Copyright © 2012, 2013 Ludovic Courtès - - 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. - -* integrate needed Nix code - -Guix uses Nix’s daemon (‘nix-worker’, later renamed to ‘nix-daemon’) to -actually perform builds, scheduling, substitution of pre-built binaries, -and GC-related tasks. The daemon mainly uses ‘libstore’ from Nix. -Integrating it in Guix itself will make Guix self-contained, thereby -simplifying our users’ lives. - -** Remove dependency on OpenSSL - -The ‘openssl’ command-line tool is used in libstore to sign store paths -to be exported, and to check such signatures. The signing keys are -usually in /etc/nix/signing-key.{pub,sec}. They are a PKCS#8-encoded -X.509 SubjectPublicKeyInfo. These can be decoded with the [[http://lists.gnu.org/archive/html/help-gnutls/2012-12/msg00012.html][C API of -GnuTLS]], but not yet with its Guile bindings. There’s also -‘gnutls_privkey_sign_data’ to sign, and related functions. - -** Add a binary cache substituter - -Like scripts/download-from-binary-cache.pl in Nix, but written in -Scheme. Substituters allow pre-built binaries to be downloaded when -they are available from a trusted source. - -** Add a remote build hook - -Like scripts/build-remote.pl in Nix. - -* infrastructure - -** have a Hydra instance build Guix packages - -[[http://nixos.org/hydra/][Hydra]] is a continuous integration tool based on Nix. It now has -[[https://github.com/NixOS/hydra/commit/f27ae1d5663680400cb99cfb898970f34d8d21be][Guile/Guix support]], which allows “build recipes” written in Guile using -Guix to be used directly on Hydra. - -For a start, we may use the instance at hydra.nixos.org, generously -provided by TU Delft. However, in the future, we may want to setup our -own instance at gnu.org. - -* extend -** add OpenPGP signatures: - - (origin - (method http-fetch) - (uri "http://.../foo.tgz") - (signature-uri (string-append uri ".sig")) - (signer-openpgp-fingerprint "...")) - -** allow to be a derivation/package or a file - -* extend - -** add support for ‘search-paths’ - -This should be passed to the build system, to extend package-specific -search path environment variables–like ‘GUILE_LOAD_PATH’, ‘PERL5LIB’, -etc. - -** add a ‘user-environment-hook’ - -This should specify builder code to be run when building a user -environment with ‘guix-package’. For instance, Texinfo’s hook would -create a new ‘dir’. - -** add ‘patches’ there - -** extend ‘propagated-build-inputs’ with support for multiple outputs - -#+BEGIN_SRC scheme - (outputs '("out" "include")) - (propagated-build-inputs - `(((("i1" ,p1 "o1") - ("i2" ,p2)) - => "include") - ("i3" ,p3))) -#+END_SRC - -* support cross-compilation - -Implement ‘package-cross-derivation’, and add the corresponding code in -‘gnu-build-system’. Then, actually bootstrap a cross-compilation -environment–e.g., a cross-GNU environment. - -* gnu-build-system: produce a ‘debug’ derivation - -Set a .gnu_debuglink in the main derivations to point to the sibling -file name (only the basename, to not retain a dependency on the ‘debug’ -derivation.) - -For /nix/store/xyz-foobar/bin/foo, we should have -/nix/store/abc-foobar-debug/lib/nix/store/xyz-foobar/bin/foo.debug (info -"(gdb) Separate Debug Files"). - -Users should have a default GDB setting with ~/.guix-profile/lib/debug -as their ‘debug-file-directory’. - -* build-expression->derivation: define `%system' in the builder - -Would allow build expressions to have system-dependent code, like -`glibc-dynamic-linker'. - -* add ‘allowed-references’ in - -[[file:~/src/nix/src/libstore/build.cc::if%20(drv.env.find("allowedReferences")%20!%3D%20drv.env.end())%20{][See how Nix implements that internally]]. - -* union - -Support sophisticated collision handling when building a union: check -whether the colliding files are identical, honor per-package priorities, -etc. - -* guix-package - -** add ‘--roll-back’ -** add ‘--list-generations’, and ‘--delete-generations’ -** add ‘--upgrade’ -** add ‘--search’ - -* guix build utils -** Add equivalent to "rm -rf" -** Add equivalent to Nixpkgs's ‘wrapProgram’ -** Add equivalent to chrpath, possibly using [[https://gitorious.org/guile-dlhacks/guile-dlhacks/][guile-dlhacks]] - -* distro -** choose a name! (Jinn?) -** port to new GNU/Linux platforms, notably ‘mipsel64-linux’ -** port to GNU/Hurd, aka. ‘i686-gnu’ - -Problems include that current glibc releases do not build on GNU/Hurd. -In addition, there haven’t been stable releases of GNU Mach, MiG, and -Hurd, which would be a pre-condition. - -** make a bootable GNU/Linux-Libre distro, with OS configuration EDSL - -Similar in spirit to /etc/nixos/configuration.nix. +-*- mode: org; coding: utf-8; -*- + +#+TITLE: What's left to do? +#+STARTUP: content hidestars + +Copyright © 2012, 2013, 2014 Ludovic Courtès +Copyright © 2019 Mathieu Othacehe + + 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. + +* MAYBE Add a substituter that uses the GNUnet DHT or [[http://libswift.org][libswift]] + +Would be neat if binaries could be pushed to and pulled from the GNUnet DHT or +rather libswift (since DHTs aren’t suited for large payloads). Guix users +would sign their binaries, and define which binaries they trust. + +Use UPnP and similar to traverse NAT, like ‘filegive’ does. + +* user interface +** add guile-ncurses interface + +* extend +** add ‘recommends’ field + +For instance, glibc, binutils, gcc, and ld-wrapper would recommend each other. +‘guix package -i’ could ask interactively (?), or allow users to follow all or +none of the recommendations. + +** add a ‘user-environment-hook’ + +This should specify builder code to be run when building a user +environment with ‘guix-package’. For instance, Texinfo’s hook would +create a new ‘dir’. + +** extend ‘propagated-build-inputs’ with support for multiple outputs + +#+BEGIN_SRC scheme + (outputs '("out" "include")) + (propagated-build-inputs + `(((("i1" ,p1 "o1") + ("i2" ,p2)) + => "include") + ("i3" ,p3))) +#+END_SRC + +* synchronize non-GNU package descriptions with the [[http://directory.fsf.org][FSD]] + +Meta-data for GNU packages, including descriptions and synopses, can be +dumped from the FSD: +http://directory.fsf.org/wiki?title=GNU/Export&action=purge . +We could periodically synchronize with that. + +* add a guildhall build system + +The Guildhall is Guile’s packaging system. It should be easy to add a +‘guildhall-build-system’ that does the right thing based on guildhall +recipes. + +* union + +Support sophisticated collision handling when building a union: honor +per-package priorities, etc. + +* add GUIX_ALLOW_EXPENSIVE_TESTS + +Tests that need to download stuff or otherwise take a long time would only be +run when that is defined. + +* guix build utils +** MAYBE Change ‘ld-wrapper’ to add RPATH for libs passed by file name + +** MAYBE Add equivalent to chrpath that uses [[https://gitorious.org/guile-dlhacks/guile-dlhacks/][guile-dlhacks]] + +** MAYBE Add a hash-rewriting thing for deep dependency replacement without rebuild + +See [[https://github.com/NixOS/nixpkgs/commit/d1662d715514e6ef9d3dc29f132f1b3d8e608a18][Shea Levy's `replace-dependency' in Nixpkgs]]. + +* distro +** port to GNU/Hurd, aka. ‘i686-gnu’ + +Problems include that current glibc releases do not build on GNU/Hurd. +In addition, there haven’t been stable releases of GNU Mach, MiG, and +Hurd, which would be a pre-condition. + +* Installer +** Fix impossibility to restart on error after cow-store has been started +See https://lists.gnu.org/archive/html/guix-devel/2018-12/msg00161.html. +- Force reboot upon installer failure +- Unshare the installer process +- Run the installer process in a separate namespace +** Partitioning +*** Add RAID support +*** Add more partitioning schemes +The actual schemes are taken from Debian Installer but some are not +implemented yet: like "Separate partitions for /home /var and /tmp". +*** Replace wait page "Partition formating is in progress, please wait" +Create a new waiting page describing what's being done: + +[ 20% ] +Running mkfs.ext4 on /dev/sda2 ... + +[ 40% ] +Running mkfs.ext4 on /dev/sda3 ... +*** Add a confirmation page before formating/partitioning +** Desktop environments +*** Allow for no desktop environments +Propose to choose between "headless server" and "lightweight X11" in a new +page. +*** Add services selection feature +Add a services page to the configuration. Ask for services to be installed +like SSH, bluetooth, TLP in a checkbox list? +** Locale and keymap +*** Try to guess user locale and keymap by probing BIOS or HW (dmidecode) +** Timezone +*** Regroup everything in one single page +Under the form: +(UTC + 1) Europe/Paris +(UTC + 2) Africa/Cairo +... +** Display issue +*** Investigate display issue described here: +https://lists.gnu.org/archive/html/guix-devel/2019-01/msg00305.html