all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [PATCH] doc: "Introduction" revise and add figure.
@ 2016-03-18  1:53 myglc2
  2016-03-25 23:00 ` Ludovic Courtès
  0 siblings, 1 reply; 3+ messages in thread
From: myglc2 @ 2016-03-18  1:53 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 4665 bytes --]

Makes the intro read as shown below. Figure attached. Comments welcome.
- George

1 Introduction
**************

The purpose of GNU Guix(1) is to allow users to easily install, upgrade,
and remove free(2) GNU and non-GNU software.

   Guix can be installed stand-alone (*note System Installation::) or on
top of an exiting GNU/Linux system (*note Installation::).

   When installed stand-alone, Guix provides a distribution of the GNU
System consisting entirely of free GNU and non-GNU software, the “Guix
System Distribution” or “GuixSD”, (*note GNU Distribution::).

   Key Guix components and features are shown and discussed below:

Guix Feature Diagram.

   Guix uses a “build daemon” to build and install software packages
(*note Setting Up the Daemon::).  Packages can be built using developer
source code or installed using pre-built package “substitutes” from
elsewhere, for example from the Guix Hydra build farm, ‘hydra.gnu.org’
(*note Substitutes::).  This frees users from dependence on others while
providing the benefits of using pre-built packages if they are
available.

   Guix installs software packages in a special directory, “the store”,
by default ‘/gnu/store’.  When a user installs packages, Guix makes them
available to that user by creating a “per-user profile” of symbolic
links into the store (*note Features::).  When GuixSD is installed, the
packages one would expect for basic user and administrator tasks (plus
additional globally-installed packages, if any) are made available in
the “system profile” (*note Using the Configuration System::).

   When Guix is installed on an existing GNU/Linux system, the existing
system’s package manager provides the system profile and system
services.  In GuixSD, Guix “system configuration” manages the system
profile and system services and supports declarative configuration,
transactional instantiation, and rollback.  Installed either way, Guix
can produce GuixSD virtual machines, disk images, and disk installs
(*note System Configuration::).

   Guix “package management” differs from typical GNU/Linux package
management by focusing on users instead of system administrators.  Guix
enables each user to independently configure, install, upgrade, or
rollback packages for their own use.  This allows users to create
software environments that extend, update, or replace the packages in
the system profile (*note Package Management::).  This, in turn, frees
system administrators from the requirement to meet all user’s needs with
the system profile.

   Guix includes command-line interfaces for package management (*note
Invoking guix package::) and system configuration (*note Invoking guix
system::).  Guix provides an emacs user interface for package
management, system configuration, and package recipes (*note Emacs
Interface::).  Guix is implemented primarily in GNU Guile and provides
Scheme application programming interfaces (APIs) (*note Programming
Interface::) and utilities (*note Utilities::) that simplify software
packaging.

   Key Guix features, such as _declarative_ system configuration,
transactional upgrade/rollback, and garbage collection, are implemented
using a functional package management approach.  The term “functional”
refers to a specific package management discipline pioneered by Nix
(*note Acknowledgments::) in which the package build and installation
process is seen as a function, in the mathematical sense.  That function
takes inputs, such as build scripts, a compiler, and libraries, and
returns an installed package.  As a pure function, its result depends
solely on its inputs—for instance, it cannot refer to software or
scripts that were not explicitly passed as inputs.  A build function
always produces the same result when passed a given set of inputs.  It
cannot alter the environment of the running system in any way; for
instance, it cannot create, modify, or delete files outside of its build
and installation directories.  This is achieved by running build
processes in isolated environments (or “containers”), where only their
explicit inputs are visible.  The result of package build functions is
“cached” in a directory of its own.  The directory name contains a hash
of all the inputs used to build that package; thus, changing an input
yields a different directory name.

   ---------- Footnotes ----------

   (1) “Guix” is pronounced like “geeks”, or “ɡiːks” using the
international phonetic alphabet (IPA).

   (2) The term “free” here refers to the freedom provided to users of
that software (http://www.gnu.org/philosophy/free-sw.html).



[-- Attachment #2: 0001-doc-Introduction-revise-and-add-figure.patch --]
[-- Type: text/x-patch, Size: 53873 bytes --]

From 53167523bc190125fb175e2f67ef9600018b9111 Mon Sep 17 00:00:00 2001
From: George Clemmer <myglc2@gmail.com>
Date: Thu, 17 Mar 2016 20:13:05 -0400
Subject: [PATCH] doc: "Introduction" revise and add figure.

* doc.am: add figure.
* doc/guix.texi: ("Introduction"): revise and add figure.  Describe
  key components and features from top-down.  Introduce key
  components and terminology.  ("various other sections") Align
  terminology: build daemon, the store, per-user profile, system
  profile.
* doc/images/introduction.dot: figure source, included for reference.
* doc/images/introduction.png: figure, commiting 'dot -Tpng' output
  because doc.am DOT_OPTIONS makes a mess of it.  Alternative: more
  mods to doc.am.
---
 doc.am                      |   3 +-
 doc/guix.texi               | 168 ++++++++++++++++++++++++++++----------------
 doc/images/introduction.dot | 107 ++++++++++++++++++++++++++++
 doc/images/introduction.png | Bin 0 -> 28524 bytes
 4 files changed, 217 insertions(+), 61 deletions(-)
 create mode 100644 doc/images/introduction.dot
 create mode 100644 doc/images/introduction.png

diff --git a/doc.am b/doc.am
index a1eabad..ca3a222 100644
--- a/doc.am
+++ b/doc.am
@@ -61,7 +61,8 @@ doc/os-config-%.texi: gnu/system/examples/%.tmpl
 infoimagedir = $(infodir)/images
 dist_infoimage_DATA =				\
   $(DOT_FILES:%.dot=%.png)			\
-  doc/images/coreutils-size-map.png
+  doc/images/coreutils-size-map.png		\
+  doc/images/introduction.png
 
 # Try hard to obtain an image size and aspect that's reasonable for inclusion
 # in an Info or PDF document.
diff --git a/doc/guix.texi b/doc/guix.texi
index b36be05..4fb01b6 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -249,55 +249,100 @@ Coding Style
 @node Introduction
 @chapter Introduction
 
-GNU Guix@footnote{``Guix'' is pronounced like ``geeks'', or ``ɡiːks''
-using the international phonetic alphabet (IPA).} is a functional
-package management tool for the GNU system.  Package management consists
-of all activities that relate to building packages from sources,
-honoring their build-time and run-time dependencies,
-installing packages in user environments, upgrading installed packages
-to new versions or rolling back to a previous set, removing unused
-software packages, etc.
+@cindex purpose
+@cindex Guix
+The purpose of GNU Guix@footnote{``Guix'' is pronounced like
+``geeks'', or ``ɡiːks'' using the international phonetic alphabet
+(IPA).}  is to allow users to easily install, upgrade, and remove
+free@footnote{The term ``free'' here refers to the
+@url{http://www.gnu.org/philosophy/free-sw.html,freedom provided to
+users of that software}.} GNU and non-GNU software.
 
-@cindex functional package management
-The term @dfn{functional} refers to a specific package management
-discipline pioneered by Nix (@pxref{Acknowledgments}).
-In Guix, the package build and installation process is seen
-as a function, in the mathematical sense.  That function takes inputs,
-such as build scripts, a compiler, and libraries, and
-returns an installed package.  As a pure function, its result depends
-solely on its inputs---for instance, it cannot refer to software or
-scripts that were not explicitly passed as inputs.  A build function
-always produces the same result when passed a given set of inputs.  It
-cannot alter the environment of the running system in
-any way; for instance, it cannot create, modify, or delete files outside
-of its build and installation directories.  This is achieved by running
-build processes in isolated environments (or @dfn{containers}), where only their
-explicit inputs are visible.
-
-@cindex store
-The result of package build functions is @dfn{cached} in the file
-system, in a special directory called @dfn{the store} (@pxref{The
-Store}).  Each package is installed in a directory of its own in the
-store---by default under @file{/gnu/store}.  The directory name contains
-a hash of all the inputs used to build that package; thus, changing an
-input yields a different directory name.
-
-This approach is the foundation for the salient features of Guix: support
-for transactional package upgrade and rollback, per-user installation, and
-garbage collection of packages (@pxref{Features}).
-
-Guix has a command-line interface, which allows users to build, install,
-upgrade, and remove packages, as well as a Scheme programming interface.
+Guix can be installed stand-alone (@pxref{System Installation}) or on
+top of an exiting GNU/Linux system (@pxref{Installation}).
 
+When installed stand-alone, Guix provides a distribution of the GNU
+System consisting entirely of free GNU and non-GNU software, the
+@dfn{Guix System Distribution} or @dfn{GuixSD}, (@pxref{GNU
+Distribution}).
 @cindex Guix System Distribution
 @cindex GuixSD
-Last but not least, Guix is used to build a distribution of the GNU
-system, with many GNU and non-GNU free software packages.  The Guix
-System Distribution, or GNU@tie{}GuixSD, takes advantage of the core
-properties of Guix at the system level.  With GuixSD, users
-@emph{declare} all aspects of the operating system configuration, and
-Guix takes care of instantiating that configuration in a reproducible,
-stateless fashion.  @xref{GNU Distribution}.
+
+Key Guix components and features are shown and discussed below:
+
+@image{images/introduction,6in,,Guix Feature Diagram.}
+
+@cindex substitutes
+@cindex build daemon
+Guix uses a @dfn{build daemon} to build and install software packages
+(@pxref{Setting Up the Daemon}).  Packages can be built using developer
+source code or installed using pre-built package @dfn{substitutes} from
+elsewhere, for example from the Guix Hydra build farm,
+@code{hydra.gnu.org} (@pxref{Substitutes}). This frees users from
+dependence on others while providing the benefits of using pre-built
+packages if they are available.
+
+@cindex the store
+Guix installs software packages in a special directory, @dfn{the store},
+by default @file{/gnu/store}.
+@cindex per-user profile
+When a user installs packages, Guix makes them available to that user by
+creating a @dfn{per-user profile} of symbolic links into the store
+(@pxref{Features}).  When GuixSD is installed, the packages one would
+expect for basic user and administrator tasks (plus additional
+globally-installed packages, if any) are made available in the
+@dfn{system profile} (@pxref{Using the Configuration System}).
+@cindex system profile
+
+@cindex system services
+@cindex system configuration
+When Guix is installed on an existing GNU/Linux system, the existing
+system's package manager provides the system profile and system
+services. In GuixSD, Guix @dfn{system configuration} manages the system
+profile and system services and supports declarative configuration,
+transactional instantiation, and rollback. Installed either way, Guix
+can produce GuixSD virtual machines, disk images, and disk installs
+(@pxref{System Configuration}).
+
+@cindex package management
+Guix @dfn{package management} differs from typical GNU/Linux package
+management by focusing on users instead of system administrators.  Guix
+enables each user to independently configure, install, upgrade, or
+rollback packages for their own use. This allows users to create
+software environments that extend, update, or replace the packages in
+the system profile (@pxref{Package Management}). This, in turn, frees
+system administrators from the requirement to meet all user's needs with
+the system profile.
+
+Guix includes command-line interfaces for package management
+(@pxref{Invoking guix package}) and system configuration
+(@pxref{Invoking guix system}).  Guix provides an emacs user interface
+for package management, system configuration, and package recipes
+(@pxref{Emacs Interface}).  Guix is implemented primarily in GNU Guile
+and provides Scheme application programming interfaces (APIs)
+(@pxref{Programming Interface}) and utilities (@pxref{Utilities}) that
+simplify software packaging.
+
+@cindex functional package management
+Key Guix features, such as @emph{declarative} system configuration,
+transactional upgrade/rollback, and garbage collection, are implemented
+using a functional package management approach.  The term
+@dfn{functional} refers to a specific package management discipline
+pioneered by Nix (@pxref{Acknowledgments}) in which the package build
+and installation process is seen as a function, in the mathematical
+sense.  That function takes inputs, such as build scripts, a compiler,
+and libraries, and returns an installed package.  As a pure function,
+its result depends solely on its inputs---for instance, it cannot refer
+to software or scripts that were not explicitly passed as inputs.  A
+build function always produces the same result when passed a given set
+of inputs.  It cannot alter the environment of the running system in any
+way; for instance, it cannot create, modify, or delete files outside of
+its build and installation directories.  This is achieved by running
+build processes in isolated environments (or @dfn{containers}), where
+only their explicit inputs are visible.  The result of package build
+functions is @dfn{cached} in a directory of its own.  The directory name
+contains a hash of all the inputs used to build that package; thus,
+changing an input yields a different directory name.
 
 @c *********************************************************************
 @node Installation
@@ -308,10 +353,9 @@ GNU Guix is available for download from its website at
 software requirements of Guix, as well as how to install it and get
 ready to use it.
 
-Note that this section is concerned with the installation of the package
-manager, which can be done on top of a running GNU/Linux system.  If,
-instead, you want to install the complete GNU operating system,
-@pxref{System Installation}.
+Note that this section describes how to install Guix on top of a running
+GNU/Linux system.  If, instead, you want a stand-alone install of the
+complete GNU operating system, @pxref{System Installation}.
 
 @menu
 * Binary Installation::         Getting Guix running in no time!
@@ -578,7 +622,7 @@ used as well as version numbers of the dependencies
 @node Setting Up the Daemon
 @section Setting Up the Daemon
 
-@cindex daemon
+@cindex build daemon
 Operations such as building a package or running the garbage collector
 are all performed by a specialized process, the @dfn{build daemon}, on
 behalf of clients.  Only the daemon may access the store and its
@@ -1178,8 +1222,9 @@ own directory---something that resembles
 (note that Guix comes with an Emacs extension to shorten those file
 names, @pxref{Emacs Prettify}.)
 
+@cindex per-user profile
 Instead of referring to these directories, users have their own
-@dfn{profile}, which points to the packages that they actually want to
+@dfn{per-user profile}, which points to the packages that they actually want to
 use.  These profiles are stored within each user's home directory, at
 @code{$HOME/.guix-profile}.
 
@@ -2935,11 +2980,11 @@ with @code{build-expression->derivation} (@pxref{Derivations,
 @node The Store
 @section The Store
 
-@cindex store
+@cindex the store
 @cindex store items
 @cindex store paths
 
-Conceptually, the @dfn{store} is the place where derivations that have
+Conceptually, @dfn{the store} is the place where derivations that have
 been built successfully are stored---by default, @file{/gnu/store}.
 Sub-directories in the store are referred to as @dfn{store items} or
 sometimes @dfn{store paths}.  The store has an associated database that
@@ -5600,8 +5645,8 @@ users of that software}.}.  The
 distribution can be installed on its own (@pxref{System Installation}),
 but it is also possible to install Guix as a package manager on top of
 an installed GNU/Linux system (@pxref{Installation}).  To distinguish
-between the two, we refer to the standalone distribution as the Guix
-System Distribution, or GuixSD.
+between the two, we refer to the standalone distribution as the @dfn{Guix
+System Distribution}, or @dfn{GuixSD.}
 
 The distribution provides core GNU packages such as GNU libc, GCC, and
 Binutils, as well as many GNU and non-GNU applications.  The complete
@@ -5662,9 +5707,8 @@ to join!  @xref{Contributing}, for information about how you can help.
 @node System Installation
 @section System Installation
 
-@cindex Guix System Distribution
-This section explains how to install the Guix System Distribution
-on a machine.  The Guix package manager can
+This section explains how to make a stand-alone installation of Guix
+on a machine.  Guix can
 also be installed on top of a running GNU/Linux system,
 @pxref{Installation}.
 
@@ -6118,7 +6162,9 @@ fields), and how to @dfn{instantiate} the operating system using
 @unnumberedsubsubsec Globally-Visible Packages
 
 @vindex %base-packages
+@cindex system profile
 The @code{packages} field lists packages that will be globally visible
+(included in the @dfn{system profile})
 on the system, for all user accounts---i.e., in every user's @code{PATH}
 environment variable---in addition to the per-user profiles
 (@pxref{Invoking guix package}).  The @var{%base-packages} variable
@@ -6350,8 +6396,9 @@ For instance, a valid value may look like this:
 A string denoting the contents of the @file{/etc/issue} file, which is
 displayed when users log in on a text console.
 
+@cindex system profile
 @item @code{packages} (default: @var{%base-packages})
-The set of packages installed in the global profile, which is accessible
+The set of packages installed in the system profile, which is accessible
 at @file{/run/current-system/profile}.
 
 The default set includes core utilities and it is good practice to
@@ -7222,7 +7269,7 @@ gateway.
 Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
 management daemon that aims to simplify wired and wireless networking.
 
-This service adds the @var{wicd} package to the global profile, providing
+This service adds the @var{wicd} package to the system profile, providing
 several commands to interact with the daemon and configure networking:
 @command{wicd-client}, a graphical user interface, and the @command{wicd-cli}
 and @command{wicd-curses} user interfaces.
@@ -10235,6 +10282,7 @@ executable file names, passed as gexps, and adds them to the set of
 setuid-root programs on the system (@pxref{Setuid Programs}).
 @end defvr
 
+@cindex system profile
 @defvr {Scheme Variable} profile-service-type
 Type of the service that populates the @dfn{system profile}---i.e., the
 programs under @file{/run/current-system/profile}.  Other services can
diff --git a/doc/images/introduction.dot b/doc/images/introduction.dot
new file mode 100644
index 0000000..4828725
--- /dev/null
+++ b/doc/images/introduction.dot
@@ -0,0 +1,107 @@
+// Guix intro figure showing GuixSD, Guix on GNU/Linux, Hydra, etc.
+digraph G {
+	compound=true
+	size="6,6"
+	edge [fontname = helvetica fontsize=18]
+	graph [fontname = helvetica fontsize=18]
+	node  [fontname = helvetica fontsize=18]
+	ranksep="0.8 equally"
+	// Developer + Hydra
+	{ node
+		[shape=box style = filled
+		 fillcolor="white" color = transparent]
+		pkgsource [label = "Source\nCode"]
+		substitutes [label = "Package\nSubstitutes"]
+	}
+	subgraph cluster_pkgsource {
+		label = "Developer"
+		labelloc = "t"
+		style = filled fillcolor=azure2 color = transparent
+		pkgsource
+	}
+	subgraph cluster_hydra {
+		label = "Guix Hydra"
+		style = filled fillcolor= gold color = transparent
+		substitutes
+	}
+	// GuixSD
+	{ node
+		[shape=box style = filled fillcolor=white color = transparent]
+		spkgs [label = "System\nProfile"]
+		guix2 [label="Guix"]
+		u1pkgs [label = "Per-user\nProfile"]
+		user [label = "User" fillcolor=pink]
+	}
+	{ node
+		[shape=box style ="filled"
+		 fillcolor=gold color = transparent]
+		guixd [label = "Build Daemon"]
+		guixs [label = "System Services"]
+	}
+	subgraph cluster_guixSD {
+		label = "Guix System Distribution (GuixSD)"
+		labelloc = "t"
+		style = filled fillcolor= azure2 color = transparent
+		user -> guix2
+		user -> u1pkgs
+		user -> spkgs
+		subgraph cluster_guixstore {
+			label = "The Store"
+			labeljust = "l"
+			labelloc = "b"
+			style = filled fillcolor= gold color = transparent
+			{ rank=same guix2 -> u1pkgs -> spkgs [style=invis]}
+		}
+		guix2 -> guixd 
+		u1pkgs -> guixd  [dir = back ltail=cluster_guixstore ]
+		spkgs -> guixs [dir = none ltail=cluster_guixstore ]
+	}
+	// Guix on GNU/Linux
+	{ node
+		[shape=box style = filled
+		 fillcolor="white" color = transparent]
+		du1pkgs [label = "Per-user\nProfile"]
+		duser [label = "User" fillcolor=pink]
+		guix [label="Guix"]
+		dpkgs [label = "System\nProfile"]
+	}
+	{ node
+		[shape=box style ="filled"
+		 fillcolor=gold color = transparent]
+		guixd2 [label = "Build Daemon"]
+	}
+	{ node [shape=box style = filled fillcolor=darkseagreen2 color = transparent]
+		debs [label = "System Services"]
+	}
+	subgraph cluster_guixdeb {
+		label = "Guix Installed on GNU/Linux"
+		labelloc = "t"
+		style = filled fillcolor= azure2 color = transparent
+		duser -> dpkgs
+		duser -> guix
+		duser -> du1pkgs
+		subgraph cluster_debstore {
+			label = "The Store"
+			labeljust = "l"
+			labelloc = "b"
+			style = filled fillcolor= gold color = transparent
+			du1pkgs
+			guix
+		}
+		{ rank=same guixd2 -> debs [style=invis] }
+		du1pkgs -> guixd2 [dir = back ltail=cluster_debstore ]
+		guix -> guixd2
+		subgraph cluster_deb {
+			label = "GNU/Linux"
+			labelloc = "b"
+			style = filled fillcolor=darkseagreen2 color = transparent
+			dpkgs -> debs [dir = none ltail=cluster_deb ]
+		}
+	}
+	// connections between Source, Hydra Guix & GuixSD
+	pkgsource -> substitutes [lhead=cluster_hydra ltail=cluster_pkgsource]
+	pkgsource -> guixd [ltail=cluster_pkgsource]
+	pkgsource -> guixd2 [ltail=cluster_pkgsource]
+	substitutes -> guixd [ltail=cluster_hydra]
+	substitutes -> guixd2 [ltail=cluster_hydra]
+}
diff --git a/doc/images/introduction.png b/doc/images/introduction.png
new file mode 100644
index 0000000000000000000000000000000000000000..95db85fcd12f318fe20f7c1cd60d70ea9a37e2bb
GIT binary patch
literal 28524
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
IMfLsv4<(JcV*mgE

literal 0
HcmV?d00001

-- 
2.7.3


[-- Attachment #3: introduction.png --]
[-- Type: image/png, Size: 28524 bytes --]

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] doc: "Introduction" revise and add figure.
  2016-03-18  1:53 [PATCH] doc: "Introduction" revise and add figure myglc2
@ 2016-03-25 23:00 ` Ludovic Courtès
  2016-03-26  2:44   ` myglc2
  0 siblings, 1 reply; 3+ messages in thread
From: Ludovic Courtès @ 2016-03-25 23:00 UTC (permalink / raw)
  To: myglc2; +Cc: guix-devel

Hi!

After much hesitation and questions, I ended up pushing something
similar in spirit to what you suggest, but with my own words (commit
6f773606812075ee5c6747c3b7f95285254e48f2).

The suggestion you made of describing features “top-down” made a lot of
sense to me, esp. compared to the previous one which insisted on the
“functional paradigm”, which is not really the first thing newcomers are
interested in.  However, I felt a few things needed a different
explanation.

Also, while I agree that illustrations would be helpful, I’m not
satisfied with the diagram you proposed.  I think the meaning of arrows
is unclear, and it also puts too much emphasis on Hydra, “system
profiles”, and “system services.”

Anyway, below is the intro as it currently appears in ‘master’.

Thank you!

Ludo’.


GNU Guix(1) is a package management tool for the GNU system.  Guix makes
it easy for unprivileged users to install, upgrade, or remove packages,
to roll back to a previous package set, to build packages from source,
and generally assists with the creation and maintenance of software
environments.

   Guix provides a command-line package management interface (*note
Invoking guix package::), a set of command-line utilities (*note
Utilities::), a visual user interface in Emacs (*note Emacs
Interface::), as well as Scheme programming interfaces (*note
Programming Interface::).  Its “build daemon” is responsible for
building packages on behalf of users (*note Setting Up the Daemon::) and
for downloading pre-built binaries from authorized sources (*note
Substitutes::).

   Guix includes package definitions for many GNU and non-GNU packages,
all of which respect the user’s computing freedom
(https://www.gnu.org/philosophy/free-sw.html).  It is _extensible_:
users can write their own package definitions (*note Defining
Packages::) and make them available as independent package modules
(*note Package Modules::).  It is also _customizable_: users can
_derive_ specialized package definitions from existing ones, including
from the command line (*note Package Transformation Options::).

   You can install GNU Guix on top of an existing GNU/Linux system where
it complements the available tools without interference (*note
Installation::), or you can use it as part of the standalone “Guix
System Distribution” or GuixSD (*note GNU Distribution::).  With
GNU GuixSD, you _declare_ all aspects of the operating system
configuration and Guix takes care of instantiating the configuration in
a transactional, reproducible, and stateless fashion (*note System
Configuration::).

   Under the hood, Guix implements the “functional package management”
discipline pioneered by Nix (*note Acknowledgments::).  In Guix, the
package build and installation process is seen as a _function_, in the
mathematical sense.  That function takes inputs, such as build scripts,
a compiler, and libraries, and returns an installed package.  As a pure
function, its result depends solely on its inputs—for instance, it
cannot refer to software or scripts that were not explicitly passed as
inputs.  A build function always produces the same result when passed a
given set of inputs.  It cannot alter the environment of the running
system in any way; for instance, it cannot create, modify, or delete
files outside of its build and installation directories.  This is
achieved by running build processes in isolated environments (or
“containers”), where only their explicit inputs are visible.

   The result of package build functions is “cached” in the file system,
in a special directory called “the store” (*note The Store::).  Each
package is installed in a directory of its own in the store—by default
under ‘/gnu/store’.  The directory name contains a hash of all the
inputs used to build that package; thus, changing an input yields a
different directory name.

   This approach is the foundation for the salient features of Guix:
support for transactional package upgrade and rollback, per-user
installation, and garbage collection of packages (*note Features::).

   ---------- Footnotes ----------

   (1) “Guix” is pronounced like “geeks”, or “ɡiːks” using the
international phonetic alphabet (IPA).

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] doc: "Introduction" revise and add figure.
  2016-03-25 23:00 ` Ludovic Courtès
@ 2016-03-26  2:44   ` myglc2
  0 siblings, 0 replies; 3+ messages in thread
From: myglc2 @ 2016-03-26  2:44 UTC (permalink / raw)
  To: guix-devel

ludo@gnu.org (Ludovic Courtès) writes:

> Hi!
>
> After much hesitation and questions, I ended up pushing something
> similar in spirit to what you suggest, but with my own words (commit
> 6f773606812075ee5c6747c3b7f95285254e48f2).

No problem. I knew I was 'messing with your baby.' But then again you
asked for concrete suggestions, so I gave you some to consider.

> The suggestion you made of describing features “top-down” made a lot
> of sense to me, esp. compared to the previous one which insisted on
> the “functional paradigm”, which is not really the first thing
> newcomers are interested in.  However, I felt a few things needed a
> different explanation.

NP. I am glad parts of it work for you.

> Also, while I agree that illustrations would be helpful, I’m not
> satisfied with the diagram you proposed.  I think the meaning of arrows
> is unclear,

No doubt. But this may not matter.

> and it also puts too much emphasis on Hydra,

Maybe. But showing that a package can flow directly to the user from
source or thru hydra, a service provided by Guix, is an elemental thing
about Guix that should be put across.

> “system profiles”, and “system services.”

This is an attempt to show the similarity between Guix/GNU/Linux and
GuixSD and also what parts are changed out. And to show the distinction
between per-user profile and system profile. These are elemental to
understanding Guix. They are taken for granted by you but they are quite
foreign to a typical user. And you can't really find your way around the
doc until you understand these points.

Drawing a simple diagram can be a uncomfortable process because it
forces you to throw a lot of details you are very excited about out the
window. But it is an important way to provide an "on-ramp" for new users
and to force oneself to decide what the "elevator story" is. 

As an example of what a failed attempt to provide a useful diagram would
be, consider ...

http://algebraicthunk.net/~dburrows/blog/entry/a-better-map-of-the-apt-state-files/

... This might be relatively more accurate but would be of no use
whatsoever to a new user.

> Anyway, below is the intro as it currently appears in ‘master’.

Thanks, this looks great, but of course eventually, when nirvana has
been reached, all your introduction will say is, "The purpose of GNU
Guix(1) is to allow users to easily install, upgrade, and remove free(2)
GNU and non-GNU software". ;-)

Meanwhile, I think we should take another run at adding a figure for to
the introduction.

- George

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-03-26  2:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-18  1:53 [PATCH] doc: "Introduction" revise and add figure myglc2
2016-03-25 23:00 ` Ludovic Courtès
2016-03-26  2:44   ` myglc2

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.