VanillaOS: Immutable Ubuntu-Based Linux
vanillaos.org
vanillaos.org
* The installer lags unless you temporarily disable 3D acceleration until open-vm-tools are installed
* The Norwegian keyboard layout defaults to Dvorak, which I suspect isn't the most common one ;)
* The default installer resolution was a tiny 800x600. Click Activities and type Displays to get to the relevant settings.
Now for the more exciting stuff, like testing if Tailscale works out of the box.
I'm really looking for a dependable pseudo-desktop/server OS for the monolithic legacy box at home. In terms of immutable, NixOS is it right now, but tbh it's had enough random uptime issues as of late, I'm starting to doubt my decision. Though I still haven't narrowed it down to this machine as opposed to some network/routing/storage problem
OpenVMS for x86_64 should come out for the community in May ;)
However in the meantime, try FreeBSD.
I've been on it exclusively on my desktop and laptop for the past couple of months and have grown to like it a lot.
Sorry, our mistake. Several focus groups with Norwegians, left us assuming they thought in dvorak.
Will revert to qwerty.
I'm curious because I (an American) have been using Dvorak for longer than I'd ever used qwerty, so I would find this pretty interesting.
Dvorak being the default layout was a problem because it was completely hidden due to the low screen resolution.
I wasn't able to find any information on VanillaOS's support roadmap. Since the project's goal is to have stability of the underlying OS, it would be great if VanillaOS had an LTS-like support plan in mind.
It boots from a USB stick, loads system to a RAM disk, mounts configuration from a directory, and then hosts VM zones from ZFS datasets. The “root” system remains immutable.
To patch or upgrade, you just write a new system image to the USB stick and reboot. It’s great.
To skip the USB stick, you can do the whole thing over PXE.
After running a cluster on SmartOS for many years, moving back to Linux and installing the OS feels fragile, dirty, and weird.
PXE is its own hell, having local storage for the OS avoids some horror stories like "my whole cluster booted after a power outage and now PXE fails for everything".
Back in the Knoppix days it was first a novelty, and then a blessing that you had to boot from a CD-ROM, because it led to one amazing outcome:
Less tinkering.
Or rather - it split use from tinkering.
Systems today are designed around the principles of deferral and volatility. You can add or change anything at any time. The user has absolute freedom to tinker, but also the vendor of always-connected products has endless possibilities to update. The result is a mess of dissatisfaction and half-bakery. Nothing is ever finished or fully right. It also, maybe paradoxically, leads to systems that feel less under your control.
Systems like TinyCore and Live CD distros take a different approach that the OS is finished. You have two choices, take it or leave it.
Unless you are prepared to cross a non-trivial barrier to remix and update the non-volatile image, you are forced to just use what you have. That leads to more productivity because you adapt to the tool rather than constantly adapting the tool to you.
I like TinyCore because it's looking to a middle ground of baking immutable systems at key stage points and keeping changes separate from the immutable core. I can change the core if I want to, but rarely.
I see that as a separate prospect than "appliance platforms" like Android and a PhoneOS onto which you can only load "apps".
What ideas and favourite solutions do other's have for using immutability, or not liking it?
Well technically near every router and embedded device is "immutable", with usually only config partition being changed, and firmware update being just re-loading whole image.
Here is an overview of macOS 13's layout.
For my own files I have a partition which I use exclusively for data. When I want to make changes to the system I have a boot option to disable overlayfs which I use once every few months for updates.
In the NixOS community, the idea of "reset all system state on boot" is called "impermanence".
For websites the cookies tend to expire once every few months so I'll boot back to upgrade mode and refresh my log-ins everywhere at once every few months at the same time as I install my system updates.
You can also selectively copy some software's local data to your persistent read-write disk partition and create a symbolic link in the original directory, that way this particular piece of software will be white-listed in a sense and always writable. But I haven't needed to do that.
My only issue has been google which has a weird cookie implementation, it throws cookie-mismatch errors all the time so I have to delete them and relog-in every day. If it were a big issue I'd make my firefox profile always writable as described above but I don't use google much.
Do you mean you'd have a read-only base system, and a remote layer on top so the application data is only persisted remotely?
It killed our USB stick in just days, though
It presents an ISO (using the rocker on the side as a selector) from its HDD as a bootable CDROM target, and still exposes the HDD/SSD as a separate target.
So, it is possible to boot what is an RO OS image, and use the HDD/SSD target as an overlay, but because it is not flash memory, the wear issue is far less of a problem.
And, since it is presenting ISO images as boot targets, it is possible to (relatively) easily test upgrades while keeping the overlays separate.
Too many writes?
ESXi on SD-Card's with the physical write-lock is pretty popular ;)
They once were, before the internet made software updates "easy". There was a time when software was released (and often embedded without any option for upgrade/modification).
But immutable (mostly correct and reliable) software is more expensive and takes longer to develop, so it is out of fashion. Instead we now push out alpha quality MVPs and depend on updates to resolve known and unknown unaddressed issues as well as promised by not delivered features.
To be a little fair to developers, the user expectations these days are 10x or more greater than they were pre-internet-update days. After all, we now carry "supercomputer" devices in our pockets which also make phone calls, and we expect features and integrations which previously were not even imagined.
Even cars are now becoming update dependent for features and bug fixes. This is approaching a breaking point, I think. It will likely happen; there will be regulation and/or revolt; there will be a return to write-once approaches.
Many of the thousands of dependencies in a given distro could file a new vulnerability overnight. Your immutable distro will need updating pronto.
I certainly hope so. I dread the day it becomes impractical to drive older, pre-bullshit cars.
Verticals like Senior Care I think would go for this over the current MSP managed systems.
They have high turn over and low tech investment, I've met ones that still use workgroups and shared workstations (single username/pass).
There is a market there potentially for the management companies that run the facilities
The hard/fun part is just figuring out a way to install and use the software you want without doing that, since that kind of defeats the purpose of using silverblue in the first place. In most cases, you can use a flatpak, a toolbox, or a container.
However, if you can't figure it out, there's no real harm in giving up and layering whatever you want.
This is just vastly untrue.
A bespoke tool will always be more productive than a one-size-fits-most tool, and thankfully with development tools the work/time of fitting your tool is marginal to the hours you work with it, and the effort is heavily front-loaded. After a few years you have a solid setup that only requires tiny amounts of polishing every few hundred hours.
So the real correct answer to whether bespoke or pre-configured tools are more efficient is “it depends”.
Others have noted the FOMO/paradox of choice issue, so I’ll list another: multi-context environments. I work in a highly collaborative environment where I need to share tools and sometimes whole machines. I rarely get to use the same configuration for any particular task. So bespoke, to me and many of my colleagues, means more stuff to learn. Standard options and configurations mean much higher levels of productivity.
Then the next semester I am denied the ability to take a parallel computing class because it was for graduate students only and the prof. would not accept a waiver even though the class was being taught on the cluster me and a buddy built.
That I still had root on.
So I added a script that would renice the prof.'s jobs to be as slow as possible.
BOFH moment :)
How naughty of you!
Two words. Unpatched vulnerabilities.
It’s a bit like iOS and android, the system is the same on all devices of the same model, there are just different configurations and different apps.
All I want is a Live CD like OS for safe browsing that has an actually usable firefox - i.e. has ad block and vertical tab extensions installed.
In the security world, an immutable system is an unpatchable system. If a 0-day is found in the system image, you can't fix it, you have to get a new image going. This causes wasted personnel-hours, wasted money, and some times wasted hardware if the image happens to be on a ROM-type of data storage. I've seen immutable systems on WORM HDDs. The people running those types of systems quickly got tired of having to do hardware replacements for every patch.
The point is in not making changes on the fly on live systems. You are perfectly able (and encouraged) to deploy new nodes with updated software and roll over the old nodes.
Sadly, because they inherently make it so hard to keep up to date with the latest version of proprietary software like nVidia. Or they don't provide support over a wide range of (desktop and embedded) architectures.
Often the best choice you can make is the distro that has most users, so you are sure that it will get the attention and support from third parties.
Here is an overview:
- https://github.com/koekeishiya/yabai/wiki/Installing-yabai-(... - https://github.com/koekeishiya/yabai/wiki/Disabling-System-I...
If part of your program's installation process is "reboot into recovery mode", I feel like you're working with an OS that isn't quite as malleable as we sometimes are led to believe it is. :D
(btw I use `yabai` and it is totally worth doing all these things...I wouldn't set it to auto-update, and I review every release carefully, but so far so good. It's a great WM for macOS!)
Funny because now, that's how both Android and iOS behave, with the difference that OS updates only come every other month and AB partitions making the installation process perceived as fast as only rebooting.
https://github.com/Vanilla-OS/ABRoot/ https://coreos.github.io/rpm-ostree/ https://github.com/ostreedev/ostree
My impression from the splash page is you're more encouraged to install packages to the base system. Silverblue only has that as the last resort (after flatpak, toolbox and podman).
From documentation, I'm not even sure how this is done. The only options for packages documented are platform-independent packages (Flatpak, etc) and apx (distrobox-based toolbox alternative).
rpm-ostree install google-chrome-stable vim mozilla-openh264 virt-manager libvirt
https://github.com/flathub/com.google.Chrome
Maybe. I'm more comfortable signing into my accounts using Chrome packaged by Google than by a third party. I should probably familiarise myself with the linked repo to show I'm worrying about nothing.
https://www.google.com/chrome/
But I get your point that if I'm enabling it through fedora's interface I'm already trusting more than just Google.
What I do want to know is what package format is best for my use case: I want latest version of Python and other packages, and I am on Ubuntu, I dont want a new OS or docker. No idea which would be ideal or the pros and cons of each.
(It also is where CoreOS got it from, before Red Hat bought them and the product largely disappeared, AFAICS.)
As such, I'd say it's an extensively field-tested and well-proven disk structure. :-)
From a whole filesystem perspective I think it's not accurate to call this immutable though, as you can presumably work around this with bind mounts that can be used to mutate (but not persist) any part of the read-only filesystem while the system is still running.
Actually, as a natural tinkerer, what I call the "NixOS seatbelts" (being able to pick any of the last N updates via GRUB to boot into) have saved me numerous times already. I no longer feel comfortable using any other Linux distro. The declarative config and per-project dev environments are cake as well (once you get past the Nix language, which is basically just "JSON-like, plus pure functions")
I would much rather just version my nginx config written in nginx config, and let Nix pull that up, or something like that. Then you get all the benefits of Nix (I think?) but my configuration is also readable for someone who doesn't know Nix. Plus I can use my existing knowledge (as well as the wealth of online available docs), instead of something obscure.
That being said, most services have an option to use verbatim configuration files[0] or fragments[1][2][3].
[0]: https://search.nixos.org/options?show=services.yggdrasil.con... [1]: https://search.nixos.org/options?show=services.nginx.config [2]: https://search.nixos.org/options?show=services.bind.extraCon... [3]: https://search.nixos.org/options?show=services.nginx.appendC...
This might sound glib, but it's a great idea for a simple workaround for users who want to use some other system to template their config files. Wouldn't take much boilerplate at all.
[0]: https://github.com/NixOS/nixpkgs/blob/nixos-22.11/nixos/modu...
If you like VanillaOS, you’d like https://docs.freebsd.org/en/articles/nanobsd/
In practice it never works well though: first immutable means far longer to update and these days updates are a continuous stream, secondly even if the system is really immutable the complete infra tend to be not, making the immutable part next to useless in reproducibility terms.
In modern terms a new concept born "idempotent" witch FORMALLY means "you can run it countless of time, it will works the same and do not even re-do already done steps, it ensure consistency of a system final state no matter the initial one". Such concept have more more practical applications, again in theory, but in practice it fail to be really idempotent beside trivial use cases. From mere Ansible Playbooks for an infra to NixOS idempotence is partially there but results tend to be not.
Long story short: IMVHO the road have a name DAMN SIMPLER DESIGN, simpler infra, as the sole way to keep anything working and easy to restore when it does not.
A bottomline: reproducibility for a server infra have some reasons, for desktops... Well... IMO it's a bit overrated in the era of "endpoint".
Can't imagine the HN responses if this was Windows marketing text :)
Correct me if I'm wrong, but don't they just mean they mount the root filesystem as read-only, and have a separate partition for /var and /tmp ?
That's a reasonable idea, although I'm not sure it merits an entire distribution. Is there anything else to Vanilla or is it just this?
> The GNOME Desktop is the perfect environment for your daily tasks
Maybe if you're a GNOME developer, and even then I kind of doubt it.
> designed to be a reliable
But it's based on ubuntu, which uses systemd, which is something not to be relied on, in many respects; see: https://www.without-systemd.org/wiki/index_php/Arguments_aga...