projects/guix·blob v0.3 · refs

155 lines · 5.1 KiB

1-*- mode: org; coding: utf-8; -*-
2
3#+TITLE: What's left to do?
4#+STARTUP: content hidestars
5
6Copyright © 2012, 2013 Ludovic Courtès <[email protected]>
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
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
23
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.
30
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
37** Add a remote build hook
38
39Like scripts/build-remote.pl in Nix.
40
41* user interface
42** Add a package.el (Emacs) back-end
43
44package.el is quite monolithic, but we may be able to reuse/extend
45‘package-menu-mode’ or at least ‘tabulated-list-mode’.
46
47** add guile-ncurses interface
48
49* extend <origin>
50** add OpenPGP signatures:
51
52 (origin
53 (method http-fetch)
54 (uri "http://.../foo.tgz")
55 (signature-uri (string-append uri ".sig"))
56 (signer-openpgp-fingerprint "..."))
57
58** allow <origin> to be a derivation/package or a file
59
60* extend <package>
61
62** add ‘recommends’ field
63
64For instance, glibc, binutils, gcc, and ld-wrapper would recommend each other.
65‘guix package -i’ could ask interactively (?), or allow users to follow all or
66none of the recommendations.
67
68** add a ‘user-environment-hook’
69
70This should specify builder code to be run when building a user
71environment with ‘guix-package’. For instance, Texinfo’s hook would
72create a new ‘dir’.
73
74** add ‘patches’ there
75
76** extend ‘propagated-build-inputs’ with support for multiple outputs
77
78#+BEGIN_SRC scheme
79 (outputs '("out" "include"))
80 (propagated-build-inputs
81 `(((("i1" ,p1 "o1")
82 ("i2" ,p2))
83 => "include")
84 ("i3" ,p3)))
85#+END_SRC
86
87
88* synchronize package descriptions with GSRC and/or the [[http://directory.fsf.org][FSD]]
89
90Meta-data for GNU packages, including descriptions and synopses, can be
91dumped from the FSD:
92http://directory.fsf.org/wiki?title=GNU/Export&action=purge .
93We could periodically synchronize with that.
94
95See http://lists.gnu.org/archive/html/bug-guix/2013-04/msg00120.html for info
96on how to synchronize with GSRC's descriptions.
97
98* add a guildhall build system
99
100The Guildhall is Guile’s packaging system. It should be easy to add a
101‘guildhall-build-system’ that does the right thing based on guildhall
102recipes.
103
104* gnu-build-system: produce a ‘debug’ derivation
105
106Set a .gnu_debuglink in the main derivations to point to the sibling
107file name (only the basename, to not retain a dependency on the ‘debug’
108derivation.)
109
110For /nix/store/xyz-foobar/bin/foo, we should have
111/nix/store/abc-foobar-debug/lib/nix/store/xyz-foobar/bin/foo.debug (info
112"(gdb) Separate Debug Files").
113
114Users should have a default GDB setting with ~/.guix-profile/lib/debug
115as their ‘debug-file-directory’.
116
117* build-expression->derivation: define `%system' in the builder
118
119Would allow build expressions to have system-dependent code, like
120`glibc-dynamic-linker'.
121
122* add ‘allowed-references’ in <package>
123
124[[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]].
125
126* union
127
128Support sophisticated collision handling when building a union: check
129whether the colliding files are identical, honor per-package priorities,
130etc.
131
132* guix package
133
134** add ‘--list-generations’, and ‘--delete-generations’
135
136* guix build utils
137** MAYBE Change ‘ld-wrapper’ to add RPATH for libs passed by file name
138
139** MAYBE Add equivalent to chrpath that uses [[https://gitorious.org/guile-dlhacks/guile-dlhacks/][guile-dlhacks]]
140
141** MAYBE Add a hash-rewriting thing for deep dependency replacement without rebuild
142
143See [[https://github.com/NixOS/nixpkgs/commit/d1662d715514e6ef9d3dc29f132f1b3d8e608a18][Shea Levy's `replace-dependency' in Nixpkgs]].
144
145* distro
146** port to new GNU/Linux platforms, notably ‘mipsel64-linux’
147** port to GNU/Hurd, aka. ‘i686-gnu’
148
149Problems include that current glibc releases do not build on GNU/Hurd.
150In addition, there haven’t been stable releases of GNU Mach, MiG, and
151Hurd, which would be a pre-condition.
152
153** make a bootable GNU/Linux-Libre distro, with OS configuration EDSL
154
155Similar in spirit to /etc/nixos/configuration.nix.