is nixos considered immutable or mutable? kind of has characteristics of both.
Linux
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
nixos and guix are immutable and two of the only immutable distros I like
I'd argue it's closer to a mutable distro than an immutable one.
Nixos tends to lean on the term reproducible instead of immutable, because you can have settings (e.g files in /etc & ~/.config) changed outside of nix's purview, it just won't be reproducible and may be overwritten by nix.
You can build an 'immutable' environment on nix, but rather than storing changes as transactions like rpm-ostree, it'll modify path in /nix/store and symlink it. Sure, you can store the internal representation of those changes in a git repo, but that is not the same thing as the changes themselves; if the nixpkgs implementation of a config option changes, the translation on your machine does too.
Nixos tends to lean on the term reproducible instead of immutable, because you can have settings (e.g files in /etc & ~/.config) changed outside of nix's purview, it just won't be reproducible and may be overwritten by nix.
Interesting. If possible, could you more explicitly draw comparisons on how this isn't quite the same over on say Fedora Atomic? Like, sure changes of /etc
are (at least by default) being kept track of. But you indeed can change it. libostree
doesn't even care what you do in your home folder. Thus, changes to e.g. ~/.config
(and everything else in /var
^[1]^) are kept nowhere else by default.
- Which happens to be more crowded than on other distros as folders like
/opt
are actually found here as well.
I don't mind flatpaks in a pinch, but having to use them for literally every app on my computer is an unreasonable amount of bloat.
N I x o s
Then you have NixOS, which is declarative, and fairly immutable.
You don't have to reboot to make changes, but you can't just run unlinked binaries either.
You can't do things like edit your hosts table or modify the FS for cron jobs. The application store is unwritable, but you can sync new apps into it .
You have to make changes to the config file and run a rebuild as root.
I think it's good if you have a ton of storage and want to set it and forget it. For me, immutable depresses me. I came to Linux for the tinkering and the ability to do what I please to my system, not to be restricted. That's just me, though. For handhelds/strictly gaming machine (a Steam machine for example)? I think immutable is the perfect fit for it.
For my needs, I've build a static system with buildroot for a pi zero. No updates, no modifications on the system, no remote access. Some directories are in tempfs, and after a reboot the system is fresh again. when needed, I removed the sd card and copy a new image
I use this board for a pulseaudio/mpd player, it's not intended for a desktop usage, but I'm happy beiing able to configure a system like this one. For me, there is no maintenance, and this is exactly what I wanted
I love building my own uBlue image. Tinkering is done in toolbox containers, definite changes are baked into the image. Completely custom (to me) and when you get it right it will just work anywhere. If I would brick my PC/storage I can just boot up another and restore my (back-upped) home dir with very little effort.
I'm using Bluefin and overall it's great. However, there are some unique issues due to immutability and flatpak.
- It's more difficult to utilize a NAS. For example, on something like Mint, I can open Proton Drive on Firefox, and I can use FF to upload files from my NAS to PD.
On Bluefin, I can access my NAS and all files using the Files app, but not using FF, and I cannot accomplish the above task in the same way. Firefox cannot fully access my NAS, and I have not figured out how to make it work. I've played around with Flatseal, but no dice. Instead, I need to use Files to download the files from my NAS to a local folder, and then I can use Firefox to upload to PD from that local folder. I'm guessing there is a better way, but I haven't figured it out yet.
EDIT: This thread motivated me to try and fix this issue. Installing Firefox using rpm-ostree worked. I expected it would, though I am still hoping to figure this out using the Flatpak version at some point. I also tried using Distrobox/Box Buddy to create a Fedora 40 box and install Firefox there. That version of Firefox couldn't even see my NAS at all (unlike the Flatpak which could see my NAS but couldn't upload files from the NAS to Proton). This was my first time ever using Distrobox. I thought it was super cool to see it in action and get a working Firefox, even though I couldn't use it to access my NAS as hoped.
- I would desperately like to use a screenshot tool with built-in annotations, but I haven't found a flatpak that works. As I understand, it might have something to do with flatpak combined with Wayland and/or my Nvidia GPU.
So while most things "just work," there are some problems. Planning to stick with it and keep learning. I do love the concept and I'm overall very happy with everything.
I'm much more comfortable trying things that I'm not sure will (or expect not to) work. I can just blast the toolbox or whatever afterwards.
Compare to some of my earlier forays into Linux, where I'd do some nonsense and then attempts to remove said nonsense would break some other load-bearing part of the OS.
I'm not really sure how the upsides of immutable distros work. I've been using linux for a long time and I'm not an expert but I've learned bits of things here and there.
I recently bought a steamdeck and it's running an immutable distro. I don't really know how to use software that's installed via flatpak because it's weird.
I have a game installed that runs badly (unplayable for me) through proton. I can launch it through q4wine if I switch the steamdeck into "desktop mode" and it runs much better.
If it wasn't an immutable distro I could pretty easily make a shell script that launches the game through wine. Then I could add that shell script as a non steam game and it would (I think) run well, and I'd be able to launch it from the non desktop side of steam OS that is a lot more streamlined.
There is something comforting to me about immutable distros though.
I feel like I don't remember half the shit I have installed on my computers. If I wanted to start cutting things out I don't know where I'd start. But with flatpaks I get the sense I could probably just wipe anything I don't use out of the flatpak directory and I probably wouldn't break anything.
I'm fairly certain you could still run that shell script on steamOS? I don't understand why an immutable distro would keep you from doing that. It's essentially what Lutris and Heroic Games launcher do.
I have investigated the idea and came to the conclusion that immutable distros are essentially a research project. They attempt to advance the state-of-art a slight bit but the cost is currently too great.
Perhaps somebody will some day create something that's worth switching to. But I don't think that has happened yet, or is happening with any of the current distros. Silverblue might become that with enough polish, but I feel that to get that amount of polish, they would have to make Silverblue the 1st class citizen, i.e. the default install of Fedora.
I really appreciate rarely seeing the message "update complete, please reboot now". I would consider myself on the tech savvy side though.
I used an immutable fedora on my surface pro 4, I wanted to shoot myself in the face every time I had to install anything. I'm good on that for the rest of my natural life.
what does the community think of it?
Everyone has their own opinion, personally I think they're a great idea and have lots of great applications. But just like rolling vs non-rolling release it's a personal and application dependant choice.
Do the downsides outweigh the benefits or vice versa?
Again, depends, for my personal computer I wouldn't use it because I think it could get complicated to get specific things to work, but for closed hardware like the Deck or even a fairly stable desktop used as a gaming system it's perfect.
Could this help Linux reach more mainstream audiences?
It could, it can also hamper it because people might start to try solutions that only work until next boot and not understanding why, or having problems getting some special hardware to work (more than it would be a mutable distro). But there is a great counter to this which is that once it's running it will be very difficult to break by user error.
At the end of the day I think it's a cool technology but that people should know what they're getting into, just like when choosing rolling vs non-rolling distro, it's not about what's better, but what suits your needs best.
Since the idea is that the "root partition" is immutable, serious question:
How do you fix a hardware config issue or a distro packaging / provision issue in an immutable distro?
Several times in my Linux history I've found that, for example, I need to remove package-provided files from the ALSA files in /usr/share/alsa
in order for the setup to work with my particular chipset (which has a hardware bug). Other times, I've found that even if I set up a custom .XCompose
file in my $HOME, some applications insist on reading the Compose files in /usr/share/X11/locale
instead, which means I need to be able to edit or remove those files. In order to add custom themes, I need to be able to add them to /usr/share/{icons,themes}
, since replicating those themes for each $HOME in the system is a notorious waste of space and not all applications seem to respect /usr/local/share
. Etc.
Unless I'm mistaken on how immutable systems work, I'm not sure immutable systems are really useful to someone who actually wants to or needs to power user Linux, or customize past the "branding locking" that environments like Gnome have been aiming for for like a decade.