this post was submitted on 19 Jan 2024
87 points (89.2% liked)

Linux

48224 readers
911 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

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
87
submitted 10 months ago* (last edited 10 months ago) by nickwitha_k@lemmy.sdf.org to c/linux@lemmy.ml
 

Hey folks! I'm getting a fresh laptop for the first time in about a decade (Framework 16) in a couple of months and am looking forward to doing some low-level tinkering both on the OS and hardware. I'm planning to convert into a "cyberdeck" with quick-release hinges for the screen since I usually use an HMD, built-in breadboard, and other hardware hacking fun.

On the OS, I'm planning to try NixOS as a baremetal hypervisor (KVM/QEMU) and run my "primary" OSes in VMs with hardware passthrough. If perf is horrible, I'll probably switch back to baremetal after a bit. But, I'm not likely going to be gaming on it so, I'm not likely to have much issue.

Once the hypervisor is working in a manner that I like, I should have an easy time backing up, rolling back, swapping out my "desktop" OS. I've been using Linux as my pretty much my only OS for over a decade (I use MacOS as a glorified SSH client for work). Most of my time has been on distros in the Debian or RHEL families (*buntu, Linux Mint, Crunchbang, CentOS, etc) and I pretty much live in the terminal these days.

With all of this said, I am coming to you folks for help. I would like you folks to share distros, desktop environments, window managers that you think I should give a try, or would like to inflict on me and what makes them noteworthy.

I can't guarantee that I'll get through suggestions, as my ADHD has been playing up lately, but I'll give it an attempt. Seriously. If you want me to try Hannah Montana Linux, I'll do it and report back on the experience.

EDIT: Thank you all for your fantastic suggestions. I'm going to start compiling them into a list this weekend.

you are viewing a single comment's thread
view the rest of the comments
[–] Ramin_HAL9001@lemmy.ml 4 points 10 months ago* (last edited 10 months ago)

In short: Nix tracks all installable software and dependencies using a Merkel tree data structure to ensure fully reproducible builds of software. This Merkel tree also provides properties similar to that of a C.O.W. filesystem where you can snapshot and rollback system software build configurations in O(1) time, it just rewrites a fixed number of symbolic links to the root of the desired Merkel tree. In my opinion, it is the most technologically advanced package manager currently in existence.

Every input that goes into building a piece of software on Nix OS (or in the Nix package manager in general) is hashed and placed into a database on the system. These hash IDs become dependencies for everything they are used to build. By tracing the chain of hash IDs you can guarantee that every single bit that goes into the build of the system software is accounted for. If two separate computers with the same ISA are running the same tree of packages verifiable by their hash IDs, you are guaranteed that both computers are running the exact same software. All dynamic libraries, shared libraries, executable files, and even the config files in the package database refer only to other files in the database.

When you use Nix OS, not just the package manager, the C compiler, boot loader, and kernel are themselves build inputs. You can even roll back to a snapshot of a working system from the bootloader menu if you accidentally break your system (as long as the package database is not corrupted).

Finally, the system itself is both built and configured using a declarative programming language. So you install software by declaring that it should exist, and the package manager computes precisely which dependencies must be installed to realize what it is you have declared in the system configuration files. Making a change to what is installed requires simply altering the lines of code in the system configuration file. You can also use these configuration files to easily construct Docker images or Flatpacks.