this post was submitted on 12 Nov 2023
83 points (96.6% liked)
Linux
46794 readers
1028 users here now
From Wikipedia, the free encyclopedia
Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).
Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.
Rules
- Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
- No misinformation
- No NSFW content
- No hate speech, bigotry, etc
Related Communities
Community icon by Alpár-Etele Méder, licensed under CC BY 3.0
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
I think NixOS is awesome, but it certainly doesn't offer "access to (basically) all Linux-capable software, no matter from what repo." - at least not natively. You can do that through containers, but you can do that with containers on any distro. Where it shines is declaring the complete system configuration (including installed programs and their configuration) in its config file (on file-based configuration, I wouldn't really consider blendos a viable competitor).
I would disagree. I feel like nixpkgs has pretty much everything, more so than any other distro in my experience. The differences in how NixOS work can make it a little weird to run something off the cuff, but steam-run has your back in those situations.
how well is it suited as a daily driver for dev work & playing games?
Well, for playing games I use the flatpak version of steam and it works OK.
For dev work, it's great overall. Especially its ability to create separate reproducible environments with whatever dependencies you need for every project. However, there are some tools (rare, but they exist) that don't work well with it, and if your dev work happens to need them, it can becomes a problem.
For day to day (i.e. web browsing), it works the same as anything, with one disadvantage: there is a disadvantage here: it downloads a lot more than other distros on update, and uses more disk space. The biggest difference between NixOS, and say Arch, is not how it behaves once it's up and running, but in how you configure it. Specifically, you have to invest a lot of time to learn how, and set up your system initially. But then reinstalls, and (some of) the maintenance, become easier.
why is that?
The way nix deals with packages is very different from most distros. If you install a newer version of a package, the older version just gets hidden, not removed. This makes it very easy to rollback or recover from errors, but it does mean you tend to use more space.
In regular FHS distros, an upgrade to libxyz can be done without an update to its dependants a, b and c. The libxyz.so is updated in-place and newly run processes of a, b and c will use the new shared object code.
In Nix' model, changing a dependency in any way changes all of its dependants too. The package a that depends on libxyz 1.0.0 is treated as entirely different from the otherwise same package a that depends on libxyz 1.0.1 or libxyz 1.0.0 with a patch applied/new dependency/patch applied to the compiler/anything.
Nix encodes everything that could in any way influence a package's content into that package's "version". That's the hash in every Nix store path (i.e.
/nix/store/5jlfqjgr34crcljr8r93kwg2rk5psj9a-bash-interactive-5.2-p15/bin/bash
). The version number in the end is just there to inform humans of a path's contents; as far as Nix is concerned, it's just an arbitrary name string.Therefore, any update to "core" dependencies requires a rebuild of all dependants. For very central core packages such as glibc, that means almost all packages in existence. Because those packages are "different" from the packages on your system without the update, you must download them all again and, because they have different hashes, they will be in separate paths in your Nix store.
This is what allows Nix to have parallel "installation" of any version of any package and roll back your entire config to a previous state because your entire system is treated as a "package" with the same semantics as described above.
Unless you have harsh data caps, extremely slow connections or are extremely tight on disk space, this isn't much of a concern though.
Additionally, you can always "garbage collect" old paths that are no longer referenced and Nix can deduplicate whole files that are 1:1 the same across the whole Nix store.
It’s the probably the best distro for dev work imo. Nix in general is really nice for development. Games work fine — you can just install steam or putrid or whatever, and you can run normal binaries with steam-run.
Sorry for my ignorance,
but why is blendOS not a viable competitor to NixOS?
To clarify, I was referring specifically to its ability to specify the full system configuration in its config file - not overall. But I haven't used blendos, and my impression is mostly from a quick look at their documentation. They have a snippet with sample configuration. There, they have a "Modules" section, but I couldn't find what modules are available, what options they have, how to configure them if we want to do something more complex than the available options.
Then containers are clearer: they have a list of installed apps, and then commands to bring them to the desired state (somewhat similar to a dockerfile). But even then, i imagine that if you have a more complex configuration, that's going to get clunkier.
Thanks, that makes sense.
Do you think the use of OCI containers/images is a mistake/bad choice from blendOS?
How is NixOS different?
No. It's probably the best way to run packages from Arch, Debian. Ubuntu, Fedora, and others, all on the same system.
NixOS simply doesn't tackle that problem, so it doesn't come with containers out of the box. If you want to run packages from other distros on NixOS, you'd probably need to manually configure the containers.
I feel like you're under the impression that the three distros, NixSO, blendos, and Vanilla OS, have similar goals. I don't know about Vanilla OS, but the main similarity between the other two is that they're both non-standard in some way.
But they're actually solving completely different problems: BlendOS wants to be a blend of different OSes, NixOS wants to have a reproducible, declarative configuration (declarative here means, you don't list a bunch of steps to reach your system state, but instead declare what that state is).
You can steam-run any Linux executable, so for those cases it's fine.
All the major software is already in Nixpkgs, there's just some holdouts still shipping .deb and .rpm files, though
And you can create package configs, but you can also do that for nearly every distro. So, yeah, that confuses me too... I'm not sure what OP was trying to say there.