1 -*- mode: org; coding: utf-8; -*-
3 Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
5 Copying and distribution of this file, with or without modification,
6 are permitted in any medium without royalty provided the copyright
7 notice and this notice are preserved.
9 * integrate needed Nix code
11 ** Remove dependency on OpenSSL
13 The ‘openssl’ command-line tool is used in libstore to sign store paths
14 to be exported, and to check such signatures. The signing keys are
15 usually in /etc/nix/signing-key.{pub,sec}. They are a PKCS#8-encoded
16 X.509 SubjectPublicKeyInfo. These can be decoded with the [[http://lists.gnu.org/archive/html/help-gnutls/2012-12/msg00012.html][C API of
17 GnuTLS]], but not yet with its Guile bindings. There’s also
18 ‘gnutls_privkey_sign_data’ to sign, and related functions.
21 ** Add `guix publish' to publish the store using Guile's web server
23 Generate narinfos and nars on the fly, upon HTTP GET requests.
24 Ideally, extend .nix-cache-info to include the server's public key, and also
25 reply to requests for .narinfo.sig.
26 Optionally, use Guile-Avahi to publish the service.
28 ** MAYBE Add a substituter that uses the GNUnet DHT
30 Would be neat if binaries could be pushed to and pulled from the GNUnet
31 DHT. Guix users would sign their binaries, and define which binaries
34 ** Add a remote build hook
36 Like scripts/build-remote.pl in Nix.
40 ** have a Hydra instance build Guix packages
42 [[http://nixos.org/hydra/][Hydra]] is a continuous integration tool based on Nix. It now has
43 [[https://github.com/NixOS/hydra/commit/f27ae1d5663680400cb99cfb898970f34d8d21be][Guile/Guix support]], which allows “build recipes” written in Guile using
44 Guix to be used directly on Hydra.
46 For a start, we may use the instance at hydra.nixos.org, generously
47 provided by TU Delft. However, in the future, we may want to setup our
48 own instance at gnu.org.
51 ** Add a package.el (Emacs) back-end
53 Unfortunately package.el is monolithic, so most likely we’d have to
54 write a new one based on it, as opposed to actually using it.
57 ** add OpenPGP signatures:
61 (uri "http://.../foo.tgz")
62 (signature-uri (string-append uri ".sig"))
63 (signer-openpgp-fingerprint "..."))
65 ** allow <origin> to be a derivation/package or a file
69 ** add support for ‘search-paths’
71 This should be passed to the build system, to extend package-specific
72 search path environment variables–like ‘GUILE_LOAD_PATH’, ‘PERL5LIB’,
75 ** add a ‘user-environment-hook’
77 This should specify builder code to be run when building a user
78 environment with ‘guix-package’. For instance, Texinfo’s hook would
81 ** add ‘patches’ there
83 ** extend ‘propagated-build-inputs’ with support for multiple outputs
86 (outputs '("out" "include"))
87 (propagated-build-inputs
94 * synchronize package descriptions with the [[http://directory.fsf.org][FSD]] and/or the Womb
96 Meta-data for GNU packages, including descriptions and synopses, can be
98 http://directory.fsf.org/wiki?title=GNU/Export&action=purge .
99 We could periodically synchronize with that.
101 The [[./guix/gnu-maintenance.scm][Womb]] also contains synopses for all the GNU packages.
103 * support cross-compilation
105 Implement ‘package-cross-derivation’, and add the corresponding code in
106 ‘gnu-build-system’. Then, actually bootstrap a cross-compilation
107 environment–e.g., a cross-GNU environment.
109 * add a guildhall build system
111 The Guildhall is Guile’s packaging system. It should be easy to add a
112 ‘guildhall-build-system’ that does the right thing based on guildhall
115 * gnu-build-system: produce a ‘debug’ derivation
117 Set a .gnu_debuglink in the main derivations to point to the sibling
118 file name (only the basename, to not retain a dependency on the ‘debug’
121 For /nix/store/xyz-foobar/bin/foo, we should have
122 /nix/store/abc-foobar-debug/lib/nix/store/xyz-foobar/bin/foo.debug (info
123 "(gdb) Separate Debug Files").
125 Users should have a default GDB setting with ~/.guix-profile/lib/debug
126 as their ‘debug-file-directory’.
128 * build-expression->derivation: define `%system' in the builder
130 Would allow build expressions to have system-dependent code, like
131 `glibc-dynamic-linker'.
133 * add ‘allowed-references’ in <package>
135 [[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]].
139 Support sophisticated collision handling when building a union: check
140 whether the colliding files are identical, honor per-package priorities,
145 ** add ‘--list-generations’, and ‘--delete-generations’
148 ** Add equivalent to Nixpkgs's ‘wrapProgram’
149 ** MAYBE Change ‘ld-wrapper’ to add RPATH for libs passed by file name
151 ** MAYBE Add equivalent to chrpath, possibly using [[https://gitorious.org/guile-dlhacks/guile-dlhacks/][guile-dlhacks]]
153 ** MAYBE Add a hash-rewriting thing for deep dependency replacement without rebuild
155 See [[https://github.com/NixOS/nixpkgs/commit/d1662d715514e6ef9d3dc29f132f1b3d8e608a18][Shea Levy's `replace-dependency' in Nixpkgs]].
158 ** port to new GNU/Linux platforms, notably ‘mipsel64-linux’
159 ** port to GNU/Hurd, aka. ‘i686-gnu’
161 Problems include that current glibc releases do not build on GNU/Hurd.
162 In addition, there haven’t been stable releases of GNU Mach, MiG, and
163 Hurd, which would be a pre-condition.
165 ** make a bootable GNU/Linux-Libre distro, with OS configuration EDSL
167 Similar in spirit to /etc/nixos/configuration.nix.