Mirror of GNU Guix
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
5.1 KiB

9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
8 years ago
9 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
8 years ago
9 years ago
8 years ago
9 years ago
9 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
  1. -*- mode: org; coding: utf-8; -*-
  2. #+TITLE: What's left to do?
  3. #+STARTUP: content hidestars
  4. 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.
  8. * integrate needed Nix code
  9. ** Remove dependency on OpenSSL
  10. The ‘openssl’ command-line tool is used in libstore to sign store paths
  11. to be exported, and to check such signatures. The signing keys are
  12. usually in /etc/nix/signing-key.{pub,sec}. They are a PKCS#8-encoded
  13. X.509 SubjectPublicKeyInfo. These can be decoded with the [[http://lists.gnu.org/archive/html/help-gnutls/2012-12/msg00012.html][C API of
  14. GnuTLS]], but not yet with its Guile bindings. There’s also
  15. ‘gnutls_privkey_sign_data’ to sign, and related functions.
  16. ** Add `guix publish' to publish the store using Guile's web server
  17. Generate narinfos and nars on the fly, upon HTTP GET requests.
  18. Ideally, extend .nix-cache-info to include the server's public key, and also
  19. reply to requests for .narinfo.sig.
  20. Optionally, use Guile-Avahi to publish the service.
  21. ** MAYBE Add a substituter that uses the GNUnet DHT or [[http://libswift.org][libswift]]
  22. Would be neat if binaries could be pushed to and pulled from the GNUnet DHT or
  23. rather libswift (since DHTs aren’t suited for large payloads). Guix users
  24. would sign their binaries, and define which binaries they trust.
  25. Use UPnP and similar to traverse NAT, like ‘filegive’ does.
  26. ** Add a remote build hook
  27. Like scripts/build-remote.pl in Nix.
  28. * user interface
  29. ** Add a package.el (Emacs) back-end
  30. package.el is quite monolithic, but we may be able to reuse/extend
  31. ‘package-menu-mode’ or at least ‘tabulated-list-mode’.
  32. ** add guile-ncurses interface
  33. * extend <package>
  34. ** add ‘recommends’ field
  35. For instance, glibc, binutils, gcc, and ld-wrapper would recommend each other.
  36. ‘guix package -i’ could ask interactively (?), or allow users to follow all or
  37. none of the recommendations.
  38. ** add a ‘user-environment-hook’
  39. This should specify builder code to be run when building a user
  40. environment with ‘guix-package’. For instance, Texinfo’s hook would
  41. create a new ‘dir’.
  42. ** extend ‘propagated-build-inputs’ with support for multiple outputs
  43. #+BEGIN_SRC scheme
  44. (outputs '("out" "include"))
  45. (propagated-build-inputs
  46. `(((("i1" ,p1 "o1")
  47. ("i2" ,p2))
  48. => "include")
  49. ("i3" ,p3)))
  50. #+END_SRC
  51. * MAYBE use HOP-like escapes to refer to inputs in build-side code
  52. Instead of doing things like:
  53. #+BEGIN_SRC scheme
  54. (inputs `(("foo" ,foo)))
  55. (arguments '(#:configure-flags
  56. (list (string-append "--with-foo="
  57. (assoc-ref %build-inputs "foo")))))
  58. #+END_SRC
  59. Allow things like:
  60. #+BEGIN_SRC scheme
  61. (inputs (list foo))
  62. (arguments ~(#:configure-flags
  63. (list (string-append "--with-foo=" $foo))))
  64. #+END_SRC
  65. ... where '~' is 'build-quote' and '$' is 'build-unquote'. Better yet,
  66. automatically compute the list of references of an expression passed to
  67. 'derivation-expression'.
  68. Use a [[http://dorophone.blogspot.fr/2011/09/scheme-syntax-is-monad.html][monad]] for the syntax.
  69. * synchronize non-GNU package descriptions with the [[http://directory.fsf.org][FSD]]
  70. Meta-data for GNU packages, including descriptions and synopses, can be
  71. dumped from the FSD:
  72. http://directory.fsf.org/wiki?title=GNU/Export&action=purge .
  73. We could periodically synchronize with that.
  74. * add a guildhall build system
  75. The Guildhall is Guile’s packaging system. It should be easy to add a
  76. ‘guildhall-build-system’ that does the right thing based on guildhall
  77. recipes.
  78. * add ‘allowed-references’ in <package>
  79. [[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]].
  80. * union
  81. Support sophisticated collision handling when building a union: check
  82. whether the colliding files are identical, honor per-package priorities,
  83. etc.
  85. Tests that need to download stuff or otherwise take a long time would only be
  86. run when that is defined.
  87. * add "guix challenge"
  88. Would download a substitute, and compare its contents against a (hopefully
  89. locally-built) copy.
  90. * guix build utils
  91. ** MAYBE Change ‘ld-wrapper’ to add RPATH for libs passed by file name
  92. ** MAYBE Add equivalent to chrpath that uses [[https://gitorious.org/guile-dlhacks/guile-dlhacks/][guile-dlhacks]]
  93. ** MAYBE Add a hash-rewriting thing for deep dependency replacement without rebuild
  94. See [[https://github.com/NixOS/nixpkgs/commit/d1662d715514e6ef9d3dc29f132f1b3d8e608a18][Shea Levy's `replace-dependency' in Nixpkgs]].
  95. * distro
  96. ** port to new GNU/Linux platforms, notably ‘mipsel64-linux’
  97. ** port to GNU/Hurd, aka. ‘i686-gnu’
  98. Problems include that current glibc releases do not build on GNU/Hurd.
  99. In addition, there haven’t been stable releases of GNU Mach, MiG, and
  100. Hurd, which would be a pre-condition.
  101. ** make a bootable GNU/Linux-Libre distro, with OS configuration EDSL
  102. Similar in spirit to /etc/nixos/configuration.nix.