gnu: automake: Update to 1.13.2.
[jackhill/guix/guix.git] / TODO
CommitLineData
6b8875c8
LC
1-*- mode: org; coding: utf-8; -*-
2
8c247e1c
LC
3#+TITLE: What's left to do?
4#+STARTUP: content hidestars
5
c0b3c89f 6Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
6b8875c8
LC
7
8 Copying and distribution of this file, with or without modification,
9 are permitted in any medium without royalty provided the copyright
10 notice and this notice are preserved.
11
12* integrate needed Nix code
13
a9128eac
LC
14** Remove dependency on OpenSSL
15
16The ‘openssl’ command-line tool is used in libstore to sign store paths
17to be exported, and to check such signatures. The signing keys are
18usually in /etc/nix/signing-key.{pub,sec}. They are a PKCS#8-encoded
19X.509 SubjectPublicKeyInfo. These can be decoded with the [[http://lists.gnu.org/archive/html/help-gnutls/2012-12/msg00012.html][C API of
20GnuTLS]], but not yet with its Guile bindings. There’s also
21‘gnutls_privkey_sign_data’ to sign, and related functions.
22
c0b3c89f 23
9297c90b
LC
24** Add `guix publish' to publish the store using Guile's web server
25
26Generate narinfos and nars on the fly, upon HTTP GET requests.
27Ideally, extend .nix-cache-info to include the server's public key, and also
28reply to requests for .narinfo.sig.
29Optionally, use Guile-Avahi to publish the service.
c0b3c89f 30
c7e4a72a
LC
31** MAYBE Add a substituter that uses the GNUnet DHT
32
33Would be neat if binaries could be pushed to and pulled from the GNUnet
34DHT. Guix users would sign their binaries, and define which binaries
35they trust.
36
c0b3c89f
LC
37** Add a remote build hook
38
39Like scripts/build-remote.pl in Nix.
40
c7e4a72a
LC
41* user interface
42** Add a package.el (Emacs) back-end
43
44Unfortunately package.el is monolithic, so most likely we’d have to
45write a new one based on it, as opposed to actually using it.
46
6b8875c8
LC
47* extend <origin>
48** add OpenPGP signatures:
49
50 (origin
51 (method http-fetch)
52 (uri "http://.../foo.tgz")
53 (signature-uri (string-append uri ".sig"))
54 (signer-openpgp-fingerprint "..."))
55
56** allow <origin> to be a derivation/package or a file
57
58* extend <package>
59
6b8875c8
LC
60** add a ‘user-environment-hook’
61
62This should specify builder code to be run when building a user
63environment with ‘guix-package’. For instance, Texinfo’s hook would
64create a new ‘dir’.
65
3036a01f
LC
66** add ‘patches’ there
67
68** extend ‘propagated-build-inputs’ with support for multiple outputs
69
70#+BEGIN_SRC scheme
71 (outputs '("out" "include"))
72 (propagated-build-inputs
73 `(((("i1" ,p1 "o1")
74 ("i2" ,p2))
75 => "include")
76 ("i3" ,p3)))
77#+END_SRC
78
8c247e1c 79* synchronize package descriptions with GSRC and/or the [[http://directory.fsf.org][FSD]]
29767aae
LC
80
81Meta-data for GNU packages, including descriptions and synopses, can be
82dumped from the FSD:
83http://directory.fsf.org/wiki?title=GNU/Export&action=purge .
84We could periodically synchronize with that.
85
6b8875c8
LC
86* support cross-compilation
87
88Implement ‘package-cross-derivation’, and add the corresponding code in
89‘gnu-build-system’. Then, actually bootstrap a cross-compilation
90environment–e.g., a cross-GNU environment.
91
c7e4a72a
LC
92* add a guildhall build system
93
94The Guildhall is Guile’s packaging system. It should be easy to add a
95‘guildhall-build-system’ that does the right thing based on guildhall
96recipes.
97
6b8875c8
LC
98* gnu-build-system: produce a ‘debug’ derivation
99
100Set a .gnu_debuglink in the main derivations to point to the sibling
101file name (only the basename, to not retain a dependency on the ‘debug’
102derivation.)
103
104For /nix/store/xyz-foobar/bin/foo, we should have
105/nix/store/abc-foobar-debug/lib/nix/store/xyz-foobar/bin/foo.debug (info
106"(gdb) Separate Debug Files").
107
108Users should have a default GDB setting with ~/.guix-profile/lib/debug
109as their ‘debug-file-directory’.
110
111* build-expression->derivation: define `%system' in the builder
112
113Would allow build expressions to have system-dependent code, like
114`glibc-dynamic-linker'.
115
116* add ‘allowed-references’ in <package>
117
118[[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]].
119
6b8875c8
LC
120* union
121
122Support sophisticated collision handling when building a union: check
123whether the colliding files are identical, honor per-package priorities,
124etc.
125
d8f257f9 126* guix package
6b8875c8 127
6b8875c8 128** add ‘--list-generations’, and ‘--delete-generations’
6b8875c8
LC
129
130* guix build utils
29767aae
LC
131** MAYBE Change ‘ld-wrapper’ to add RPATH for libs passed by file name
132
8c247e1c 133** MAYBE Add equivalent to chrpath that uses [[https://gitorious.org/guile-dlhacks/guile-dlhacks/][guile-dlhacks]]
6b8875c8 134
29767aae 135** MAYBE Add a hash-rewriting thing for deep dependency replacement without rebuild
c7e4a72a
LC
136
137See [[https://github.com/NixOS/nixpkgs/commit/d1662d715514e6ef9d3dc29f132f1b3d8e608a18][Shea Levy's `replace-dependency' in Nixpkgs]].
138
6b8875c8 139* distro
6b8875c8
LC
140** port to new GNU/Linux platforms, notably ‘mipsel64-linux’
141** port to GNU/Hurd, aka. ‘i686-gnu’
142
143Problems include that current glibc releases do not build on GNU/Hurd.
144In addition, there haven’t been stable releases of GNU Mach, MiG, and
145Hurd, which would be a pre-condition.
146
147** make a bootable GNU/Linux-Libre distro, with OS configuration EDSL
148
149Similar in spirit to /etc/nixos/configuration.nix.