unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Guix vs GuixSD
@ 2016-02-15  0:22 myglc2
  2016-02-15  1:05 ` Chris Marusich
  2016-03-05  1:59 ` myglc2
  0 siblings, 2 replies; 14+ messages in thread
From: myglc2 @ 2016-02-15  0:22 UTC (permalink / raw)
  To: guix-devel

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

I hope to switch my home servers from Debian 8 to NixOS or GuixSD.  Once
that is working, I hope to convince the system managers at work to
install Nix or Guix.

I started experimenting with Nix and NixOS 6 weeks ago. 3 weeks ago I
switched my focus to Guix and installed guixSD on one of my servers.

I found it difficult to determine exactly which parts of the volumminous
(and tasty) Guix doc to read and how best to apply GuixSD. FWIW, I
experienced the same difficulty with Nix/NixOS.

To clarify my thoughts, I made a diagram (guix-ov) to illustrate Guix
features that are important to me:

1) Auditable flow of free software from developer site to user
   environment

2) Automated local package builds

3) Pre-built packages from Hydra

4) The potential of an identical Guix user environment everywhere

I intended to show the differences between Guix and GuixSD. But frankly,
looking at diagram guix-ov, they seem more alike than not. I think this
contributed to my difficulty in figuring out GuixSD. So, made a second
diagram (guix-ov2) that I think ...

- shows clearly the difference and relationship between Guix and GuixSD

- is more modular in appearance and easier to understand

- is more descriptive of how the software works

- is better aligned with the doc

- illustrates the distinction between user and system environments

In short, I think diagram guix-ov2 is a more informative way to explain
the Guix-verse.

I know guix-ov2 does not match the way Guix and GuixSD are currently
described. But I believe that if you describe things this way it will be
easier for new users to understand and apply Guix and GuixSD.

Sidebar:

At the moment, the GNU Guix web site focuses mostly on GuixSD. But to
test drive Guix, a user must first decide what to download. Perhaps one
of these diagrams (with suitable prettyfication) could help a user
decide what to download.

[-- Attachment #2: guix-ov2.dot --]
[-- Type: application/octet-stream, Size: 1869 bytes --]

// Overview of Guix & GuixSD
digraph G {
	compound=true
	size="6,6"

	{ node [shape=box style = filled fillcolor="azure" color = transparent fontname = courier]
		packages [label = "Store"]
		system [label = "Stateful\nSystem\nEnvironment"]
		systemSD [label = "Guix\nSystem\nEnvironment"]
		GNULinux [label = "GNU/Linux \nDistribution"]
		user [label = "Guix User\nEnvironment"]
		userSD [label = "Guix User\nEnvironment"]
		packagesx [label = "Store"]
		substitutes [label = "Pre-built\nPackage"]
		pkgsource [label = "Package Source"]
		hydra [label = "Build Farm"]
		guix [image="./guix-artwork/website/static/base/img/Guix-package.png" label=""]
		guix2 [image="./guix-artwork/website/static/base/img/Guix-package.png" label=""]
		GuixSD [image="./guix-artwork/website/static/base/img/GuixSD-logo.png" label="" fillcolor="black"]
	}

	subgraph cluster_pkgsource {
		label = "Free Software\nDeveloper's Site"
		style = filled fillcolor= azure3 color = transparent
		fontname = courier
		pkgsource
	}

	subgraph cluster_hydra {
		label = "Guix  Hydra"
		style = filled fillcolor= azure3 color = transparent
		fontname = courier
		hydra -> substitutes [nodesep = .2]
	}

	subgraph cluster_guixSD {
		label = "Computer Running\nGuix + GuixSD"
		labelloc = "b"
		style = filled fillcolor= azure3 color = transparent
		fontname = courier
		{ rank=same guix2 ->  packagesx [ dir = none ]}
		guix2 -> systemSD -> GuixSD [ dir = none ]
		userSD -> guix2  [ dir = none ]
	}

	subgraph cluster_guix {
		label = "Computer Running\nGuix + GNU/Linux"
		labelloc = "b"
		style = filled fillcolor= azure3 color = transparent
		fontname = courier
		{ rank=same guix ->  packages [ dir = none ]}
		guix ->  system -> GNULinux [ dir = none ]
		user -> guix  [ dir = none ]
	}
		
	pkgsource -> hydra
	substitutes -> guix
	pkgsource -> guix
	substitutes -> guix2
	pkgsource -> guix2
}

[-- Attachment #3: guix-ov2.png --]
[-- Type: image/png, Size: 38176 bytes --]

[-- Attachment #4: guix-ov.dot --]
[-- Type: application/octet-stream, Size: 1613 bytes --]

// Overview of Guix & GuixSD
digraph G {
	compound=true
	size="6,6"

	{ node [shape=box style = filled fillcolor="azure" color = transparent fontname = courier]
		packages [label = "Store"]
		GNULinux [label = "GNU/Linux \nDistribution"]
		user [label = "Guix User\nEnvironment"]
		userSD [label = "Guix User\nEnvironment"]
		packagesx [label = "Store"]
		substitutes [label = "Pre-built\nPackage"]
		pkgsource [label = "Package Source"]
		hydra [label = "Build Farm"]
		guix [image="./guix-artwork/website/static/base/img/Guix-package.png" label=""]
		guixSD [image="./guix-artwork/website/static/base/img/GuixSD-package.png" label=""]
	}

	subgraph cluster_pkgsource {
		label = "Free Software\nDeveloper's Site"
		style = filled fillcolor= azure3 color = transparent
		fontname = courier
		pkgsource
	}

	subgraph cluster_hydra {
		label = "Guix  Hydra"
		style = filled fillcolor= azure3 color = transparent
		fontname = courier
		hydra -> substitutes [nodesep = .2]
	}

	subgraph cluster_guixSD {
		label = "Computer Running\nGuixSD"
		labelloc = "b"
		style = filled fillcolor= azure3 color = transparent
		fontname = courier
		{ rank=same guixSD ->  packagesx [ dir = none ]}
		userSD -> guixSD  [ dir = none ]
	}

	subgraph cluster_guix {
		label = "Computer Running\nGuix + GNU/Linux"
		labelloc = "b"
		style = filled fillcolor= azure3 color = transparent
		fontname = courier
		{ rank=same guix ->  packages [ dir = none ]}
		guix ->  GNULinux [ dir = none ]
		user -> guix  [ dir = none ]
	}
		
	pkgsource -> hydra
	substitutes -> guix
	pkgsource -> guix
	substitutes -> guixSD
	pkgsource -> guixSD
}

[-- Attachment #5: guix-ov.png --]
[-- Type: image/png, Size: 36443 bytes --]

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

* Re: Guix vs GuixSD
  2016-02-15  0:22 Guix vs GuixSD myglc2
@ 2016-02-15  1:05 ` Chris Marusich
  2016-02-15 17:37   ` myglc2
  2016-03-05  1:59 ` myglc2
  1 sibling, 1 reply; 14+ messages in thread
From: Chris Marusich @ 2016-02-15  1:05 UTC (permalink / raw)
  To: myglc2, guix-devel

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

Hi,

I think you're asking "What is the difference between Guix and GuixSD", and
you don't feel that the manual is clear enough about this. Is that right?
If so, how do you feel the manual could be improved?

I'm not yet a Guix/GuixSD expert, but in a nutshell, it seems to me that
the biggest difference between Guix and GuixSD is that by using GuixSD, you
gain many of Guix's benefits (reproducibility, easy rollback, etc.) at the
system level. If you use a non-GuixSD distribution, you can still enjoy the
benefits of using Guix as a package manager, but you'll be using something
else to manage the system itself (the installed bootloader, the installed
kernel, all the services that launch at system start, etc.). Most likely,
you will simply be missing out on all the nice features that GuixSD
provides.

For what it's worth, I think the current structure of the manual makes a
clear distinction between Guix the package manager and GuixSD the GNU
system:

https://www.gnu.org/software/guix/manual/guix.html

Section 7 is all about GuixSD. All other sections apply to GuixSD, too, in
the sense that they discuss the Guix package manager, which is used by
GuixSD. When necessary, the manual calls out the differences between doing
something on GuixSD vs. doing it on a non-GuixSD distribution. Again, if
you don't think this is clear enough, how do you think the manual can be
improved?

I see that you are hoping to convince others to use Guix/GuixSD instead of
alternatives. That's great! You might be interested in the following email
thread, in which Malcolm Cook discusses his efforts to make the case for
GNU Guix:

http://lists.gnu.org/archive/html/guix-devel/2016-02/msg00286.html

Good luck,
Chris



On Sun, Feb 14, 2016 at 4:22 PM myglc2 <myglc2@gmail.com> wrote:

> I hope to switch my home servers from Debian 8 to NixOS or GuixSD.  Once
> that is working, I hope to convince the system managers at work to
> install Nix or Guix.
>
> I started experimenting with Nix and NixOS 6 weeks ago. 3 weeks ago I
> switched my focus to Guix and installed guixSD on one of my servers.
>
> I found it difficult to determine exactly which parts of the volumminous
> (and tasty) Guix doc to read and how best to apply GuixSD. FWIW, I
> experienced the same difficulty with Nix/NixOS.
>
> To clarify my thoughts, I made a diagram (guix-ov) to illustrate Guix
> features that are important to me:
>
> 1) Auditable flow of free software from developer site to user
>    environment
>
> 2) Automated local package builds
>
> 3) Pre-built packages from Hydra
>
> 4) The potential of an identical Guix user environment everywhere
>
> I intended to show the differences between Guix and GuixSD. But frankly,
> looking at diagram guix-ov, they seem more alike than not. I think this
> contributed to my difficulty in figuring out GuixSD. So, made a second
> diagram (guix-ov2) that I think ...
>
> - shows clearly the difference and relationship between Guix and GuixSD
>
> - is more modular in appearance and easier to understand
>
> - is more descriptive of how the software works
>
> - is better aligned with the doc
>
> - illustrates the distinction between user and system environments
>
> In short, I think diagram guix-ov2 is a more informative way to explain
> the Guix-verse.
>
> I know guix-ov2 does not match the way Guix and GuixSD are currently
> described. But I believe that if you describe things this way it will be
> easier for new users to understand and apply Guix and GuixSD.
>
> Sidebar:
>
> At the moment, the GNU Guix web site focuses mostly on GuixSD. But to
> test drive Guix, a user must first decide what to download. Perhaps one
> of these diagrams (with suitable prettyfication) could help a user
> decide what to download.
>

[-- Attachment #2: Type: text/html, Size: 4822 bytes --]

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

* Re: Guix vs GuixSD
  2016-02-15  1:05 ` Chris Marusich
@ 2016-02-15 17:37   ` myglc2
  2016-02-16  3:26     ` Chris Marusich
  0 siblings, 1 reply; 14+ messages in thread
From: myglc2 @ 2016-02-15 17:37 UTC (permalink / raw)
  To: guix-devel

Chris Marusich <cmmarusich@gmail.com> writes:
[...]
> I think you're asking "What is the difference between Guix and
> GuixSD", and you don't feel that the manual is clear enough about
> this. Is that right?

No, the problem is at a higher level than the manual.

The current packaging of Guix within GuixSD obfuscates what is going on
and makes understanding the Guix-verse difficult.

I drew the diagrams: To illustrate and stimulate a discussion of this.

Do you have any thoughts about the diagrams?

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

* Re: Guix vs GuixSD
  2016-02-15 17:37   ` myglc2
@ 2016-02-16  3:26     ` Chris Marusich
  2016-02-16  9:24       ` Jookia
  0 siblings, 1 reply; 14+ messages in thread
From: Chris Marusich @ 2016-02-16  3:26 UTC (permalink / raw)
  To: myglc2, guix-devel

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

(Apologies for top-posting; my mobile email client doesn't seem to let me
post in any other way...)

Regarding your diagrams, I guess the one that shows GuixSD using Guix makes
a little more sense to me than the one that shows GuixSD as a total
replacement for Guix. However, I'm not sure exactly how GuixSD uses Guix
when managing the system, so I will defer to the opinion of others on the
mailing list who know more about theses things than me.

It isn't clear to me what you want to know. Perhaps if you can ask a more
concrete question, it will be easier for the others to answer?

To reiterate what I said before: my current understanding is that Guix is a
functional package manager (with a lot of fantastic features) that you can
run anywhere. That's all, really. And GuixSD is a full GNU operating system
which currently uses Linux-Libre as its kernel, Guix as its package
manager, and Shepherd (formerly DMD) as its init system. Similar to a
GNU/Linux distribution, the GuixSD system comes with some extra "glue"
which makes all those separate components work together out of the box. But
the way that those components are glued together in GuixSD allows you to
enjoy certain benefits that you don't get with other systems (software
freedom, system configuration in guile, easy rollback of system upgrades,
etc). I don't yet know much about how GuixSD's "glue" is implemented, but I
think that's the gist of it.

On Mon, Feb 15, 2016, 09:37 myglc2 <myglc2@gmail.com> wrote:

> Chris Marusich <cmmarusich@gmail.com> writes:
> [...]
> > I think you're asking "What is the difference between Guix and
> > GuixSD", and you don't feel that the manual is clear enough about
> > this. Is that right?
>
> No, the problem is at a higher level than the manual.
>
> The current packaging of Guix within GuixSD obfuscates what is going on
> and makes understanding the Guix-verse difficult.
>
> I drew the diagrams: To illustrate and stimulate a discussion of this.
>
> Do you have any thoughts about the diagrams?
>
>
>
>

[-- Attachment #2: Type: text/html, Size: 2553 bytes --]

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

* Re: Guix vs GuixSD
  2016-02-16  3:26     ` Chris Marusich
@ 2016-02-16  9:24       ` Jookia
  2016-02-16  9:41         ` Chris Marusich
  0 siblings, 1 reply; 14+ messages in thread
From: Jookia @ 2016-02-16  9:24 UTC (permalink / raw)
  To: Chris Marusich; +Cc: guix-devel, myglc2

On Tue, Feb 16, 2016 at 03:26:01AM +0000, Chris Marusich wrote:
> (Apologies for top-posting; my mobile email client doesn't seem to let me
> post in any other way...)
>
> Regarding your diagrams, I guess the one that shows GuixSD using Guix makes
> a little more sense to me than the one that shows GuixSD as a total
> replacement for Guix. However, I'm not sure exactly how GuixSD uses Guix
> when managing the system, so I will defer to the opinion of others on the
> mailing list who know more about theses things than me.
>
> It isn't clear to me what you want to know. Perhaps if you can ask a more
> concrete question, it will be easier for the others to answer?
>
> To reiterate what I said before: my current understanding is that Guix is a
> functional package manager (with a lot of fantastic features) that you can
> run anywhere. That's all, really. And GuixSD is a full GNU operating system
> which currently uses Linux-Libre as its kernel, Guix as its package
> manager, and Shepherd (formerly DMD) as its init system. Similar to a
> GNU/Linux distribution, the GuixSD system comes with some extra "glue"
> which makes all those separate components work together out of the box. But
> the way that those components are glued together in GuixSD allows you to
> enjoy certain benefits that you don't get with other systems (software
> freedom, system configuration in guile, easy rollback of system upgrades,
> etc). I don't yet know much about how GuixSD's "glue" is implemented, but I
> think that's the gist of it.

I can see how this is confusing, after all, how would a package manager be used
to package things like an initramfs or SSH configuration? Well, the trick is
that GuixSD effectively 'packages' your os-configuration.

If we look at a Guix package we can see it takes a configuration of sources,
a build system, maybe some build phases and maybe some more things like patches.
From this a few derivations are built, which are basically things put in the
Guix store. These derivations include the patched source code and the final
binaries. Then Guix takes these final binary derivations and puts them in your
profile so you can use them if it's something you installed explicitly.

The key here is that Guix generates a lot of things, though most often this is
hidden by substitute downloads of the final binary unless you compile everything
yourself. How could you build an operating system out of this? Well, think of
the operating system as one giant package that Guix generates a ton of
derivations for then links them to your system's profile. So if you have SSH
running it'll make you a cool SSH configuration derivation then link that in.

"Why would you do this?" is probably your next question. Well, let's say you
update a ton of Guix packages and it breaks half way. This is okay since it
won't change your Guix profile until you actually have a working set of
packages and all their dependencies. You can also rollback in case the latest
version of your favourite browser Icecat breaks an add-on you absolutely need.

Now if we apply this to the operating system 'package', or derivation, you can
switch between all the things that make up your system in much the same way or
roll back. The switching here is done using 'guix system reconfigure' or at boot
through GRUB if the latest version of a system configuration, such as a Shepherd
service somehow kills your entire system. Guix also has support for installing
your os-configuration not just to your drive, but to a VM or a container.
Imagine looking online for Guix configurations to try in a VM then setting that
up as your main system configuration!

Perhaps I went a bit off topic there but I hope this give some understanding.
Jookia.

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

* Re: Guix vs GuixSD
  2016-02-16  9:24       ` Jookia
@ 2016-02-16  9:41         ` Chris Marusich
  0 siblings, 0 replies; 14+ messages in thread
From: Chris Marusich @ 2016-02-16  9:41 UTC (permalink / raw)
  To: Jookia; +Cc: guix-devel, myglc2

Jookia <166291@gmail.com> writes:

> Perhaps I went a bit off topic there but I hope this give some understanding.

Thank you for the explanation. That's more or less what I imagined was
going on with GuixSD.

Best regards,
Chris

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

* Re: Guix vs GuixSD
  2016-02-15  0:22 Guix vs GuixSD myglc2
  2016-02-15  1:05 ` Chris Marusich
@ 2016-03-05  1:59 ` myglc2
  2016-03-06 13:53   ` Ludovic Courtès
  2016-03-07  6:57   ` Chris Marusich
  1 sibling, 2 replies; 14+ messages in thread
From: myglc2 @ 2016-03-05  1:59 UTC (permalink / raw)
  To: guix-devel

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

myglc2 <myglc2@gmail.com> writes: (paraphrased)

> I started experimenting with Nix and NixOS 6 weeks ago. 3 weeks ago I
> switched to guixSD. I found it difficult to determine exactly which
> parts of the volumminous (and tasty) Guix doc to read. To clarify my
> thoughts, I made diagrams of Guix and GuixSD. I intended to show the
> differences between Guix and GuixSD, but frankly, they seemed more
> alike than not.

+ 2.5 weeks ==> another diagram of the Guix-verse.

Comments?  Corrections?  TIA - George


[-- Attachment #2: guixvssd2.dot --]
[-- Type: application/octet-stream, Size: 3294 bytes --]

// GNU GuixSD vs Guix on Debian
digraph G {
	compound=true
	size="12,12"
	edge [fontname = helvetica]
	graph [fontname = helvetica]
	node  [fontname = helvetica]
	{ node [shape=box style = filled fillcolor="white" color = transparent]
		pkgsource [label = "Source"]
		substitutes [label = "Prebuilt\nPackage"]
	}
	// guixondeb cluster
	{ node [shape=box style = filled fillcolor=pink color = transparent]		
		dpkgs [label = "Debian packages" fillcolor=grey]
	}
	{ node [shape=box style ="filled,rounded" fillcolor=pink color = transparent]		
		guixd2 [label = "Guix build daemon"]
		debs [label = "Debian system services" fillcolor=grey]
	}
	{ node [shape=box style ="filled,rounded" fillcolor=lightblue color = transparent]		
		duser [label = "user"]
		guix [label="guix"]
	}
	{ node [shape=box style ="filled" fillcolor=lightblue color = transparent]		
		du1pkgs [label = "user packages"]
	}
	subgraph cluster_guixdeb {
		label = "GNU Guix Binary Install on Debian"
		labelloc = "t"
		style = filled fillcolor= azure2 color = transparent
		duser -> dpkgs  [ label = "/usr/bin" ]
		duser -> guix  [ label = " ~/.config/guix/latest  " ]
		duser -> du1pkgs  [ label = " ~/.guix-profile  " ]
		subgraph cluster_debstore {
			label = "Guix Store /gnu/store"
			labelloc = "b"
			style = filled fillcolor= tan color = transparent
			du1pkgs
			guix
		}
		{ rank=same debs -> guixd2 [style=invis] }
		du1pkgs -> guixd2  [dir = back ltail=cluster_debstore ]
	}
	guix -> guixd2 [label=rpc style=dotted]
	// source & hydra clusters
	subgraph cluster_pkgsource {
		label = "Developer"
		labelloc = "t"
		style = filled fillcolor= azure2 color = transparent
		pkgsource
	}
	subgraph cluster_hydra {
		label = "Guix Hydra"
		style = filled fillcolor= azure2 color = transparent
		substitutes
	}
	// guixSD cluster
	{ node [shape=box style = filled fillcolor=pink color = transparent]		
		spkgs [label = "system packages"]
	}
	{ node [shape=box style ="filled,rounded" fillcolor=pink color = transparent]		
		guixd [label = "Guix build daemon"]
		guixs [label = "Guix system services"]
	}
	{ node [shape=box style ="filled,rounded" fillcolor=lightblue color = transparent]		
		user [label = "user"]
		guix2 [label="guix"]
	}
	{ node [shape=box style ="filled" fillcolor=lightblue color = transparent]		
		u1pkgs [label = "user packages"]
	}
	subgraph cluster_guixSD {
		label = "GNU GuixSD Native Install"
		labelloc = "t"
		style = filled fillcolor= azure2 color = transparent
		user -> guix2 [ label = " ~/.config/guix/latest  " ]
		user -> u1pkgs  [ label = " ~/.guix-profile  " ]
		user -> spkgs [ label = " /run/current-system/profile  "]
		subgraph cluster_guixstore {
			label = "Guix Store /gnu/store"
			labelloc = "b"
			style = filled fillcolor= tan color = transparent
			guix2
			u1pkgs
			spkgs
//			{ rank=same guix2 -> u1pkgs -> spkgs }
		}
		u1pkgs -> guixd  [dir = back ltail=cluster_guixstore ]
		{ rank=same guixd -> guixs [style=invis] }
	}
	guix2 -> guixd [label=rpc style=dotted]
	// connections source & hydra & guix & guixSD
	pkgsource -> substitutes [lhead=cluster_hydra ltail=cluster_pkgsource]
	pkgsource -> guixd [ltail=cluster_pkgsource]
	substitutes -> guixd [ltail=cluster_hydra]
	pkgsource -> guixd2 [ltail=cluster_pkgsource]
	substitutes -> guixd2 [ltail=cluster_hydra]
}

[-- Attachment #3: guixvssd2.png --]
[-- Type: image/png, Size: 67849 bytes --]

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

* Re: Guix vs GuixSD
  2016-03-05  1:59 ` myglc2
@ 2016-03-06 13:53   ` Ludovic Courtès
  2016-03-06 15:37     ` myglc2
  2016-03-07  6:57   ` Chris Marusich
  1 sibling, 1 reply; 14+ messages in thread
From: Ludovic Courtès @ 2016-03-06 13:53 UTC (permalink / raw)
  To: myglc2; +Cc: guix-devel

myglc2 <myglc2@gmail.com> skribis:

> myglc2 <myglc2@gmail.com> writes: (paraphrased)
>
>> I started experimenting with Nix and NixOS 6 weeks ago. 3 weeks ago I
>> switched to guixSD. I found it difficult to determine exactly which
>> parts of the volumminous (and tasty) Guix doc to read. To clarify my
>> thoughts, I made diagrams of Guix and GuixSD. I intended to show the
>> differences between Guix and GuixSD, but frankly, they seemed more
>> alike than not.
>
> + 2.5 weeks ==> another diagram of the Guix-verse.
>
> Comments?  Corrections?  TIA - George

Overall I like the diagram!  It may help newcomers to have it.

That said, I don’t know where to put it!  It could go on the web site
and/or in the manual (under “Installation”?).  In both cases, I’d like
to have concrete ideas (aka. patches ;-)) showing how to do that.

Thoughts?  :-)

Thanks,
Ludo’.

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

* Re: Guix vs GuixSD
  2016-03-06 13:53   ` Ludovic Courtès
@ 2016-03-06 15:37     ` myglc2
  0 siblings, 0 replies; 14+ messages in thread
From: myglc2 @ 2016-03-06 15:37 UTC (permalink / raw)
  To: guix-devel

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

> myglc2 <myglc2@gmail.com> skribis:
>
>> myglc2 <myglc2@gmail.com> writes: (paraphrased)
>>
>>> I started experimenting with Nix and NixOS 6 weeks ago. 3 weeks ago I
>>> switched to guixSD. I found it difficult to determine exactly which
>>> parts of the volumminous (and tasty) Guix doc to read. To clarify my
>>> thoughts, I made diagrams of Guix and GuixSD. I intended to show the
>>> differences between Guix and GuixSD, but frankly, they seemed more
>>> alike than not.
>>
>> + 2.5 weeks ==> another diagram of the Guix-verse.
>>
>> Comments?  Corrections?  TIA - George
>
> Overall I like the diagram!  It may help newcomers to have it.
>
> That said, I don’t know where to put it!  It could go on the web site
> and/or in the manual (under “Installation”?).  In both cases, I’d like
> to have concrete ideas (aka. patches ;-)) showing how to do that.

Thanks. Happy to submit patches once we have a plan. How about:

manual: rework introduction & diagram to be consistent & put it there?

web site: a simplified version on the download page?

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

* Re: Guix vs GuixSD
  2016-03-05  1:59 ` myglc2
  2016-03-06 13:53   ` Ludovic Courtès
@ 2016-03-07  6:57   ` Chris Marusich
  2016-03-07 22:53     ` myglc2
  1 sibling, 1 reply; 14+ messages in thread
From: Chris Marusich @ 2016-03-07  6:57 UTC (permalink / raw)
  To: myglc2; +Cc: guix-devel

myglc2 <myglc2@gmail.com> writes:

Everyone loves pictures! Here are my thoughts about the graphic:

* What do the different colors mean? It is not clear to me what red,
  blue, and gray mean. I see that some of the boxes are grouped by
  color, but I don't see the pattern. The same question applies to the
  round corners vs. sharp corners. If there is no discernible pattern,
  maybe they should look more similar.

* Why is the "rpc" arrow drawn using dashed lines, but all other arrows
  are drawn using solid lines? I think you can just use solid lines in
  all cases to reduce cognitive noise.

* Guix Hydra: This graphic makes hydra look special. But can't this role
  be filled by anyone with a server who has built and published packages
  (e.g., with guix publish)?  Hydra is just the default place from which
  substitues are downloaded. Perhaps we can rename this to something
  like "substitutes publisher" to reflect the decentralized architecture
  of guix, which is one of its great features.

* Guix Hydra: consider replacing "prebuilt package" with "substitutes"
  or "binary substitutes", so that it matches the terminology used in
  other parts of the manual.

* Guix build daemon: consider calling this simply the "guix daemon".

* GNU Guix Binary Install on Debian: consider removing the word
  "binary". I don't think it adds any clarity here, especially because
  you can build Guix from source on Debian.

* GNU GuixSD Native Install: consider calling this the "GNU Guix System
  Distribution (GuixSD)" to match the terminology used in the manual. I
  don't think that using the word "native" adds any clarity here.

* GNU GuixSD Native Install: To make the commentary for the arrow
  pointing to "system packages" match the the commentary for the arrow
  in "GNU Guix Binary Install on Debian" pointing to "Debian packages,"
  consider using a specific common program name as the example. For
  instance, use "/usr/bin/sh" (or whatever the path is on Debian) and
  "/run/current-system/profile/bin/sh". Currently, the Debian example
  uses the "/usr/bin" directory, while the GuixSD example uses a
  conceptually different directory, so the comparison is not as clear as
  it could be.

* Consider replacing the single word "guix" with a phrase like "guix
  tools and packages", since the contents of ~/.config/guix/latest, if
  present, will be used for both command-line tools like "guix
  package" as well as for finding package definitions.

* One concept that is missing from this graphic is the idea that you can
  add your own custom package definitions via the GUIX_PACKAGE_PATH
  environment variable (or the --load-path option to commands such as
  "guix build"). Adding this concept to the graphic may help users more
  quickly realize the freedom they have for hooking up their own package
  definitions into the Guix system, which is not as easy to do using
  other package managers. What do you think? Can it be added without
  cluttering it up too much?

* Consider replacing "Debian" with "foreign distribution" to keep the
  graphic sufficiently generic.

* "Guix system services": consider renaming "Guix" to "GuixSD". Also, I
  wonder if including this box here will make people think that GuixSD
  services are basically the same as other services launched by init
  systems like systemd in distros like Debian on startup. Case in point:
  where does the "operating-system-etc-service" fit in? Does it have a
  Debian analogue? I'm not sure. Maybe this is OK as-is.

Thank you for taking the time to make a graphic to help explain things!

Chris

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

* Re: Guix vs GuixSD
  2016-03-07  6:57   ` Chris Marusich
@ 2016-03-07 22:53     ` myglc2
  2016-03-08  7:34       ` Chris Marusich
  0 siblings, 1 reply; 14+ messages in thread
From: myglc2 @ 2016-03-07 22:53 UTC (permalink / raw)
  To: guix-devel

Chris Marusich <cmmarusich@gmail.com> writes:

> myglc2 <myglc2@gmail.com> writes:
>
> Everyone loves pictures! Here are my thoughts about the graphic:
>
> * What do the different colors mean? It is not clear to me what red,
>   blue, and gray mean. I see that some of the boxes are grouped by
>   color, but I don't see the pattern.

- blue: "user scope" things over which the user has control.

- pink: "system scope" components controlled by the Guix admin.

- grey: "system scope" components controlled by Debian admin (who may
        be different from the Guix admin)

Note: To keep it simple I omitted the Debian apt package manager.

>   The same question applies to the round corners vs. sharp corners. If
>   there is no discernible pattern, maybe they should look more
>   similar.

- square: built package 
- round: actor or active process

> * Why is the "rpc" arrow drawn using dashed lines, but all other arrows
>   are drawn using solid lines? I think you can just use solid lines in
>   all cases to reduce cognitive noise.

You may be right but I was thinking that rpc is different than the
others which are more like data flow. Actually I am thinking of making
profile lines dotted too. What would you think of that?

> * Guix Hydra: This graphic makes hydra look special. But can't this role
>   be filled by anyone with a server who has built and published packages
>   (e.g., with guix publish)?  Hydra is just the default place from which
>   substitues are downloaded. Perhaps we can rename this to something
>   like "substitutes publisher" to reflect the decentralized architecture
>   of guix, which is one of its great features.

I agree with your points. But I am trying to keep it simple enough to be
understood without a lot of explanation. So I tied to use specific
examples rather than Guix concepts and capabilities.

> * Guix Hydra: consider replacing "prebuilt package" with "substitutes"
>   or "binary substitutes", so that it matches the terminology used in
>   other parts of the manual.

I went back and forth on this. "substitutes" requires explanation but I
think anyone will understand a "prebuilt package".

> * Guix build daemon: consider calling this simply the "guix daemon".

At first I did. Then I switched for the same reason as above.

> * GNU Guix Binary Install on Debian: consider removing the word
>   "binary". I don't think it adds any clarity here, especially because
>   you can build Guix from source on Debian.

I wanted to use a specific installation example. I thought that the
majority of installs on "foreign systems" would be binary so I used
that. Other possibilities:

- "GNU Guix installed on Debian (your suggestion)
- "GNU Guix installed on Debian from source or binary"
- "GNU Guix installed on GNU/Linux distribution"

> * GNU GuixSD Native Install: consider calling this the "GNU Guix System
>   Distribution (GuixSD)" to match the terminology used in the manual. I
>   don't think that using the word "native" adds any clarity here.

You and I know what GuixSD means but I want a noobe to understand that
GuixSD is all that is needed on the hardware. How about 'GNU GuixSD
installed directly to computer hardware" ?

> * GNU GuixSD Native Install: To make the commentary for the arrow
>   pointing to "system packages" match the the commentary for the arrow
>   in "GNU Guix Binary Install on Debian" pointing to "Debian
>   packages,"

I made these different because I am trying to show that Guix lets you
manage a system profile as opposed to "whatever is currently in
/usr/bin" to set the stage for talking about generations.

>   consider using a specific common program name as the example. For
>   instance, use "/usr/bin/sh" (or whatever the path is on Debian) and
>   "/run/current-system/profile/bin/sh".

I was trying to suggest the concepts of system profile, user profile,
and active guix version. So I used guix links rather than specific exe
locations.  Maybe the symbolic links should be replaced with labels that
are less guix-centric?

>   Currently, the Debian example uses the "/usr/bin" directory, while
>   the GuixSD example uses a conceptually different directory, so the
>   comparison is not as clear as it could be.

Could you say more about what you mean by "conceptually different
directory" ?

> * Consider replacing the single word "guix" with a phrase like "guix
>   tools and packages", since the contents of ~/.config/guix/latest, if
>   present, will be used for both command-line tools like "guix
>   package" as well as for finding package definitions.

How about "guix tools and package definitions" ?

> * One concept that is missing from this graphic is the idea that you can
>   add your own custom package definitions via the GUIX_PACKAGE_PATH
>   environment variable (or the --load-path option to commands such as
>   "guix build"). Adding this concept to the graphic may help users more
>   quickly realize the freedom they have for hooking up their own package
>   definitions into the Guix system, which is not as easy to do using
>   other package managers. What do you think? Can it be added without
>   cluttering it up too much?

I agree this would be great to show in a diagram. How about a separate
diagram? It would would only need to show one machine running Guix. So
the additional complexity will be offset by removing 3 machines.

> * Consider replacing "Debian" with "foreign distribution" to keep the
>   graphic sufficiently generic.

I used Debian because everyone knows what it is whereas "foreign
distribution" is "guix centric" and would have to be explained.

> * "Guix system services": consider renaming "Guix" to "GuixSD".

One issue with "GuixSD" is that GuixSD does not exist independently of
Guix, e.g., you can not install Guix without getting GuixSD tools and
packages. FWIW, thinking that these were separate caused a lot of
confusion for me in the first few weeks of using GuixSD.

From a Guix-centric point of view, whether your system is running "Guix
system services" or "Debian system services" only depends on whether you
have gotten around to running 'guix system init'. This is actually an
incredibly powerful and, so far, "not much talked about" feature of
Guix. But untill we know how we want to present this feature to the
world, I think we should go easy on pushing the idea that Guix and
GuixSD are so separate.

>   Also, I wonder if including this box here will make people think
>   that GuixSD services are basically the same as other services
>   launched by init systems like systemd in distros like Debian on
>   startup.

AIUI they are.

>   Case in point: where does the "operating-system-etc-service" fit in?
>   Does it have a Debian analogue? I'm not sure. Maybe this is OK
>   as-is.

Not qualified to say. Could someone that understands please comment?

>
> Thank you for taking the time to make a graphic to help explain things!
>
> Chris

Thank you for the constructive comments. Once I know specifically where
the diagram will be used I will adjust some of these things. At that
point I will revisit your comments and may have more questions :-)

- George

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

* Re: Guix vs GuixSD
  2016-03-07 22:53     ` myglc2
@ 2016-03-08  7:34       ` Chris Marusich
  2016-03-08 17:58         ` myglc2
  0 siblings, 1 reply; 14+ messages in thread
From: Chris Marusich @ 2016-03-08  7:34 UTC (permalink / raw)
  To: myglc2; +Cc: guix-devel

myglc2 <myglc2@gmail.com> writes:

> You may be right but I was thinking that rpc is different than the
> others which are more like data flow. Actually I am thinking of making
> profile lines dotted too. What would you think of that?

Unless the distinction is explained in a legend, I think this just
serves to distract. I can't speak for others, but the pattern was not
obvious to me.

>> * Guix Hydra: This graphic makes hydra look special. But can't this role
>>   be filled by anyone with a server who has built and published packages
>>   (e.g., with guix publish)?  Hydra is just the default place from which
>>   substitues are downloaded. Perhaps we can rename this to something
>>   like "substitutes publisher" to reflect the decentralized architecture
>>   of guix, which is one of its great features.
>
> I agree with your points. But I am trying to keep it simple enough to be
> understood without a lot of explanation. So I tied to use specific
> examples rather than Guix concepts and capabilities.

That's fair. A graphic can only say so much.

>> * Guix Hydra: consider replacing "prebuilt package" with "substitutes"
>>   or "binary substitutes", so that it matches the terminology used in
>>   other parts of the manual.
>
> I went back and forth on this. "substitutes" requires explanation but I
> think anyone will understand a "prebuilt package".

It's probably fine to use "prebuilt package" if you feel it will be
clearer. Same for "guix build daemon".

>> * GNU Guix Binary Install on Debian: consider removing the word
>>   "binary". I don't think it adds any clarity here, especially because
>>   you can build Guix from source on Debian.
>
> I wanted to use a specific installation example. I thought that the
> majority of installs on "foreign systems" would be binary so I used
> that. Other possibilities:
>
> - "GNU Guix installed on Debian (your suggestion)
> - "GNU Guix installed on Debian from source or binary"
> - "GNU Guix installed on GNU/Linux distribution"

I don't have a strong opinion between any of those alternatives, so
whatever you think is clear seems fine to me.

>> * GNU GuixSD Native Install: consider calling this the "GNU Guix System
>>   Distribution (GuixSD)" to match the terminology used in the manual. I
>>   don't think that using the word "native" adds any clarity here.
>
> You and I know what GuixSD means but I want a noobe to understand that
> GuixSD is all that is needed on the hardware. How about 'GNU GuixSD
> installed directly to computer hardware" ?

I suppose I like "native" better than the longer alternative, but I
still think that "system distribution" is a better alternative, since
I think it's pretty clear that it's a full system installation.

>>   Currently, the Debian example uses the "/usr/bin" directory, while
>>   the GuixSD example uses a conceptually different directory, so the
>>   comparison is not as clear as it could be.
>
> Could you say more about what you mean by "conceptually different
> directory" ?

I mean that the /usr/bin is analogous to the
/run/current-system/profile/bin directory (it's where a certain group of
executables are installed), but the /run/current-system/profile
directory is not analogous to the /usr/bin directory. The former
represents a Guix profile, while the latter represents only "the
directory to which a certain group of executables are installed." The
Guix profile is much different than the /usr/bin directory, but the bin
directory in your Guix profile does serve a similar purpose as the
/usr/bin directory.

>> * Consider replacing the single word "guix" with a phrase like "guix
>>   tools and packages", since the contents of ~/.config/guix/latest, if
>>   present, will be used for both command-line tools like "guix
>>   package" as well as for finding package definitions.
>
> How about "guix tools and package definitions" ?

On second thought, that's kind of a mouthful. Maybe "guix" is better
because it is more succinct, especially if we do not include mention of
GUIX_PACKAGE_PATH. Perhaps it's fine to group it all under the "guix"
label like you did originally.

>> * One concept that is missing from this graphic is the idea that you can
>>   add your own custom package definitions via the GUIX_PACKAGE_PATH
>>   environment variable (or the --load-path option to commands such as
>>   "guix build"). Adding this concept to the graphic may help users more
>>   quickly realize the freedom they have for hooking up their own package
>>   definitions into the Guix system, which is not as easy to do using
>>   other package managers. What do you think? Can it be added without
>>   cluttering it up too much?
>
> I agree this would be great to show in a diagram. How about a separate
> diagram? It would would only need to show one machine running Guix. So
> the additional complexity will be offset by removing 3 machines.

That might be helpful. It's a pretty simple concept, so I'm not sure it
warrants its own graphic, but if you have an idea for presenting the
different ways you can discover package definitions in a graphic, I'd be
happy to take a peek at it.

>> * Consider replacing "Debian" with "foreign distribution" to keep the
>>   graphic sufficiently generic.
>
> I used Debian because everyone knows what it is whereas "foreign
> distribution" is "guix centric" and would have to be explained.

That seems fair; I just thought we'd prefer to avoid mentioning specific
distributions to keep the manual generic.

>> * "Guix system services": consider renaming "Guix" to "GuixSD".
>
> One issue with "GuixSD" is that GuixSD does not exist independently of
> Guix, e.g., you can not install Guix without getting GuixSD tools and
> packages. FWIW, thinking that these were separate caused a lot of
> confusion for me in the first few weeks of using GuixSD.
>
> From a Guix-centric point of view, whether your system is running "Guix
> system services" or "Debian system services" only depends on whether you
> have gotten around to running 'guix system init'. This is actually an
> incredibly powerful and, so far, "not much talked about" feature of
> Guix. But untill we know how we want to present this feature to the
> world, I think we should go easy on pushing the idea that Guix and
> GuixSD are so separate.

Since I haven't run Guix on a foreign distro yet, I might not understand
this point as well as you do. Are you saying that you can run "Guix
system services" on Debian at startup if you run "guix system init"?

Chris

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

* Re: Guix vs GuixSD
  2016-03-08  7:34       ` Chris Marusich
@ 2016-03-08 17:58         ` myglc2
  2016-03-25 21:47           ` myglc2
  0 siblings, 1 reply; 14+ messages in thread
From: myglc2 @ 2016-03-08 17:58 UTC (permalink / raw)
  To: guix-devel

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

Chris Marusich <cmmarusich@gmail.com> writes:

[...]

Thank you for the helpful comments. I have revised the diagram
accordingly. Please let me know if I missed something.

>>> * "Guix system services": consider renaming "Guix" to "GuixSD".
>>
>> One issue with "GuixSD" is that GuixSD does not exist independently of
>> Guix, e.g., you can not install Guix without getting GuixSD tools and
>> packages. FWIW, thinking that these were separate caused a lot of
>> confusion for me in the first few weeks of using GuixSD.
>>
>> From a Guix-centric point of view, whether your system is running "Guix
>> system services" or "Debian system services" only depends on whether you
>> have gotten around to running 'guix system init'. This is actually an
>> incredibly powerful and, so far, "not much talked about" feature of
>> Guix. But untill we know how we want to present this feature to the
>> world, I think we should go easy on pushing the idea that Guix and
>> GuixSD are so separate.
>
> Since I haven't run Guix on a foreign distro yet, I might not understand
> this point as well as you do. Are you saying that you can run "Guix
> system services" on Debian at startup if you run "guix system init"?

I am saying you can "upgrade" your computer from, say, Guix on Debian to
GuixSD by doing ...

     mount /dev/sdX /mnt
     guix system init /mnt/etc/config.scm /mnt

... where /dev/sdX is a new system disk. With more complicated maneuvers
you can no doubt convert an existing system disk.

- George
 

[-- Attachment #2: guixvssd2.png --]
[-- Type: image/png, Size: 64926 bytes --]

[-- Attachment #3: guixvssd2.dot --]
[-- Type: application/octet-stream, Size: 3175 bytes --]

// GNU Guix on Debian vs GuixSD
digraph G {
	compound=true
	size="12,12"
	edge [fontname = helvetica]
	graph [fontname = helvetica]
	node  [fontname = helvetica]
	{ node [shape=box style = filled fillcolor="white" color = transparent]
		pkgsource [label = "Source"]
		substitutes [label = "Prebuilt\nPackage"]
	}
	// guix on Debian
	{ node [shape=box style = filled fillcolor=pink color = transparent]
		dpkgs [label = "Debian packages" fillcolor=grey]
	}
	{ node [shape=box style ="filled,rounded" fillcolor=pink color = transparent]
		guixd2 [label = "Guix build daemon"]
		debs [label = "Debian system services" fillcolor=grey]
	}
	{ node [shape=box style ="filled,rounded" fillcolor=lightblue color = transparent]
		duser [label = "user"]
		guix [label="guix"]
	}
	{ node [shape=box style ="filled" fillcolor=lightblue color = transparent]
		du1pkgs [label = "user packages"]
	}
	subgraph cluster_guixdeb {
		label = "GNU Guix Installed on Debian"
		labelloc = "t"
		style = filled fillcolor= azure2 color = transparent
		duser -> dpkgs  [ label = "/usr/bin" ]
		duser -> guix  [ label = " ~/.config/guix/latest  " ]
		duser -> du1pkgs  [ label = " ~/.guix-profile  " ]
		subgraph cluster_debstore {
			label = "Guix Store /gnu/store"
			labelloc = "b"
			style = filled fillcolor= tan color = transparent
			du1pkgs
			guix
		}
		{ rank=same debs -> guixd2 [style=invis] }
		du1pkgs -> guixd2  [dir = back ltail=cluster_debstore ]
	}
	guix -> guixd2
	// source & hydra
	subgraph cluster_pkgsource {
		label = "Developer"
		labelloc = "t"
		style = filled fillcolor= azure2 color = transparent
		pkgsource
	}
	subgraph cluster_hydra {
		label = "Guix Hydra"
		style = filled fillcolor= azure2 color = transparent
		substitutes
	}
	// guixSD
	{ node [shape=box style = filled fillcolor=pink color = transparent]
		spkgs [label = "system packages"]
	}
	{ node [shape=box style ="filled,rounded" fillcolor=pink color = transparent]
		guixd [label = "Guix build daemon"]
		guixs [label = "Guix system services"]
	}
	{ node [shape=box style ="filled,rounded" fillcolor=lightblue color = transparent]
		user [label = "user"]
		guix2 [label="guix"]
	}
	{ node [shape=box style ="filled" fillcolor=lightblue color = transparent]
		u1pkgs [label = "user packages"]
	}
	subgraph cluster_guixSD {
		label = "GNU Guix System Distribution (GuixSD)"
		labelloc = "t"
		style = filled fillcolor= azure2 color = transparent
		user -> guix2 [ label = " ~/.config/guix/latest  " ]
		user -> u1pkgs  [ label = " ~/.guix-profile  " ]
		user -> spkgs [ label = " /run/current-system/profile/bin  "]
		subgraph cluster_guixstore {
			label = "Guix Store /gnu/store"
			labelloc = "b"
			style = filled fillcolor= tan color = transparent
			guix2
			u1pkgs
			spkgs
		}
		u1pkgs -> guixd  [dir = back ltail=cluster_guixstore ]
		{ rank=same guixd -> guixs [style=invis] }
	}
	guix2 -> guixd
	// source & hydra & guix & guixSD connections
	pkgsource -> substitutes [lhead=cluster_hydra ltail=cluster_pkgsource]
	pkgsource -> guixd [ltail=cluster_pkgsource]
	substitutes -> guixd [ltail=cluster_hydra]
	pkgsource -> guixd2 [ltail=cluster_pkgsource]
	substitutes -> guixd2 [ltail=cluster_hydra]
}

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

* Re: Guix vs GuixSD
  2016-03-08 17:58         ` myglc2
@ 2016-03-25 21:47           ` myglc2
  0 siblings, 0 replies; 14+ messages in thread
From: myglc2 @ 2016-03-25 21:47 UTC (permalink / raw)
  To: guix-devel

myglc2 <myglc2@gmail.com> writes:

> Chris Marusich <cmmarusich@gmail.com> writes:
>
> [...]
>
> Thank you for the helpful comments. I have revised the diagram
> accordingly. Please let me know if I missed something.
>
[...]

Hey Chris,

I added this diagram to the doc introduction, referred to our
discussions to inform further simplification, revising the flow of the
introduction to be sympathetic. Submitted as a patch:

http://lists.gnu.org/archive/html/guix-devel/2016-03/msg00674.html

Should I have have made you a co-author? :-|

Anyway, I would be very interested in your comments ;)

Best - George

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

end of thread, other threads:[~2016-03-25 21:47 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-15  0:22 Guix vs GuixSD myglc2
2016-02-15  1:05 ` Chris Marusich
2016-02-15 17:37   ` myglc2
2016-02-16  3:26     ` Chris Marusich
2016-02-16  9:24       ` Jookia
2016-02-16  9:41         ` Chris Marusich
2016-03-05  1:59 ` myglc2
2016-03-06 13:53   ` Ludovic Courtès
2016-03-06 15:37     ` myglc2
2016-03-07  6:57   ` Chris Marusich
2016-03-07 22:53     ` myglc2
2016-03-08  7:34       ` Chris Marusich
2016-03-08 17:58         ` myglc2
2016-03-25 21:47           ` myglc2

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).