Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
GNU Guix 1.0.1 Released (gnu.org)
75 points by mbakke on May 20, 2019 | hide | past | favorite | 32 comments


Without a lot of thought or research I have no idea what Guix is! Even the website - https://www.gnu.org/software/guix/ - offers the reader no real clue about what it is.. Is it a unix distribution, linux distribution, graphics environment, window manager, ux app development framework - who knows! :-) ... please everyone remember to write decent copy for your projects - you have to market open source too.


At the very top of that page:

> Guix is an advanced distribution of the GNU operating system developed by the GNU Project—which respects the freedom of computer users.

On the about page:

> The GNU Guix package and system manager is a free software project developed by volunteers around the world under the umbrella of the GNU Project.

>

> Guix System is an advanced distribution of the GNU operating system. It uses the Linux-libre kernel, and support for the Hurd is being worked on. As a GNU distribution, it is committed to respecting and enhancing the freedom of its users. As such, it adheres to the GNU Free System Distribution Guidelines.

So "Guix" is short for "Guix System", which is a distribution of linux. There's also the "Guix package manager".

Honest question: what part of the above portions of copy fail to convey what Guix is?


I think there is a lot unclear there, or left to be desired.

For instance does advanced mean for advanced users, beginners need not apply, or that it is in advance of a real release and is sort of an alpha?

I have a macbook, can I run Guix on there? Or is this part of GNU Hurd (something that I heard about on /. 15 years ago)? What is a cool thing I can do with Guix, besides have my freedom respected? Do apt or Homebrew not respect that freedom?

I would love someone to break Guix down for me or point me to the best description because there are tantalizing hints of a cool thing but I never get a totally clear picture.


I haven't researched Guix specifically, but if you want a package manager for macOS with these features, Nix definitely supports macOS (Nix is the inspiration for Guix). Even if Guix is supported on macOS, I'm not sure offhand if there's any compelling reason to use Guix over Nix.

As near as I can tell, the only reason Guix even exists is because the authors don't like that Nix has a custom language and prefer Guile Scheme instead.

Nix: https://nixos.org/nix/


Could the down voters explain their votes?


Advanced meaning powerful with lots of features and functionality. There's a good writeup on it here[1].

[1] https://ambrevar.xyz/guix-advance/index.html


Thanks for that great link!


> What is a cool thing I can do with Guix, besides have my freedom respected? Do apt or Homebrew not respect that freedom?

In the second bullet point on the home page, they tell you something cool:

> Guix supports transactional upgrades and roll-backs, unprivileged package management, and more. When used as a standalone distribution, Guix supports declarative system configuration for transparent and reproducible operating systems.

Transactional upgrades and roll-backs are pretty great. If you're not using Guix (or NixOS -- wherever I mention Guix, you can also substitute NixOS), you absolutely don't have that. To be clear, on whatever OS you're using you might have some means of recovering if an upgrade goes bad, but that's not the same as a transactional upgrade/roll-back. On Guix, when you update the packages installed on your system (whether removal, installing a new package, or changing the version of an already installed package), that happens atomically and transactionally -- if you start a system upgrade involving, say, 1000 packages, all of those 1000 packages update instantaneously at the same time.

So let's say you just did a system update, but now you want to rollback the package changes. That's both simple and guaranteed to work; the way system packages and configuration is updated is this: one symlink is changed (if you're not familiar with symlinks, you can think of them like shortcuts from Windows, or see the link at the bottom of this reply). That's it -- 1000 packages rolled back with one symlink change. Nearly instantaneous. No copying/replacing files around, triggering scripts to try to rewrite e.g. systemd configs, literally just one symlink change.

Now let's say you were mistaken about your need to roll-back, and now you want to roll-forward again: you switch that symlink again, and now you're instantaneously rolled-forward.

Admittedly, their home page for the project doesn't say anything about this symlink magic, but then you can't fault them: it's an implementation detail. The homepage should be like a sales pitch, not a document describing their architecture. The only reason I mention it is because I hope it drives home that second bullet point from their page by providing a bit of intuition of how this works:

~~~

Let's say you have a directory (let's call it "A") with some files, and you want to "update" those files atomically and transactionally. The naive thing to do would be to write to those files directly -- but then how would that be atomic and transactional? Writing to a file inherently is neither, let alone multiple files at once.

So let's not update those files in place. Let's instead create a new directory "A2" with the new file contents we desire. Now a new problem arises -- there's no way on Linux/macOS/Windows/whatever to outright replace one directory with another. I mean, sure, we could rename or delete A and then rename A2 to A, but for a brief window of time any program that tried to read a file from A would fail, so that's not atomic.

So let's reconsider part of the problem statement: we don't really care that the name "A" directly denotes a directory, we just care that a path like "A/some_file" resolves correctly. Given that insight, let's rename A to A1, and make a new symlink named "A" and point it at A1.

So quick recap, here's where we stand as our initial state:

* A1 is a directory with some files.

* A is a symlink pointing at A1.

Now let's do our update. The first half of the update process: create directory A2 with the updated contents. Now all we need to do to atomically update the files available at the path A is: update the symlink A to point at directory A2 (this is atomic on all OSes I'm aware of).

To roll-back, do the reverse.

How do we make this transactional? Easy. If we had encountered a problem while creating directory A2 and its contents, we would never switch the symlink A to point to A2, so the effective changes are guaranteed to be all-or-nothing.

~~~

Guix system updates are exactly as above, but on a system-wide level. Without getting into these implementation details, their home page precisely and concisely conveys the immediate benefit of the (admittedly verbose) logic above: you get transactional updates and roll-backs, and while I haven't gone into the particulars of how this is made possible on a system-wide scale, I hope you can see that when they say "transactional updates and roll-backs", they really, really do mean it. It's not hyperbole or empty marketing speak.

Now it's possible that you don't care about the safety afforded by transactional updates (or maybe you think you already have transactional updates, though you're mistaken if you think that), or the ability to handle system configuration with a Scheme EDSL, or the copy-left licensing, but that would just mean that you're not the target audience -- not that they failed to articulate these three selling points.

Disclaimer: I don't use or contribute to Guix, though I do use and contribute to NixOS.

Links:

https://en.wikipedia.org/wiki/Symbolic_link


no mention of nix... surprising


While it might not be in the first paragraphs that the user quoted, Guix doesn’t make a secret of where it came from.


Maybe if you know what the "GNU operating system" is, it's a great description.

As for me, I had to keep reading until I saw "Linux" to go "oh ok, it's a Linux distro and they're being a little weird about it because it's GNU/Linux, nevermind it's GNU. It's just GNU."


You've presented yourself as a great example of the unfortunate misunderstanding that has come from people mistakenly calling GNU+Linux distributions Linux distributions. You were not able to recognize that this was a GNU distribution when then they called it GNU, until they mentioned Linux which is one thing Guix distributes. Then you suddenly (mis)understood what it was, and proceeded to blame the author for confusing you by speaking correctly instead of sharing the same misunderstanding.


Sure, I knew exactly what I was doing by daring to use the popular parlance rather than the GNU/preferred nomenclature. Being labelled as "unfortunate" is certainly the least that I deserve for that transgression.

However, at no point did I blame anybody. Everybody here probably has very good reasons for doing what they do. The parent comment asked "what part of the above portions of copy fail to convey what Guix is?", and rather than equivocating around that profound mystery, I answered truthfully.

It's however perfectly acceptable to dismiss me and my comment and assert that there is nothing wrong with that website copy. For example, it may be doing a great job of self-selecting and separating the enlightened from the casuals.


They're not "being weird about it." It's explicitly not "a Linux distro" because they intend for the kernel to be just another freely interchangeable component (as is mentioned), although I suppose there might be some residual bitterness from their work constantly being called "Linux" or "a Linux distribution" as well.

This isn't unique to Guix System, either. Debian[0] refers to itself as "a free operating system (OS) for your computer" and doesn't even mention the term Linux on its home page, until you go to the about page[1], where it is mentioned (three paragraphs in!) that "Debian systems currently use the Linux kernel or the FreeBSD kernel." The term "distribution" doesn't even appear until the very end, where it is mentioned that "Debian was begun in August 1993 by Ian Murdock, as a new distribution which would be made openly, in the spirit of Linux and GNU."

Maybe, since the term "GNU distribution" is rather unorthodox, Guix System should just market itself as a free operating system, as Debian does.

[0] https://www.debian.org/

[1] https://www.debian.org/intro/about


It's similar to https://nixos.org/ but instead of using the Nix language, it uses GNU Guile to configure everything (Scheme). I think they actually were inspired to create it by NixOS. So to answer your question, it's an operating system.


Guix is a functional package manager, like Nix. Guix System is a distro built around it, like NixOS. You can run Guix on top of a "foreign" distro and enjoy most of its benefits. Partial upgrades, rollbacks, reproducible builds, etc.


The "About GNU Guix" section at the bottom of the post should shed some light...


Those release notes are some of the best written I've ever seen. Clear, concise, comprehensive. Gives a lot of confidence in the project going forward. Nice work.


Can someone please explain what replaces systemd in Guix?


Shepherd (not to be confused with Hurd). It's implemented in Guile Scheme too. See here: https://www.gnu.org/software/guix/manual/en/html_node/Servic...


Shepherd replaces systemd as the init system.


Wait, isn’t this a significant milestone? If I understand correctly GNU was formed originally to get an operating system out and this is their 1.0 release, something like 30 years later? I’m a capitalist, man of the right, and not a fan of RMS the public person but he’s been true to his principles and has changed the world. Congratulations, GNU team!

Also, it appears to be natively scriptable in Scheme, a Lisp variant. Pretty fun.

Hope champagne corks are popping in the GNU world.


This particular project is only 7 years old.

https://www.gnu.org/software/guix/blog/2019/gnu-guix-1.0.0-r...


Guix still uses Linux kernelby default. There is a GNU Hurd option but it is experimental.


It uses Linux-libre specifically. Notably it lacks nonfree blobs.


The milestone that marks GNU Guix 1.0 is their package manager I believe. At its core, this system still uses Linux as its kernel, so it's not the 'pure GNU' system that I believe you're describing. As it stands, GNU Hurd is still another 30 years away from completion (sadly). The GNU project's vision has been effectively realized with the Linux kernel, which itself is protected by the GNU GPL. GNU succeeded long ago, but this is their iteration of a free system with the Linux kernel.

I don't think capitalism and RMS' principles are mutually exclusive. RedHat was a big step towards proving this. One of my favorite games is open source (ToME), and I happily bought and paid for it. I'd happily pay for an open source, freedom-respecting operating system if my support was prioritized and didn't consist of canned answers from someone's clipboard. Closed, proprietary software has greatly benefited from many free software principles, albeit by strip mining the ever living crap out of them.


ToME is fantastic, GPL licensed, and you can play it on Guix. I can't see how to link directly, but search for "tome" on https://www.gnu.org/software/guix/packages/T/page/3/


> I’m a capitalist, man of the right

What does that mean, related to computing?


Some people's ideologies are so rigid that they must identify wrongthinkers before otherwise commenting on them, lest they be thought to have ideologically-incorrect cooties by other rigid ideologues.



What does it mean in the context of computing though?


It means he's not a fan of the GNU philosophy: https://www.gnu.org/philosophy/free-software-even-more-impor...




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: