Tech Over Tea - Long Awaited NixOS Episode | Tristan Ross

Episode Date: April 18, 2025

I've said I wanted to talk about NixOS for a long time and now we have one of the recent release managers, Tristan Ross on the podcast to chat about the project, the value of Nix and maybe you&#39...;ll decide if you want to use it.==========Support The Channel==========► Patreon: https://www.patreon.com/brodierobertson► Paypal: https://www.paypal.me/BrodieRobertsonVideo► Amazon USA: https://amzn.to/3d5gykF► Other Methods: https://cointr.ee/brodierobertson==========Guest Links==========NixOS: https://nixos.org/Tristan Website: https://tristanxr.com/==========Support The Show==========► Patreon: https://www.patreon.com/brodierobertson► Paypal: https://www.paypal.me/BrodieRobertsonVideo► Amazon USA: https://amzn.to/3d5gykF► Other Methods: https://cointr.ee/brodierobertson=========Video Platforms==========🎥 YouTube: https://www.youtube.com/channel/UCBq5p-xOla8xhnrbhu8AIAg=========Audio Release=========🎵 RSS: https://anchor.fm/s/149fd51c/podcast/rss🎵 Apple Podcast:https://podcasts.apple.com/us/podcast/tech-over-tea/id1501727953🎵 Spotify: https://open.spotify.com/show/3IfFpfzlLo7OPsEnl4gbdM🎵 Google Podcast: https://www.google.com/podcasts?feed=aHR0cHM6Ly9hbmNob3IuZm0vcy8xNDlmZDUxYy9wb2RjYXN0L3Jzcw==🎵 Anchor: https://anchor.fm/tech-over-tea==========Social Media==========🎤 Discord:https://discord.gg/PkMRVn9🐦 Twitter: https://twitter.com/TechOverTeaShow📷 Instagram: https://www.instagram.com/techovertea/🌐 Mastodon:https://mastodon.social/web/accounts/1093345==========Credits==========🎨 Channel Art:All my art has was created by Supercozmanhttps://twitter.com/Supercozmanhttps://www.instagram.com/supercozman_draws/DISCLOSURE: Wherever possible I use referral links, which means if you click one of the links in this video or description and make a purchase we may receive a small commission or other compensation.

Transcript
Discussion (0)
Starting point is 00:00:00 Good morning, good day, and good evening. I'm as always your host, Rudy Robertson. And today, people have asked me to do NixOS stuff for a very long time. I don't even know when the last, the first time I got a NixOS suggestion was. Probably, I don't even want to think about it. I actually don't want to think about it as being that long. So today we have someone who knows quite a bit about NixOS. How about you introduce yourself and we'll go from there.
Starting point is 00:00:33 Hello, I am Tristan Ross, also known as TheComputerGuy and I am actually the 2411 release manager. I helped organize 2505 which will be releasing next month. Uh, I am also the standard in one of the standard environment, uh, maintainers and maintain all of VM, SC Linux and a few other components in next packages. So I'm pretty well versed in what's going on there. packages. So I'm pretty well versed in what's going on there. So as I was saying, before we started recording, like I, I've, I know a bit of like surface level stuff about Nix, right? If you're,
Starting point is 00:01:16 if you're in the Linux world, it's pretty hard to not run into somebody who's going to show Nix to you. You know, people talk about, hey, Arch users like to tell you they use Arch. I've noticed quite a similarity with the, with Nix who has people. Anytime there is any question about dependency management or packaging or anything that could potentially be fixed by the way that Nix handles things. I'm going to get at least one comment from someone in the world of Nix. Yeah, NixOS is basically like the new, by the way, I use Arch kind of thing. I used to actually run Arch kind of a little bit before I switched over to NixOS.
Starting point is 00:02:02 I was on Void in between, but it's kind of gone that way where for a long time Arch Linux was kind of like the, hey, I run a specialized Linux system. But now it is very much becoming NixOS with the popularity it's been gaining over the past five years that's been really exploding. You might just start to become really staticky for a second. Could you say something again?
Starting point is 00:02:26 Okay. Okay, it's gone. How do I think it? I think it just one of those weird issues that. Pulse pipewire has or something like that. Sure. Okay. If it happens again, hopefully doesn't happen again.
Starting point is 00:02:42 Anyway, yeah, I definitely have heard a lot more about Nix as things have been going on, especially as things like Flat packs maybe not snaps as much but definitely flat packs have become a lot more popular as a way to deal with dependency management on these different systems Usually you're gonna have someone come along like oh, we don't need something like that. Hey, we could use this instead but I guess Clearly there's a reason why people Always come along suggesting nix right like it It's not just people saying it because they just kind of feel like it so I think the best place to start is
Starting point is 00:03:24 So there are two main things. There is NixOS, the distribution itself, and there is Nix, the package manager. I guess we should probably start with the package manager itself. Yeah, so I actually want to start with the language because the language is kind of what builds the basis of the package manager. So the mix language, it's got, from what I've heard, similarities to Haskell. It is a functional programming language, and you can kind of imagine it as a JSON with functions that spits out bash scripts. That's essentially what it does. You have very primitive things like attribute sets, lists, just your generic strings and
Starting point is 00:04:12 little bit funky ones like paths and string context is numbers are another like regular thing. And then you had this funky type called a derivation. And derivation is really like a recipe. You provide your derivation with an attribute set and you provide it with things like the system, uh, double, you provide it with a name and a builder. And with those, those three components, it's able to call the builder and then spit out to some sort of output that is determined by hashing the attribute set.
Starting point is 00:04:55 And there's just some mapping there that just does a funky hash and it gives you this long character string. You're like Nick slash store slash whatever garbage with a name attached. And so essentially what you get is kind of like, if you look at like a database, and kind of like see everything has an ID, it's kind of like that. But it's on your file system. And so this is kind of getting into where now we're caught talking about NICs as they're just a NICs language.
Starting point is 00:05:28 And you can build up these concepts of just some arbitrary location that you're writing out to. And you can build up a packaging system. And by referencing one derivation into another derivation you suddenly have dependencies. And if you track things correctly enough you can build up a dependency tree. And then with that if you specify I want this derivation out of all the other derivations it's going to pull just that derivation and what other other derivations that derivation needs. Right. So you get the concept of being able to pull its dependencies for every single
Starting point is 00:06:12 one package. Kind of like how when you do an npm install, it's going to pull all the dependencies. But instead of going into some RAM directly like node modules, it's going to be your next tool. But with how Nix works, you don't need to be roots, unlike other pack managers like Pact or Pacman, because it's in the next store. So now you certainly have a way of installing packages without really installing them on the system. And through that, we're able to have a package repo. Right. So the Nix store, you use that term a couple of times. The Nix store is basically the location where the packages are stored, if that's correct, or the installed applications are stored.
Starting point is 00:07:03 Yeah, it's not really considered installing. There's a few different phases Nix goes through. You have evaluation, then you have instantiation. You go from there and then you have either building or fetching. And the building or fetching is what it does to take what's called an instantiated derivation and putting it into the store. And the way it does that is you'll check to see if your substitutors or one of your builders are available.
Starting point is 00:07:35 And if it's already built and available, it's just gonna pull it from whatever build system that you have remotely available or whatever other like caches that you have available as a substitute. And it just puts them next door and there you have it. So I always hear about Nix, the handling dependencies and handling like installed versions in a better way than you would have in a more traditional packaging system. So through this system where you have these unique ID for your packages and it links to the other packages that that package depends on, you can then have multiple versions of that on your system and
Starting point is 00:08:26 it links to the different IDs for those different versions of the package. That makes sense. If I'm saying this correctly. I don't know the Nix terminology, but if that- Yeah. So that's kind of coming from instantiation. So evaluation is going to eval- all of your Nix code and the instantiation. What it does is it tells the
Starting point is 00:08:47 next statement hey. I had this attribute set being pushed to this derivation. Actually make it a derivation so that it takes all that metadata associated and then it assigns that hash and through this. Since every hash is arbitrary for is how that package is
Starting point is 00:09:08 specifically written. If you change certain things, you can then get different versions of a package. Even with like different packages that has different like build features, like, Hey hey I want to build some browser without FTP support or hey I want to build something using GCC instead of Clang. You just specify that in and because it changes that attribute set it's going to change to hash and then you suddenly have two different versions
Starting point is 00:09:45 of the same exact package. They can even be the same version of that package, but because they evaluate it differently, they have a different hash, which means they're going to be specified differently and not included together. So does this system work like all the way down, right? Like, obviously it makes sense for, you know, like your
Starting point is 00:10:05 Firefox things like that, but does this work at the level of something like Glybc? Do it work at things like the, the Lynx kernel level? Is there a point it breaks or does this work all the way down the stack? As long as you have some sort of arbitrary way of evaluating and being able to put a file somewhere. You can pretty much put anything in there. Like even some of the concepts you've thought of is like doing machine learning models and splitting them apart and then putting them in the next stores because then you're able to have these large language models inside the
Starting point is 00:10:39 next door and only pull the components you want. Okay. I wasn't, I was not aware of that at all. Okay. Yeah, this was actually a concept that was kind of thought of during the recent conference in Pasadena called Planet Nix, ran by Phlox, where the idea is to split up these large language models because they're usually gigabytes in size and you don't need everything So if you have some sort of way of being able to build it and terabytes, I think you mean gigabytes is not that much
Starting point is 00:11:15 Yes, sorry, I mean I haven't worked much with these models but they are File sizes that get difficult to download just because they're so large. Right, right, right. And there's so many different devices then. Sorry, I was just being pedantic. I just, it don't. I have California internet and it's also great. Yeah, I don't know whose side it was then.
Starting point is 00:11:39 Anyway, you were saying? Yeah, so basically any sort of file works. There's a couple kind of files you don't really want to put in there like device files or like sockets, but that makes sense, because those aren't going to distribute easily, but any regular file SIM links. Those work. All your generic things works,
Starting point is 00:12:01 so we're able to put ellipses. We can put compilers, we can put tarballs, we can do anything inside of a derivation basically. Right. Okay. So the Nix package manager itself, this is not something that has to be used on NixOS. This can be used on other systems as well. Yeah, kind of like how you could use like Pac-Man on Debian. You can throw it onto any system, except for with other package managers, they kind of care because you're gonna have conflicts.
Starting point is 00:12:45 If you just try to installing like Firefox from the Aurora onto a Debian system, you're gonna get some weird problems without trying to hack around the problem. Sure. But with Nix, because everything references each other, and because the Nix store exists. That doesn't matter. You can have a distribution of. Nick's OS or Nick's packages and multiple versions of that could be in your store
Starting point is 00:13:18 and they will never conflict because they all evaluate as their own things. So how does this like with the distro? Is it like symlink it to where you would expect binaries to be or? Yeah, so I want to explain a little bit more with how... Go right ahead. ...NixOS works. So with NixOS, it takes that concept of a draw-avation and that it going to an output and assigning it
Starting point is 00:13:47 to various things for Linux. And so it does things like setting up the ETC directory. So like a very simple file to kind of think of one is the OS release file. If you aren't aware of that's the file that contains the metadata, the file with distribution you're on, it's a very simple file format.
Starting point is 00:14:07 But because it's just a text file, you can make a derivation. And you're going to have it just written text and then sim link it to that with a thing called an activation script. And this is going a little bit more into how NixOS itself works. You have what's called the top level of derivation, which contains the stateless immutable build of your entire setup. So it includes your graphics drivers, your kernel,
Starting point is 00:14:39 even your bootloader. A little bit of that information is in there. And then all the rebuild script does is it just builds it and then runs the dry activation script, which is a script that is just the minimal amount of stuff to set up that top level derivation so that when you reboot, you're going to get the next version that you've built. And so that's how you can kind of set up etc. And with the activation scripts, you're able to do even weirder things like set up sc Linux, or you can have it do whatever because activation scripts are just a script.
Starting point is 00:15:30 Okay, so I'm just trying to keep up with, I'm trying to keep up with Nixie. For anyone who's not aware, I have like a surface level knowledge, I'm like learning as we're going here. I did a bit of stuff so I could like work out what to talk about, but like, you know, I might as well go back and rewatch this one to actually follow along with everything that's being said here. And I think this is one of the things with Nix and with Nixwes. A lot of people have,
Starting point is 00:16:06 you know, you'll hear people talk about it, but you always hear people say, Oh, it's difficult to learn. I don't understand how the system works. And it's a very different system than the way most distros work and most package management system works. Yeah. So the thing with Nick's is that you're in NixOS is you're not just learning how Linux works.
Starting point is 00:16:31 You're learning package management, your dependency management, a new language that's based around a functional programming and functional program out zone is a difficult topic. Haskellers know that a lot because it's just a mess sometimes. But there's just all these concepts that it takes from what we've seen a lot of time for people to bring up to a good understanding of NICs. We've actually gotten surveys that we run every year by the marketing team. And most people start picking up more of these things after three years of using Nix.
Starting point is 00:17:12 They start understanding all this just because it takes so much time. And for myself, that was actually the same thing. I started using Nix OS back around 2022, and it's 2025 now, and I'm doing all these things. Before, back in 2022, all I knew really how to do was like Pac-Man, XBPS, which is, Void Linux Package Manager, and all that. And so it took me a long time to figure out
Starting point is 00:17:46 how to do all this stuff. And so there's this huge learning curve. It looks like this. It takes so much effort to learn. And all of a sudden it just shoots right up because once you grasp all the concepts, there's a lot more you can start doing. all the concepts, there's a lot more you can start doing. It branches out a lot further once you've kind of understood. And of course, everyone can learn differently, they have different learning
Starting point is 00:18:14 rates and all that stuff. So there's the human factor in that. So I think it makes sense that people say it's a difficult distro to learn and difficult stuff, but there's just a lot you can get out of it. I think conceptually, it's not that complicated of an idea, but there's a lot of Nick's terminology here that I feel like does make it a little bit harder to follow, and I'm sure the terminology is important, but initially hearing I'm like, okay wait, so that was that one, okay let's- let's get back to that thing. Um, yeah, I- look, I'm happy on Arch, but I- I- at least initially seeing Sort of the grains of why this system makes sense Yeah, there is a lot of Terminology and the stuff that's used they make sense like a derivation
Starting point is 00:19:17 It's a derived output essentially. That's kind of like my understanding of it but the nice thing is that things like Nick's packages already exists and Nick's OS already has a lot of stuff in it that unless you're really wanting to get into the fine grain of how everything works, you don't need to learn everything. You could learn just enough just to package G to hello and you'll be fine. But if you're someone like me and want to like really explore all these interesting things, then yeah, it's going to take years to pick up how everything works at its core. everything works at its core.
Starting point is 00:20:03 Okay. I want to talk a bit about the NixOS distro. So obviously there is the Nix package manager. I actually, I don't know what side to start in here. I, should we talk about the benefits of the distro first or the benefits of the package manager outside of the distro? Which, which direction you think makes more sense to approach this from? I think it's kind of a, they work both together. So a lot of the like, but like, I'm kind of, yeah, like the point I was getting out there, like if you can use the Knicks package manager
Starting point is 00:20:35 outside of Knicks, like the KnicksOS, the distro, what's the point of the distro itself? What's the point of the distro itself? Yeah. So the distro itself is a modular Linux distro. So that means the configuration it's all modularized. So it takes a lot of concepts that are from Linux and Linux distributions and units and puts them into a easy to understand way. Like if you want to change your hosting, it's just setting host networking dot host name equals the string in the backend.
Starting point is 00:21:15 There is a lot of stuff going on. That's going to change a host name file. And when you rebuild, that's going to change how Etsy works, which didn't change the top level derivation. you rebuild, that's going to change how Etsy works, which is a change of top level derivation. So re-implementing NixOS, it takes a lot of effort, just because there's so much stuff that's going on. Okay. So if I'm understanding it right, NixOS basically uses the Nix package manager for, like, across the entire system.
Starting point is 00:21:49 Whereas if you put the Nix package manager onto an existing system, you can choose how much of it you want to be in the package manager. Yes. So, with NixOS, you have your entire Linux system. You can even do like your home directory management straight through that. But with Nix on top of like Fedora or Debian or whatever, you're just getting the package manager. You could theoretically migrate over to NixOS
Starting point is 00:22:21 by slowly replacing things that is actually a tool someone made. I'm sure it is. It's cursed. Do you happen to know what it's code? NixOS Infect. It has a very apt name, because it infects your system to run NixOS.
Starting point is 00:22:44 And this is actually how we got NixOS onto a lot of different VPS providers, because they don't let you pull it up in ISO, which is a bit of a problem. It's like, what if you want to change the distro? Now you're stuck with like Debian, whatever, or Ubuntu 2011. So, NixOS in fact is a way of just moving stuff in such a way that it becomes NixOS.
Starting point is 00:23:14 Well, I actually hadn't even thought of that. So if you do have it on top of a, another system, much like say with a Flatpak, you could get access to a lot newer packages on something like Ubuntu 1804. Yeah, no, that's still okay. I was just thinking is that still supported? Yeah, technically in the long the super long term support. Yeah, so you couldn't sort on something older like that and get access to these newer packages. Yeah, that's actually one of the benefits with Nix packages, which is just the package stuff is that as long as you can reference Nix packages, you can get like whatever you get the current gnome release. You could get G lib C whatever you can get the most recent version of steam if ever that's a little bit wonky because their own stuff.
Starting point is 00:24:16 But yeah, you can basically get whatever, as long as you have the derivation to evaluate. is that you have the derivation to evaluate. So if I'm on a fast moving distro, like an Arch Linux, a Gen 2, where there's good package support, pretty much everything you'd possibly want is packaged. What would be the benefit of including Nix on a system like that? Nix on a system like that? The benefit I could think of is instead of using just Nix, you're going to move over to NixOS because NixOS can be thought of as both a stable and a rolling release distro. We have releases every six months, but there is the unstable branch they can just daily drive. I do it other people do it but unlike Arch it doesn't break every two months because
Starting point is 00:25:19 we do a lot of testing and one of the side effects of having everything evaluate is you can rebuild the world with just a one line change. So we have this pipeline of applying PRs that changes mixed packages so that things may be broken but you're going to still have a bootable system. That's one of the kind of more beneficial things. You use that term rebuild the world there. What do you mean by that? So that basically means like whatever package you change rebuilds literally everything. Like you change your, uh, libc, you're going to be rebuilding everything from like,
Starting point is 00:26:08 G new hello to Firefox, to WL roots. We just say we build the world because you're rebuilding everything at that point. If you're going to be changing that much. Right. Right. Right. And we have a handy little flag on that says you have like 50,000 rebuild packages and you don't want people try to do that on a core to do or whatever. Right. Well, unless you're a psycho, um, I do, I do have a friend who, uh, compiled and installed Linux on a PS2 which is time-consuming. Yeah I used to do that with Arch Linux on a what's it called? Dell Latitude E6420 back in high school. It was slow. I do not really recommend using a system that old in 2017.
Starting point is 00:27:05 Yeah, no, definitely not. Like, get yourself like a $50 mini PC. It'll be faster. So... Yeah, well, at least now I have great hardware. Oh, yeah, for sure. That definitely makes your life quite a bit easier. Okay, so if somebody wanted to mess around with Nix, would you recommend they go straight into the distro or install the package manager on top of whatever they're currently using?
Starting point is 00:27:38 I would just say just do whatever interests you. If you don't really care about NixOS, fine, just use Nix itself. You can use it to manage your development environments because you can create what's called a Nix shell and then you just have all your dependencies there and then you can just do Nix shell or Nix develop and then you would get your entire development shelf and your C libraries and your compilers. You can get weird things like Java and just anything. So it's pretty much just you can do whatever. Just try playing around with it. See what you like and things like that. Okay, fair. So let's see here. Oh, this is one that I term that I come across quite often. What is a Knicks flake? Like I've heard this term so many times, I have no idea what it
Starting point is 00:28:41 means. Yeah, so we have two kind of methods of managing systems and well, NixOS systems and packages and shells. Right. And so a legacy way is you have configuration.nix as your entry point for managing your Nix West system. And then you have default.nix, which is the same kind of concept, but just going to be an attribute set or just a single derivation that builds a package or multiple sets of packages and then you have shell.nix which is similar to default.nix but it provides you a development shell that you can build and kind of work in.
Starting point is 00:29:38 I'm kind of imagining it as like a Docker container but instead of entering Docker and doing all that weird madness, it just drops you into an extra shell. Now, a flip is special because it tracks all of your inputs. So let's say you want to have eight different versions of NixOS. That's just some random number I just pulled on my head. It doesn't really matter. But let's say you just want whatever package or versions they want to pull from these different things. You can do that.
Starting point is 00:30:13 You can just add that input in, and then you lock the Flick, and then it keeps track of the hash and all that inside the Flick lock. And then it's going to be able hash and all that inside the flake lock and then. It's going to be able to track all that for you and the flake once you write it up, you specify your NixOS systems, your development shells, your packages. So it's a very global kind of entry point for a repository to
Starting point is 00:30:48 dependencies, uh, specify your packages and all that. So it's a more like modern way of kind of the dealing with things kind of, I'm not really sure what other equivalent thing that isn't next. It would be similar to, we can't imagine like a package job base and file, but it's code. So it's a way of defining different, I guess, different subsystems, I guess? Like, maybe that's not the right term to use, but, um. Yeah, not really. You can use it to like like let's say dot files a lot of people have dot files and you want to manage your systems between uh five different computers well you
Starting point is 00:31:37 don't want a configuration for every single system and have duplicate lines. You can write your own models and then plug them up, but have multiple NixOS systems in your Flake. Now when you rebuild, it's going to check that host name and check to see if that host name is an attribute within the NixOS systems attribute inside the Flake app. And so now you can match all five of those systems, which just a lot less code. Okay. So it's a way of defining different systems and sharing stuff between them.
Starting point is 00:32:21 Kind of think of it as a more way of tracking uh, mixed dependencies and I'm being able to specify what you want to output Right. I think I understand where we're going here. The problem is there isn't any other thing that is on this level of complexity and this amount of possibility that a Nyx flake provides in other spaces. Terraform doesn't really have a thing because Terraform and Ansible can't get lumped into Nyx There's a really an equivalent thing outside of Nyx base that I'm aware of Yeah on the
Starting point is 00:33:16 Sorry in the in the the Nyx docs there are literally two subsections Why are flakes controversial and should I use flakes in my project? So even even in the Ny project, it's like, we're not entirely, we're not all fully set on the exact, should everybody use this? Yeah, that is changing kind of because one of the implementations of the next package manager, they've considered Flake stable. And at this point, a lot of people use the legacy way of managing things and then they eventually move over to Flake. So at this point, it's in the middle point of like, is it the thing that everyone's going to use or is there's going to be something else? No one has to move with an alternative.
Starting point is 00:34:13 So everything's kind of moving over to flakes, but the legacy way is still going to be supported for a long time. Is this one of those things you actually need to care about if you're just starting to learn Nix or is this one of those things where it's like, Hey, if I want to spend all of my day, I want, I want to become the future release manager and learn everything about this system, uh, that you need to care about. I mean, if you want to learn everything, definitely learn flakes. It's one of those things that you should. But if you're playing around, take a look at it at some point.
Starting point is 00:34:48 It's one of those things where it complicates things more. But the amount of benefits you get out of it, are just easily managing your dependencies and easily just doing entry points into your repos. It's just, it's just going to make things easier. But it's more complicated to learn. Okay. So, Nix does a lot of things, but what would you say is the main problem
Starting point is 00:35:24 that Nix is attempting to solve? I'd say reproducibility and dependency imagining, because those kind of come hand in hand. And the way Nix sort of solves this is everything predictable. And by being predictable, you're reproducible. It's not a one, you don't get one without the other exactly, but they come hand in hand. And the way Nick does this is by doing like having the evaluation to where, oh, it only references this specific package for its dependency. It's just because we're using that. But some packages and stuff like C compilers like to tag things in like the time something builds or some arbitrary pass. And so we have these concepts and stuff,
Starting point is 00:36:28 or not really concepts, these different features within Nix packages strips that information out. And so we can do, if as long as your operating system and your CPU, generic bit of build configurations, the same, you can build the same package on two different systems at two different times of the day.
Starting point is 00:36:50 And they should be a binary equivalent. You do a diff, and they should show it's exactly the same number of duplicate bytes. Now, of course, you have some weird things like C compilers, I think Java is one of those weird things. Google projects because Google packages things weirdly that getting them reproducible is hard but not impossible.
Starting point is 00:37:19 And since from there, since it's reproducible, you've kind of solved the dependency measurement problem. Reproducibility is a very loaded term that a lot of people don't really understand correctly. And you often hear discussions like, oh, this system is fully reproducible, that system is fully reproducible. When we say reproducibility, let's just focus specifically on that. What does that term itself mean and why would you care about it, right? Like let's say you have a system where you compile an application, it looks, it's the same application. It looks the same to the user, but it's not going to be binary equivalent What is the benefit of it being a binary equivalent? But I'll be I start with them
Starting point is 00:38:12 Just focus on the reproducibility term itself Yeah, so kind of think of it as Basic math you have a function which takes two arguments, a and b, and you just do a simple operation of a plus b. And so you let's say you plug in one for a and b is two, that is going to be three. So the that kind of idea of just like, as long as your inputs are the same, the output should be predictable. And so this kind of goes a little bit more back into the language where because we have the hash, we know what things should output like.
Starting point is 00:39:02 But that's only for evaluations. And so we apply this concept to the packages we build. And from there, we're able to guarantee that these packages are going to be able to operate the same and debug the same and do anything the same anywhere and we participate is important because let's say you have a regression with something and you want to track it you do that you bisect it. But what happens when something doesn't match up because it's not really visible.
Starting point is 00:39:50 You could get a false positive of what looks like it could be a problem, but it could be oh, this date changed inside the build hash causing things to change around. You don't want that. So reproducing that to where it's going to be the same in 20 years as it was five weeks ago. Makes that a lot easier. And it doesn't even have to be for like debugging. It could be for like modular management of like some programmers have a way of being able to plug in stuff and sometimes they want
Starting point is 00:40:35 this to order correctly. Being able to reproduce it correctly makes sense there and so it kind of depends on what you're wanting, but it, at the end of the day, it is a concept that should apply everywhere. Right. Yeah. Reproducibility and the value of it really depends on where in the product chain you're, you're sort of sitting, right? Like if you're, if you're in a corporate environment, you know, having a
Starting point is 00:41:06 reproducible builds is more resilient against software attacks because you can verify the build you have is the build that it is supposed to be. Yeah. Especially for like that kind of thing. Or even like servers, like let's say you are on a DevOps team and you have to manage 20 servers. You want it where everything's gonna be the same. Because the idea is you wanna minimize
Starting point is 00:41:37 the amount of variables. By minimizing the amount of variables down, you have a lot more predictability. By being able to predict things, you can then squash bugs easier or easily. You know exactly what's going on. Okay. So we're just going to, I've just been jumping around between different Knicks topics that I'm not really sure the best way to connect these things
Starting point is 00:42:04 together. I've just been jumping around between different Knicks topics. I'm not really sure the best way to connect these things together But I guess let's talk about Package rollbacks because that's a big one that a lot of a lot of systems just don't Have anything really in place to do so like arch you can roll back a package, but basically what that means is going to the package archive repo and then installing the old version of the package which potentially if you're doing something low-level enough could break the entire system but that's not the sort of thing we're talking about here and with the way we've talked about how packages work where they're all stored in their own separate
Starting point is 00:42:44 directory with their own ID and stored in their own separate directory with their own ID and they control their own dependency management. It sounds like rollbacks and it mentioned on the home page here that rollbacks are something that are easy to do. How are rollbacks facilitated? through Nix. So the way you do it is as you're aware everything evaluates and so the inputs, which are your attributes to the attributes that's passed through the recreation, you basically just undo the change.
Starting point is 00:43:14 Like, oh, you have this source that points to like, let's say, oh, dot one dot six and oh, that is broken. When you roll back to oh, that is broken. We need to roll back to 0.1.5. What you do is you just change the source. Then all of a sudden, you have the old version. Luckily for you, if it's in your cache
Starting point is 00:43:38 or somewhere that you can get it from, you don't even have to rebuild it because nothing else changed. And so we actually apply this to Nix OS a little bit further by having multiple generations of your system. Let's say generation 20, nothing's broken. And so you're able to just manage things a lot easily as long as you can work backwards from going forwards. When a lot of people talk about rollbacks on Linux, there's a lot of the the focus right now are on these these
Starting point is 00:44:25 I don't know what term you want to you like using for them these image based or immutable atomic distros where basically you just roll back the entire system and you just have multiple versions of the system installed but Nix is more akin to traditional package management. Obviously it's still Nix's different Nix system, but it's still, it's not like, you can roll back individual things, right? It's, it's still, you're handling packages separately from each other.
Starting point is 00:45:02 Yeah. Yeah, so you can easily just roll back things like that where and because Nix isn't or NixOS isn't really immutable, it kind of actually is because you can't just arbitrarily write to the next store. And so the kind of benefit you get is Nix is only going to touch Nix things. When you roll back an image based distro, you're going to be rolling back a lot of things. You're going to have a lot of downloads. You're just going to you just have a lot more complexity with this.
Starting point is 00:45:40 You can just roll back one single thing and that's it. The layer operation, you don't have to even download that much. It's just simpler. Right, I have heard anytime the discussion of immutable distros comes up, it is like the topic of Nix comes up as well. It's obviously very different from, you know, a Silverblue, but it's approaching that immutability problem in a different way
Starting point is 00:46:08 yeah so like with immutable distros typically people do I don't like the term personally I like image base it's it's a there's no good term for it because there's nothing there's no individual word that explains everything that a silver blue like a distro really encompasses. Yeah, like those kinds of things, they do weird things that certain packages may not like. Like I know system D doesn't quite like having your root file system locked. And sometimes you want to be able to change around your system at runtime. And sometimes you want to be able to change around your system at runtime, especially if you're missing with something weird like X Lord,
Starting point is 00:46:47 because your drivers and stuff like that don't quite always apply. And so the kind of benefit you get with Nix is you can change things without like having to... I'm trying to figure out, explain this with like a locked root Fs, you just can't touch anything. But with Nixos, you can still touch your scene, all that as long as you have the permission.
Starting point is 00:47:20 But if you reboot your changes are rolled back because the system reactivates. So you can kind of test drive some things at runtime, make your fixes, whatever, and an update configuration. And now you kind of locks things in. And so you can have more of an agile, like work around method to try to figure out why is this thing not working. And things generally play nicer since you're not messing with weird file system permissions and stuff like that. It's just you have a single directory that is locked behind a daemon. And that's really it.
Starting point is 00:48:11 Yeah. There's this random comment on Reddit I see where someone described it as iteratively immutable, which I think makes it, well, I, I, I dunno, again, Reddit comments. That's a funny way on the way. Yeah, I Don't know like it's it definitely sounds Like it makes more sense as a system I I don't think it makes sense to go full down the route of things like silver blue like they
Starting point is 00:48:43 go full down the route of things like Silverblue. Like they... They're, like, the approach they're taking is lock file system and then do everything in Flatpaks. Which... Works for a lot of stuff, but... You know, you, if you're on, like, if you're on Silverblue and you want to go and install different drivers, for example, you've got to then start building your own images which you know get and and with that if you want to support weird hardware like let's say our MacBooks
Starting point is 00:49:18 well I mean fedora supports it but that's a little bit different though like if you want to support like odd the horror, like Linux phones or I mean, Android phones in middle of a distro, distros, you're gonna have to rebuild everything. It's just, there is a lot more to work with. With Nix, if it's just, I hate the derivation that's just out of disk image, you're gonna be able to simplify things a lot more.
Starting point is 00:49:47 And so you also get the benefit of it being all in code through Nix. So it's just a lot easier to manage than like 20 bash scripts and weird commands you had to memorize. I mean, Nix doesn't have its weird commands. I was going to say, don't talk about weird commands in Nix. But I mean, Nix's commands are a lot easier to understand because it's Nix build and then you say what you want to build. You can do some extra things like checking how much jobs you want to run and stuff like that. But every built system has that sort of thing, but you don't have weird
Starting point is 00:50:30 flags like to change like debugging or I mean, well, Nix does have that. It's hard to explain. It, it puts those flags behind and easier to understand abstraction. Right. Yeah, don't get me wrong. I like, I think these distros like Silverloo, like Steam OS, they make sense. I think they make a lot of sense for like appliance type devices where there is a set piece of hardware. Like the Steam Deck is a perfect sort of device for something like that. It's not really treated like a, you can use it like a computer, but it's a console.
Starting point is 00:51:10 You update the console when the update comes out. And for certain kinds of people who don't really modify their system, who can get away with doing everything in Flatpaks, yeah, it's fine. Yeah. I think they have a place, but there's a lot of people who think they are going to take
Starting point is 00:51:26 over the entire world of Linux, which I frankly don't see. Yeah, I mean, you can actually do a lot of appliance things with Nix just because it's like, hey, it's having the same build route or like Yocto. It's just a Nix image. You just build it and flash it and you can treat it like your regular immutable system, even though it's a little bit of a different concept, it can do the same thing. But there is benefits of having things like silver blue already exist.
Starting point is 00:52:07 It depends on what you want to do really and what you're comfortable with. Right, yeah, a lot of people may not be comfortable jumping into Nyx. And this, as I was saying earlier, this is one of the common things that comes up with Nyx. We're all going to rehash that topic again, but it is definitely something that comes up quite frequently with Nyx where it's like, oh, I think the idea is cool, but like, I don't really know where to get started with it. One thing I wanted to ask, and this is kind of jumping back to the thing about rollbacks, I was just having a look at the, at the how Nix works page, and it
Starting point is 00:52:43 mentions when you uninstall a package, the package isn't actually uninstalled, it's, it sits around in what it refers to in a state waiting to be garbage collected, which usually is a term that you hear for programming languages. Um, I guess it's just using the term garbage collection here as a way to basically mean cash. just using the term garbage collection here as a way to basically mean cash? Yeah. I mean, there is not really a better word than garbage collection to describe it because you can kind of think of a next next derivation as like a, an object.
Starting point is 00:53:17 And then it's like, Oh, this object is unused. Right. So just clean it up. It's a garbage collection. Right. So just clean it up. It's a garbage collection. And so at that point when you unreference a package, if you have automatic garbage collection or you run the next collect garbage command, it's going to look for every single derivation that is unreferenced and it's parents. And if those are unreferenced, it's just going to remove them because why is it there if no one's using them? Yeah, fair.
Starting point is 00:53:57 Um, I don't know why this didn't come up before we were talking about rollbacks. why this didn't come up before we were talking about rollbacks but also atomic upgrades this is another another important thing these these are the distros attempt to resolve as well and that also seems to be a thing here as well I've heard of atomic upgrades but I'm not really sure It mentions it literally on the the website Nick, so I assume this is something important. Let's see, what is atomic? Throwbacks. Perfect.
Starting point is 00:54:35 I've heard this... No, I don't want the Django stuff. This is not the direction I thought it would go. Yeah, I mean, I probably understand the concept if I could figure out what atomic rollbacks means. Or like atomic upgrades. What it is saying here, since Package Management Operations never overwrite packages in the next store, but just add new versions in different pods, they are atomic. What a great explanation. Jesus Christ, that's...
Starting point is 00:55:13 Maybe someone should rewrite that one. Yeah, I'm not really sure. So during a package upgrade... Atomic. Hold up. So during a package upgrade, there is no time window which has some files from the old version and some files from the new version, which would be bad because a program might will crash if it started during that period. Ah, now I understand what it's meaning. So the way Nick fetches things and builds things is it doesn't expose them until it is there. is it doesn't expose them until it is there. It's like, you don't want to be using Firefox when it's halfway downloaded, it's not gonna start.
Starting point is 00:55:51 So it puts it into some sort of limbo. And then once it's there, you have it. Yeah. Yeah. I'm not really sure what it means by atomic in that concept or context. Right, right, right. I'm happy that I found a term used in Nix that managed to stump you. That's a fun one. Yeah.
Starting point is 00:56:30 Cause also atomics are a concept in systems programming. Sure. And I'm not sure if it's meaning like, atomics as in like atomic instructions and like new text locks. And it's like, right, right. Okay. It could mean two completely different things there. Yeah. Right. There's a lot of tech and programming terminology which overlaps
Starting point is 00:56:52 with other segments, which mean entirely different things. For anyone who might not be a programmer, a great example is the common usage of the word theory and the scientific usage, where the common usage of the word theory and the scientific usage where the common usage basically it means it just means guess like you it's like oh i have a theory that aliens might have built the pyramids i don't know um the the scientific definition is basically a i i don't remember the exact dictionary definition. You have like a well-formed understanding. You have something that is backed by evidence that by all accounts seems to be what is happening.
Starting point is 00:57:40 That I guess is a bad way to explain it, but guess the point across? Yeah, there's a lot of word usage in tech. Immutability is a great example of it, where immutability in one sense means unchanging, but we're using it to mean these systems which are temporarily unchanging, which is great. Yeah. It's also a type of variable in Rust. Yes, that's another fun one. Oh, God. I hate the tech world sometimes. Oh, it's fun.
Starting point is 00:58:23 Oh, it's fun. Well it's fine when these terms sort of evolve independently. It's when the terms get reused where it really bothers me. Like, especially when you, like again, going back to what I said about immutability, where the term was already around and people were like, ah, this is good enough. Let's go with that one. Especially as like standards and things changed, like I believe there was a bit of this problem of things changing from the Unix side of things to more of a Linux style of things, kind of as things evolved and people moved away from
Starting point is 00:59:02 Unix, like I'm pretty sure there's concepts there that got reused and kind of lost their meaning. It was like a good one's a TTY. No, a lot of people are using a teletype interface, the interface with a computer. They're using a graphics card and a keyboard and a monitor. We still call that TTY.
Starting point is 00:59:32 Yeah, the terminal emulator is in the same sort of... Terminal emulator and TTY are technically entirely interchangeable terms in the way they're currently used but Like they again it's like they do actually have very distinct meanings. Also my camera is just going out of focus Yeah, I noticed that too. Yeah, like with TTYs we all use traditionally a Pseudo TTY where it is not really it's a TTY emulator if you want to be actually explaining what it is yeah it's usually it meant something like a VT100 where handles all the fancy askies or antsy control stuff and asking characters and stuff like that or it's like yeah but
Starting point is 01:00:27 it's one of those stupid word reuses that's lasted over like 30 years yeah but at this point like the sanction doesn't even matter because no one again no one is using a physical terminal and physical terminal anyway so like any any physical terminals are at this point just a monitor with a keyboard plugged in as well. Unless you're doing something weird like firmware development or building, doing that kind of hardware usage, but still you have a serial chip that does the communication and it, you still use a terminal emulator at that point. Like something like GUScreen that is still emulating a terminal. Even though it's a little
Starting point is 01:01:15 bit of hardware mixing, it's still emulating a terminal. So going back to Nix for one moment, So, going back to Nix for one moment, this is not something which the regular user is going to, in most cases, at all be affected by. Nix and multi-user systems. Most people don't have a multi-user system. Like, you're just the one person who's system and that's it. But I did see in here, and I think with what I've heard so far, this makes sense how this works, but it mentions that Nix does have support for multi-user setups as well.
Starting point is 01:01:55 Yeah. I mean, you can do that with like annual, the Nix distro, but with Nix, you can go a little bit further because like earlier mentioned, you can manage your home files and so it's not really built in the next OS specifically or next itself. It's a separate project that you do your own kind of style.
Starting point is 01:02:19 It's called a home manager. It is a way of to manage your. Home directly basically. And you can build up a method and a workflow where you can manage like eight different users that has a different environment, different files, different text editors, and only those users will have access to that. So it's like you have a user called Alice and then you have a user called Bob.
Starting point is 01:02:53 One uses Vim, the other one uses Emacs. One could try calling the other and it wouldn't be in their path. And one could have a picture of a bird as a background picture. And the other one could have like a dog. And they're not going to see each other's files, but they could look at the dog files
Starting point is 01:03:16 and kind of see what's going on. But I mean, it's a more advanced top concept of being able to manage multiple users and something that is actually great for the community provided builders. We have like 100 users on the different builders and everyone just has their own setup that's separate from each other and And we just managed all the minutes, just a single edition of a new line. Add your SSH key. You've got access.
Starting point is 01:03:55 Okay. So I wanted to ask you about sort of your history with Linux and your history with Nix, cause you mentioned you've been doing this for a couple of years now. Um, but when did you start using Linux and when did you eventually find your way to Nix and like what, what actually attracted you to it? So originally I started, I think it kind of a bit more of like me starting out as a programmer. So when I was 11, I wanted it kind of been more of like me starting out as a programmer.
Starting point is 01:04:25 So when I was 11, I wanted to build a website. This was back in 2012. Most website builders as far as I am aware were paid and it's hard to install. We need to have like admin access on a windows laptop to just install arbitrary programs. So I took out notepad and I learned HTML. Uh, sometime later I learned JavaScript, CSS, and I learned Python, Ruby, Lua, all that.
Starting point is 01:05:01 Adventures are doing getting into like, oh, what's Linux? And I was in Scouts at the time, and my Scoutmaster, he used to be a, he might still be, I'm not sure, a administrator for a school district. And so he got me into the idea. I started out with a boot into, I think it was like a boot to 12, 11, whatever, somewhere around that time. Okay. This is like 13 years ago. I don't remember everything. And let's be from there.
Starting point is 01:05:40 I started learning things like Java and how to make Minecraft mods, how to use lightweight Java game library or game library to make like you open GL stuff, that kind of stuff. Then eventually, I don't know how I was like, I want to build an operating system. And at this point, I was in middle school. Aha. So time.
Starting point is 01:06:08 Yes. So I found the OS div Wiki and I got a hello world. And since then that's been a large thing of what I've done, is being able to do systems programming and doing stuff like learning assembly in a week and learning all these different things for systems programming. And eventually I switched around random distros,
Starting point is 01:06:43 like I used Fedora at some point. Then she, I reached high school, I was like, I've been using Ubuntu for however long. It's time for me to use Arch. And so, the morning before school, one day, I think this was like sophomore, I was like, it's time to install Arch Linux.
Starting point is 01:07:10 Big mistake. Because my first period class was writing. And the first thing we needed was Google Docs. And guess who didn't have network access? I forgot to install WPA supplicant so I had a pullout in Ethernet cable and get that all set up and figure out how to get networking working and all that.
Starting point is 01:07:40 And eventually a few years later I was like, oh, I heard about Void Linux. I'll try Void. And then at that time, I'd been living in Oregon my entire life. And so we kind of get into 2022 now. And I moved down here for family reasons to Southern California.
Starting point is 01:08:01 And the thing with the US is every state is kind of like its own country. Right, right. And so things are different across states. And the problem I ran into was the power at the new house is a little bit different. OK. To the point that my overclock would kill my system. That's a new one. So guess who's file system corrupted?
Starting point is 01:08:34 Hey. Hey. My file system corrupted and I'm like, uh, everything is gone. So I was like, I've heard of this Nixestro called NixOS. My current drive is not gonna be recoverable. The ext partition is completely screwed up. There's no chance of So I got the ISO, I installed it, I had a basic Linux system and then I was like what more can I do and I just kept on learning, kept on figuring things out. Eventually I was like oh this package called lens, which is for Kubernetes stuff is out of date. No one else is updating it. There is one maintainer, but he hasn't touched it in like six months.
Starting point is 01:09:36 I'll figure out how to update a package. So I did it. I was like, this other person isn't going to maintain it, so I'll pick it up as a maintainer. From there, I did other stuff. I eventually picked up Zig again. This was two years ago now. Then I was like, oh,
Starting point is 01:10:01 this new version of Zig needs a newer version of LLVM that's not in its packages. Guess I'll package it. So I built it, totally pressed it. Okay. I got that done. I say run some other stuff, run some other things. I was like, oh, I need another version of LLVM.
Starting point is 01:10:27 I'll update it. But now we're getting to the point of NixCon North America from 2024. And the person who was maintaining it mostly, there was five people in total, he wasn't touching it. He got, didn't have the time, things happen with maintainers like that all the time. And so I'll maintain it now.
Starting point is 01:10:58 And through there, I kind of did the work of cleaning up LLVM because fun fact, LLVM isn't just LLVM. It has a million things to it. And so we've been packaging LLVM versions since LLVM 12. And LLVM releases every six months. And so we had like each of those had their own version of each package inside of them. So you have like a hundred files and there's like a million duplicate lines. So I did the painstaking thing of removing every single duplicate line
Starting point is 01:11:47 and folding things together. So there is a common entry point for each package and each version. And so I cleaned up LLVM. And then from there, I was like, I want to do more. What else is there? Oh, there's all these packages that are maintained. I'll pick them up. So then now I maintain SC Linux. I maintain Flutter. And I was like, oh, I want to build the Flutter engine
Starting point is 01:12:18 because I want to embed Flutter into a Wayland Compositor. It's like, oh, I'll figure out how to build Flutter. Turns out Google sucks at packaging. They have this thing called DeepOptTools, which calls their own version of Python that they have pre-built from a Go binary. It is as cursed as it sounds. And I built it and I made it reproducible.
Starting point is 01:12:49 And so I maintain Flutter and this is why I believe they recommend is it they recommend a snap package or something? I know they have a package for it. The kind of expensive way you download it is you just get clone the directory and then or get cloned or get a whole bunch. And then some project then. Then you just call the shell script, which downloads from their binary. The thing is Google sucks at packaging. I can tell.
Starting point is 01:13:22 Yeah. because Google sucks at packaging. I can tell, yeah. But yeah, from there I got Flutter, the Flutter agent package. And then I was like, oh, we have the standard environment to provide things like the C compiler, your core utils, all that. No one's maintaining that. And so now at the point of October of last year, I was like, oh, I'll pick it up.
Starting point is 01:13:51 Now I maintain standard programming along with farther other people. At some point, I got a commit bit, and so I can break NICs for everyone else and stuff like that. Then eventually, because of the other LLVM stuff I do, and break nicks for everyone else and stuff like that. And then eventually, because of the other LLVM stuff I do, like, oh, I want to get Clang running inside of UEFI. I got a LLVM commit bit and all that. And we're up to today now.
Starting point is 01:14:21 Having that kind of power is fun. A friend of mine just got employed with KDEV and was given master branch commit rights on KDE. Ooh. Yeah. And the thing is in Nix Packages, we kind of want to limit how much the commit bit can do, but the problem is, it was like, no, committers can do a lot. And so yeah, committers can do kind of abuse things, but everyone kind of doesn't because we're good. That, that story you had about installing Arch just before class. I've brought this up on the podcast a number of times.
Starting point is 01:15:09 This is very reminiscent of the stupid way I did it. So I was in my second year of university at the time. I installed it like the day the holidays ended. So I was in class with a TTY Just getting th- trying to like connect to the university network For the entire class. Now the fun part about the class is I was in a cloud development class So, you know, it's kind of on brand. I'm using Linux. We're doing we're doing Linux things But I didn't get much I did not get much stuff done during that class that first
Starting point is 01:15:51 first day or the first couple of days after that because there's a lot of stuff that I Just didn't really think about there was some software. We needed to have that. I didn't really think about so I had to set up VMs for that. No, for other classes, not for that class. Um, I had like a, a, um, what do you call it? Like a, uh, a UI design class we needed some software for, and we needed to use something specific because they wanted the project file for it, which is always fun. Um, so I, I very much know that story myself. Don't install art or any, any system you're not familiar with just before you need to use the system.
Starting point is 01:16:36 Bad idea. Yeah. And the fair thing with my situation was, oh, it's a writing class. You would think you wouldn't really need to do stuff until they're like, Oh, hey, open up this thing in your Google drive that I shared with you. It's like, Oh, I don't even have networking working. I don't know how you didn't think of that one.
Starting point is 01:17:00 That's crazy. That's such a, that's such a thing to miss. So the thing, I think the thing was like WPA Supplicant was installed. But it wasn't set up and I didn't have Network Manager and WPA Supplicant isn't great to mess with because you have to remember the commands inside of it and great to mess with because you have to remember the commands inside of it. And it's just a pain in the butt to mess with. Right. Right.
Starting point is 01:17:27 And so I was like, I'll just grab an ethernet cable and just plug into the wall. Yeah. In my case, I, I couldn't work out how to do the network verification because they, like, they had like a, a thing on their thing on the university site like what like what do you call it the security it needed to be sent to or Yeah gateway Yeah yeah yeah and I could not work out how to do a lot of the self so I was just trying to like how do we do this luckily I did know someone who was messing around with Linux
Starting point is 01:18:03 themselves and they could help me with it, which is nice. Um, again, don't, I don't recommend doing this. Get things working beforehand. Yeah. Don't rush installing a advanced Linux distro. It does make you learn it quickly though. Yeah. It makes you go in a hurry.
Starting point is 01:18:27 It's just maybe not the, maybe not the best way to handle class though. Yeah. So you mentioned eventually making your way to Nix and starting to manage packages, but what about Nix was it that attracted you? Because you mentioned your file system had corrupted, but I'm not really seeing the link between those two points. So my thinking was, well, the system crashed and if all my.files is on GitHub, it'd be a lot easier to set up because I just do a single command and just get everything done. And yeah, I mean, that's how I was able to install into other systems I have so easily was my setup was is already to go.
Starting point is 01:19:15 It has my desktop environment. It has my shell. It has my text editor. It has Git prepared. And so all I have to do is just partition. Do a couple of things with maybe like the graphics drivers and partitioning, and then just install and I could bring up a new system in like 10 minutes and then spend the rest time just waiting for it to fetch and build. Okay. Yeah, actually makes a lot of sense then. Now you're not just a package maintainer. As you mentioned earlier in the show, you also were involved in the release management
Starting point is 01:19:53 of 2411. So how did that come about? That's a good question. I don't remember. When you start with a, what does a release manager do? And then we can go from there. So it's kind of in the title. You managed to release. So basically you are like, yeah, you're like, Hey, this is going to be the schedule.
Starting point is 01:20:20 This is what's critical. Let's get to it. Let's do all this stuff. Make sure all the, the branches are set up. Uh, stuff like that. You also get to pick the icon for the release. You get to pick the next releases name, which actually with, uh, 25, oh five, since I was really measured for 24, 11 11 I've got to pick 2505 I named
Starting point is 01:20:48 it warbler and that's actually the name of the street I lived on in Oregon hmm so it's kind of good and warbler is actually name of a small bird that I believe is how I came to it because things are named after animals so it's like oh it's gonna be a little bit of an Easter egg that says hey I I did the previous release oh yeah you're gonna do all the kind of things you're basically sort of the BDFL for the release right you do work with the previous release manager but they're there to kind of like give guidance and be like, oh, this thing you might have forgotten about. Or it's like, hey, I have this question for you. What do you think about this stuff like that? It's a very like kind of like mentor mentorship kind of position, but a lot of the
Starting point is 01:21:46 stuff is already on the release management wiki, right and so We're all just copying pasting and kind of just like going through that so it's pretty much just making sure that everything is in order and Yeah You said you set the timeline for the release I put it over so it wouldn't interfere with Thanksgiving because it's hard to push out a major release when there's a holiday right right sure That's fair. Yeah. So, OK. That's pretty much it. Yeah. What made you?
Starting point is 01:22:31 Yeah. What brought you to that position? What made you want to do that? I do not remember why. I think I was just like. This seems like an interesting to do. So then I kind of was like, I want to do this now. And I did it. That's kind of just how it happened.
Starting point is 01:22:56 You know what? That's been my entire life is just like, Hey, I want to do this thing. I'll do it. Yeah. Hey, like I've had people that give me these like big long spiels about like, this is like, I had, I had Nate Graham on here yesterday, and he went on like a 10 minute rant that's the, for anyone who doesn't know, this guy writes this week in KDE. He has, um, what is it? Adventures in KDE, I think is his personal blog. Does- he's on the KDE board. He went on like a 10-minute rant about how he joined the KDE project because he felt like
Starting point is 01:23:37 this was like a- like a good thing for the world. We need more open source software. We need- we need good open source software. We can't have- we can't have these major companies screwing people over and then you're here just like I did it because I did it. Yeah. It's a nice change of pace, I'll take it. I mean, I couldn't think of any other reason of what it would be. Cause I do not really recall.
Starting point is 01:24:07 It's just like, Oh, this seems interesting. Just do it. Like the experience was there. So you wanted to see how it went. Yeah. Yeah. Okay. You'd already been like fairly active in the Nick space as well.
Starting point is 01:24:23 Like you'd be, how many packages do you maintain? Um, do you want to count every LLVM version in the sub package? If you want to. Okay. So there's LLVM 12 to 21. Each of those has, uh, let's see, they're the Clang, LLVM, Uh-huh. Each of those has, uh, let's see, they're the clang, LLVM, fin tools, compiler RT, libc, libcxx, openMP, that's at least seven, MLIR, LLDB, there's like 20 things. So that's already, well, like eight, nine versions times 10 packages. So that's like 90 there.
Starting point is 01:25:14 And then you have, uh, the, like the five flutter versions, and then you have the five, uh, like different, uh, packages for SC Linux and then the Zig with its three versions. We have Zom-Ninx. Then we have what else is there? What else do I maintain? Oh, Lens. The first package I picked up. So I managed like over 100 probably. I'm on Repology so if you could just plug in the email that I have on GitHub. I always forget this website exists. I don't want to do it right now. I'll check and look afterwards. If anyone wants to go look it up and let me know in the comments, do that. Yeah.
Starting point is 01:26:14 Yeah, it's a lot. Oh, and technically the standard environment is its own package. So that's another package. Okay, so the answer is a lot. Yes. So to break your system. So since you're already doing all of that, it's like, Hey, this is sort of a, a natural progression might as well just see how it goes.
Starting point is 01:26:40 Yeah. That's kind of how things seem to be. I think, I don't know. Yeah, that's kind of how things seem to be, I think. I don't know. So you've mentioned earlier that Nix has been getting like more traction, more popularity. Where do you see that going? Right? Because like, obviously, the current direction that we have for handling dependencies across different systems is like Flatpak. Like this seems to be the main way that things are being done. Snaps, Canonical wants them to be, but not outside of Ubuntu.
Starting point is 01:27:14 And App Images, some projects have them, some don't, but Flatpak's clearly the thing that the FOSS space is like rallying behind. that the FOSS space is like rallying behind. Um, but where do you see, where do you see Nix fitting in here? And where do you really see Nix going? I see. I'm not really sure. Um, it's kind of all over the place. That could be, there are a lot of different ways Nix could go.
Starting point is 01:27:43 I could see someone potentially riding like something kind of like bottles, but it is like a flat pack kind of thing where it's like, here's your store of like, like your marketplace, but it's all Nix stuff that you can easily match with there instead of having to manage like your stuff. And then you just have that on top of like a Buntur or whatever. That could be something someone makes. Well, I see, I see Nix was kind of just sticking around like Arch Linux where it's like, hey, it exists.
Starting point is 01:28:17 It's the advanced distro that everyone's gonna probably try out at some point. Right. Okay. Okay. Um. So I don't know if you know anything about it. If you don't, we can just move past this. But anytime the topic of Nix comes up, there's also mentions of other projects like the GNU Geeks project, which I understand try to serve a similar function. I don't know if you know anything about that though, and can really comment
Starting point is 01:28:50 on that. I know a little about Geeks. I don't know how to say it. People have told me it's Geeks. So that's what I've been going with. It could be because you're Australian, I'm American, different accents. I don't know. It doesn't matter. I always say, I always say GUICS because that's what it looks like it says.
Starting point is 01:29:10 That's what I used to say when I complained about it. Well, I don't know. You're gonna stop me from coming. But yeah, from what I've heard, GUICS is a fork of NICS. That's as far as I know. I know it's like that, but trying to shoehorn into like gen two basically.
Starting point is 01:29:40 I don't know. I've never used Civic I was I wasn't sure like if you know any man like it if if not, we just move past that That's so good. I it's been thrown around a lot. I've seen about it. Mm-hmm. I've looked it up Never played with it. Sure I've looked it up, never played with it. Sure. Yeah. Okay.
Starting point is 01:30:05 That's understand. I know, I know, I know about it. I don't know enough to like ramble on about it. So if people may be interested in the next project, not just as like a user, but somebody wants to get more involved in the project, they maybe want to start like managing packages or helping out with documentation, things like that. Um, what do you think is an area that needs the most support right now? And where can people go to start helping out with that? So two places, as always documentation always needs improvement.
Starting point is 01:30:45 Two places, as always, documentation always needs improvement. That's probably true for any project out there that's large. Then just maintain a ship. Nix packages at this point is like 140,000 packages. It is essentially the luggage package repository for systems packages out there. We have Python packages, we have node packages. Having people maintain all those is difficult. There is a lot of people like myself
Starting point is 01:31:16 who maintain a lot of duplicate packages or even just like a lot of different packages. And the problem with that, it kind of strains out a lot of people. We only have like, last time I looked was about a year ago and it was like 230 committers and there's a lot of people involved in Nix. We have a lot of people involved in Nix. We have a lot of PRs. And so just reviewing packages, helping with documentation, picking up packages that haven't been touched in like two years or hasn't or is out of date, just whatever you can see that,
Starting point is 01:31:58 like you think needs improvement is always welcome and it always helps out. So if somebody wanted to get involved with that, um, what would they need to do? Where would they go? Um, I would think, uh, the Knicks OS matrix space, cause that's where everyone is at, there is the unofficial discord, but that's unofficial. I'm on there. A few prominent people like, uh, Tom Baric, he's another committer and a previous release manager.
Starting point is 01:32:34 A lot of people are there, but the matrix is like the centralized place to go. And then you can like coordinate with other people. Right. And then you can sort of ask about what need, where, who needs support, what needs support, where things are lacking and sort of directors of, or I guess even if you don't have like a set thing, you'll like it. Obviously we're going in like filling in gaps is important, but even if you just want to like get involved and just like, maybe you notice maybe 140,000 packages, maybe there's
Starting point is 01:33:03 something that's missing there and you just want to put it up there. And then no one's done before. Obviously that's more maintain a ship, but there's still a lot. There's a lot of things there. But like, there's no reason why you have to just fill in gaps. If that's not a thing that is interesting to you. Yeah. There's a lot of people can do.
Starting point is 01:33:23 There's a lot of open issues that even if you don't maintain something, you can look at an issue and try to help resolve it to get it closed. Just whatever you feel like really is possible. There's a lot of work there and not as many people as you would expect for the amount of work, I guess. Yeah. And it's actually kind of easy, I think, to get involved with Nix because it's a monorepo on GitHub.
Starting point is 01:33:56 All you need to have is a GitHub account. Practically everyone in FOSS has a GitHub account. Uh, you just need Nix itself. You don't have to be running NixOS. You just need Nix and a GitHub account and some free time. And then just do something. Yeah. I'm looking at the, um, the Nix repo as 3,200 open issues.
Starting point is 01:34:24 Yeah. Look at how many commits we have. Wait, where's the number? It's gonna be on the... Sorry, I had the... For my overlay, I have it squashed down into a miniview and disked, then GitHub was hiding it. 19,703 on Nix itself.
Starting point is 01:34:48 Yeah. Yeah. And on Nix packages, 779,000. Yeah, we have a lot of activity going on. And there's basically a commit like, or a merge happening like every 30 minutes. How does Git behave with a, uh, with a commit history that long? Does like, does if you run the history command, what happens? Oh, uh, so do not run Git log or Git history. Yeah, yeah, yeah. Because it's gonna take forever. Especially do not do it when you have like one gig of RAM.
Starting point is 01:35:34 I don't know what you'd be doing with one gig of RAM in 2025. But do not do it unless you are ready for your CPU to struggle on a single core. Because that single core is just going to compute everything for the past like 20 years that repos existed. That's fun. It's probably, yeah. I'd imagine the Linux kernel probably has the exact same problem there, where it's like never never never touch that command. Yeah, so does LLVM. I think LLVM is at like 1.2 million commits. Jesus.
Starting point is 01:36:14 And I think Linux kernels at like 12 million or something like that. Those two repos have several times more commits in these packages. Does Git have the option to do history paging because it should? Um, no, I think it computes everything and then outputs it. Because because the way Git works is the parent commit affects the revision hash of the previous commit. So it needs to compute the previous to get to the next. I don't know how Git commit exactly does that in a way that doesn't slow down every time you make a git commit, but there is just doing a git log of everything.
Starting point is 01:37:10 Also committing still works fine. You're not waiting 30 minutes for that. No, it takes more like five seconds. Okay. I know in the early days of Git it was really, really bad with Monorepos. And this is why there were a lot of competitors that came out around, like very shortly after Git. But Git got better at that over time, it seems. Yeah.
Starting point is 01:37:38 And we need faster processors now. Sure. Yeah. Yeah. But I remember, I think it was actually around like, yeah, Mercurial. Facebook, they internally use Mercurial because back when they were starting up, Git was unusable for mono repos. And the solution that was being suggested at the time is just don't just break it up into smaller repos like no we're not going to do that
Starting point is 01:38:13 so they yeah they just went to something else instead because it worked better yeah but i guess as the linux kernels gotten bigger as well they kind of had to address those problems because you know it's a forest problem those problems because you know it's a forest problem. Yeah so I think we've pretty much covered everything I wanted to cover. Is there anything about Nyx that you wanted to bring up still? Kind of well so I know you have talked about the System 76 Thelio Astra, right? Uh, the Arm desktop that System 76 built. Yes. So one of the things with Nix is when you rebuild the world, rebuilding everything, you need a good processor.
Starting point is 01:39:04 rebuilding everything, you need a good processor. Because you're rebuilding everything. And that sucks when you have like four cores. Even 10 cores isn't that great sometimes. Well, this is where, like AMD Epic or Ampere is very useful like AMD Epic or ampere is very useful because those systems have like 64, 80, 92, 128 cores. So it's like you have exponentially more compute. And so Nix is great with that because you have two ways of being able to manage your job or like your builds. You have the cores flag and the jobs flag and the cores that takes how many cores like cores that make job is gonna run inside of a derivation and the job is how many next derivations to build at once. And with Ampere, you can just build it a lot
Starting point is 01:40:07 on a single system. It is exactly how we do our CIF. We actually have a few Ampere systems that we just plug in to our CI server and then build. And fun fact, I have an Ampere desktop in its own case as my desktop. Oh, wow. The problem is I'm on AMD GPU. And one thing AMD is known for is not supporting ARM.
Starting point is 01:40:42 is not supporting ARM. And you've also covered the desktop environment. I run it. Guess what desktop environment I run. Very popular. Similar vein to Ampere. It's an alpha. to ampere. They very popular. I would like it's an alpha. Oh, right, right, right.
Starting point is 01:41:17 Yeah, but so I run cosmic on ampere and because of an AMD GPU, it doesn't work. Uh huh. Uh-huh. So I have to debug a graphics card to get a rust built death home environment to work. How's that? How's that going? How's that gone? Very little progress because I have no time. Right. Fair. So what do you use instead of Cosmic so you have a desktop?
Starting point is 01:41:59 I use my laptop. That is an awesome... So the way I do things that I've been doing them since I've had ampere is. And that I've been on cosmic, I just run cosmic on Apple M1 Pro. I then SSH in my desktop. And then I do things like that. I guess, look, just pretend like your intention is to run as a head, I can do many jobs at once and be able to do multiple things at once while my computer is doing things that multiple, just a lot of work at once. gaming. If games work and I figure out a way to run a box 64 on ampere but the
Starting point is 01:43:12 problem is I do this little thing you may not be aware of it's called page size. The memory is allocated paging and And Apple Silicon uses a 16k page size. On AMP here, I have addressed it to 64k, because higher page size, less many pages you have to allocate for a single large allocation, more performance. The problem is when you come to emulation. Emulation is like a 4k page size, which doesn't map into 16k or 64k. That means no games.
Starting point is 01:43:57 And you know how you fix that on a Thaie? How do you fix that on a thigh? How do you fix that? You run a VM using something called move VM, which runs a sick, it runs a 4k page size arm VM on top of your 16 or 64k page size system. Okay. They're running and it passes your graphics through. It's built for not NixOS. Not NixOS. And because Atsahi requires a special graphics driver that is their fork of Mesa, I can't test it.
Starting point is 01:45:02 Unless I fix the graphics card to work with Cosmic on my Ampere desktop, and then I finally could get moviem to work which and I'll be able to finally get boxxx34 to work which finally means I can get steam it's a lot of extra work just to get video games to work and the only reason why I want to do this because I want to game on Ampere Arm. That would be cool, don't get me wrong, that would be really cool. The only thing that runs right now is Minecraft. Because that's Java. Right, and... yeah. Java runs on 6 billion devices.
Starting point is 01:45:41 So yeah, I was gonna say, what's the numbers? Is it six billion? I don't know what like, sorry, this is random side tangent. Is it, wait, is it three billion? I don't even know. I don't know what the number is supposed to be. As far as I remember, it was been that little tagline when you install Java, it's runs on six billion devices or whatever. Who knows how they count it? Don't worry about it.
Starting point is 01:46:15 It doesn't matter. Don't think about it. It's Oracle. They pulled all their six, just their six vendors and customers so um hopefully you get that working that would be that would be good hopefully cuz then that will mean other people could run steam on arm on the not empty I saw he yeah on more sensible arm chips that people might actually have well um I hope that goes well uh was there anything else you want to mention
Starting point is 01:47:05 or can we just start signing off there? I can say one quick thing. Okay. I am trying to get Clang to run inside UEFI because you can build your Linux system from your firmware. Why? Because the joke is that UEFI is already its own operating system with how much it implements. is already its own operating system with how much it implements.
Starting point is 01:47:51 Did you know UEFI has user accounts and multi-threading? That makes sense. Have you started this project? Is it progressing? I am waiting for some Googlers to make some. Approved or approvals from them. And the thing with Googlers is they're also busy. That's fair. Yeah, that makes sense.
Starting point is 01:48:28 But hey, at least the Fushia people also want this. So it's like, if they want it and I want it, it'll happen. So maybe in five years, you could build your Linux system from your firmware. So stupid. That's so stupid. I love it. But more performance. I guess. You don't have the overhead of an operating system. You only have your firmware then. You only have your firmware then. Mm-hmm.
Starting point is 01:49:07 That's cool. I do like that. That's really cool. Um, well, that's a high note to end on, I guess. Yeah. Where can people find you if you want to mention your stuff or if you want to get involved in NYX Where should they go to? I Would say the NYXOS matrix There is nyx.dev There is is all that stuff linked on the NYXOS website
Starting point is 01:49:40 I think it's under nyxos.org slash learn I think it's under nixos.org slash learn. Okay. And then people can find me on Twitter at Ross computer guy. I am also under that same handle on GitHub and practically anywhere. If it's not the computer guy and you see a profile picture that looks like me, then it'd be Ross computer guy. So I, I'm usually everywhere. Like this guy, Macedon, Reddit, my Reddit account actually a different username. It's u slash spaceboy Ross, but that's Because I made that account like 10 years ago and you can't change names on reddit
Starting point is 01:50:34 Really? Yeah, once you make a username it's locked Huh, you cannot change yeah That's dumb. I'm honestly I'm surprised they don't charge for that. Considering Reddit I'm surprised. Honestly the fact you use your... Or use the coins or the gold. Hmm. Well the fact they don't charge I have a feeling there's something really wrong with the infrastructure where they can't change it. Um, anyway, uh, nothing else you wanted to mention. That's pretty much all the stuff you want to direct people to. Yeah. Also. Yes. I didn't want to mention it the entire time, just to, just, just because it's going to bother people. Um bother people um yes there is there is a duck in
Starting point is 01:51:27 the background yeah the duck vtuber anyway um my channel is brody robertson i do linux videos there six ish days a week i've got the gaming channel brody on Games. Uh, I may have finished Stranger the Paradise by the time this goes out. May not, I don't know, we'll see. I'll also be playing Portal 2, which is probably gonna be funny, because I've never played it before. Yeah, I've actually never played- Oh, I have! Yeah.
Starting point is 01:51:59 It's fun. Well, okay, I've done the Portal 2 co-op. I've never actually played the single player. I've played the single player, but never portal to co-op. I've never actually played the single player I've played the single player but never played the co-op That's probably the more normal way to handle it I've got the react channel that is a Brody Robson reacts upload clips there from the Streamers so check this out if you want to if you want to see the video version this year in the audio version go to YouTube at tech over tea the audio version go to YouTube at tech over T
Starting point is 01:52:25 The audio version is available on basically every podcast platform. There is an RSS feed on Spotify. We do have video as well If you're one of those people like Spotify video for some reason, um, yeah, I'll give you the final word What do you want to say? How do you want to sign us off? What do you want to say? How do you want to sign us off? My cat will say bye. Aw, I should have mentioned that earlier. She'll hear the entire time.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.