diff options
| author | Ludovic Courtès <ludo@gnu.org> | 2012-11-24 15:20:05 +0100 |
|---|---|---|
| committer | Ludovic Courtès <ludo@gnu.org> | 2012-11-24 15:20:05 +0100 |
| commit | a65e3306d1bc91d51cd9702a3b457f18ace398eb (patch) | |
| tree | 4e3d39c5d6f9defcba5da2b0730fb1159bf5ec5e /README | |
| parent | f190f92f9114f42f55d9dde9f71ecd1b9bc29d0d (diff) | |
doc: Update `README'.
* README: Update introductory summary. Point to Savannah instead of
Gitorious. Mention <bug-guix@gnu.org>.
(Guix & Nix): New section.
Diffstat (limited to 'README')
| -rw-r--r-- | README | 64 |
1 files changed, 52 insertions, 12 deletions
| @@ -1,19 +1,24 @@ | |||
| 1 | -*- mode: org -*- | 1 | -*- mode: org -*- |
| 2 | 2 | ||
| 3 | GNU Guix is Nix[0] from Guile[1]! | 3 | [[http://www.gnu.org/software/guix/][GNU Guix]] is a purely functional package manager, and associated free |
| 4 | software distribution, for the [[http://www.gnu.org/gnu/gnu.html][GNU system]]. In addition to standard | ||
| 5 | package management features, Guix supports transactional upgrades and | ||
| 6 | roll-backs, unprivileged package management, per-user profiles, and | ||
| 7 | garbage collection. | ||
| 4 | 8 | ||
| 5 | Concretely, it allows Nix package management to be done entirely in | 9 | It provides [[http://www.gnu.org/software/guile/][Guile]] Scheme APIs, including a high-level embedded |
| 6 | Scheme. The goal is to investigate whether Scheme, and in particular | 10 | domain-specific languages (EDSLs) to describe how packages are to be |
| 7 | the ability to define EDSLs, would allow it to fulfill the role of the | 11 | built and composed. |
| 8 | Nix language. | ||
| 9 | 12 | ||
| 10 | [0] http://nixos.org/nix/ | 13 | A user-land free software distribution for GNU/Linux comes as part of |
| 11 | [1] http://gnu.org/software/guile/ | 14 | Guix. |
| 15 | |||
| 16 | Guix is based on the [[http://nixos.org/nix/][Nix]] package manager. | ||
| 12 | 17 | ||
| 13 | 18 | ||
| 14 | * Hacking | 19 | * Hacking |
| 15 | 20 | ||
| 16 | Guix currently depends on the following packages: | 21 | GNU Guix currently depends on the following packages: |
| 17 | 22 | ||
| 18 | - [[http://gnu.org/software/guile/][GNU Guile 2.0.x]] | 23 | - [[http://gnu.org/software/guile/][GNU Guile 2.0.x]] |
| 19 | - [[http://nixos.org/nix/][Nix]] | 24 | - [[http://nixos.org/nix/][Nix]] |
| @@ -52,10 +57,45 @@ the (guix store) module. | |||
| 52 | 57 | ||
| 53 | * Contact | 58 | * Contact |
| 54 | 59 | ||
| 55 | The repository is at <https://gitorious.org/guix/>. | 60 | GNU Guix is hosted at https://savannah.gnu.org/projects/guix/. |
| 56 | 61 | ||
| 57 | Please email <ludo@gnu.org> or <nix-dev@lists.science.uu.nl>, or | 62 | Please email <bug-guix@gnu.org> for bug reports or questions regarding |
| 58 | join #guile or #nixos on irc.freenode.net or `civodul'. | 63 | Guix and its distribution; email <gnu-system-discuss@gnu.org> for |
| 64 | general issues regarding the GNU system. | ||
| 65 | |||
| 66 | Join #guix on irc.freenode.net. | ||
| 67 | |||
| 68 | * Guix & Nix | ||
| 69 | |||
| 70 | GNU Guix is based on [[http://nixos.org/nix/][the Nix package manager]]. It implements the same | ||
| 71 | package deployment paradigm, and in fact it reuses some of its code. | ||
| 72 | Yet, different engineering decisions were made for Guix, as described | ||
| 73 | below. | ||
| 74 | |||
| 75 | Nix is really two things: a package build tool, implemented by a library | ||
| 76 | and daemon, and a special-purpose programming language. GNU Guix relies | ||
| 77 | on the former, but uses Scheme as a replacement for the latter. | ||
| 78 | |||
| 79 | Using Scheme instead of a specific language allows us to get all the | ||
| 80 | features and tooling that come with Guile (compiler, debugger, REPL, | ||
| 81 | Unicode, libraries, etc.) And it means that we have a general-purpose | ||
| 82 | language, on top of which we can have embedded domain-specific languages | ||
| 83 | (EDSLs), such as the one used to define packages. This broadens what | ||
| 84 | can be done in package recipes themselves, and what can be done around them. | ||
| 85 | |||
| 86 | Technically, Guix makes remote procedure calls to the ‘nix-worker’ | ||
| 87 | daemon to perform operations on the store. At the lowest level, Nix | ||
| 88 | “derivations” represent promises of a build, stored in ‘.drv’ files in | ||
| 89 | the store. Guix produces such derivations, which are then interpreted | ||
| 90 | by the daemon to perform the build. Thus, Guix derivations can use | ||
| 91 | derivations produced by Nix (and vice versa). | ||
| 92 | |||
| 93 | With Nix and the [[http://nixos.org/nixpkgs][Nixpkgs]] distribution, package composition happens at | ||
| 94 | the Nix language level, but builders are usually written in Bash. | ||
| 95 | Conversely, Guix encourages the use of Scheme for both package | ||
| 96 | composition and builders. Likewise, the core functionality of Nix is | ||
| 97 | written in C++ and Perl; Guix relies on some of the original C++ code, | ||
| 98 | but exposes all the API as Scheme. | ||
| 59 | 99 | ||
| 60 | * Related software | 100 | * Related software |
| 61 | 101 | ||
