Episode: 2198 Title: HPR2198: How awesome is Guix and why will it take over the world Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr2198/hpr2198.mp3 Transcribed: 2025-10-18 15:40:40 --- This episode of HBR is brought to you by Ananasthost.com. At 15% discount on all shared hosting with the offer code HBR15, that's HBR15. Better web hosting that's honest and fair at Ananasthost.com. Hi, I'm Klake and I'm here with Chris Weber to talk a bit about Geeks. Oh yeah, hello, hi, so good to finally set this up and actually do this call thing. Yeah, we've been kind of talking about doing it more or less on and off for a bit and yeah, yeah, I was checking actually I did a recording myself first talking about Geeks from a slightly different perspective and I was thinking should I release that or should I just go with this one completely and then today I recorded it three months ago and then I listened to it now to see maybe I should mix it together because it was cut up in pieces I was doing it while while walking to office and I listened to it now and it was real rambly so I've never got to publish that so that's that's sort of why I wanted to to bring you and because you've been actually speaking on this and so I figured you got this sort of sorted out how to present things. Oh, I hope so, who knows, you know, so let's start with a sort of overall perspective for those who don't know anything what what Geeks is. I wonder what is this thing. I wonder if I should have been smart and pulled up my notes from the talk I gave before. I'm going to I'm going to do that in the background while I bring the while I talk about that. Yeah, so Geeks, it's how we roll. Yeah, that's right. I know also my typing is super loud on this computer so I've got one of those kinesis things that are for people with RSI so Geeks but to get to the topic we actually are supposed to talk about Geeks is a functional package management system and there's also Geeks SD which is a Geeks system distribution which is a full distribution using that. Geeks is pretty interesting. It's spelled GUIX which makes most people including me initially think that they they should pronounce it GUIX but it's French or the main author's French so hence the name Geeks and we so yeah, it's a new project. I've been contributing to it a bit. I've also been just really excited about it. It has some really interesting properties in that because it's functional package managing you can kind of do cool things like time travel back and forth kind of like kind of like a Git repository where you can kind of roll back if something goes bad and etc. And there's a lot of interesting features to it like that that I guess we should actually go into but that's yeah, there's a couple of things you already brought up here so let's unpack that a little bit. Yeah, so first there's Geeks and there's Geeks SD. So when I first came into contact with it, I just knew about Geeks which which you can see it as an additional or supplemental package manager to your existing Linux distribution. And I guess once you have all the packages from Glib C all the way up to X then making it a distribution is just a matter of setting up the startup and getting everything going and having some sort of innate and I guess that's what Geeks SD is basically. Yeah, sort of. I think there's actually some interesting layers. I think you're right that you know that the really hard work at Geeks is primarily in the package manager but there are some interesting things that you know using those same layers as the package manager that makes a distribution side of things really interesting. I mean, so I guess we should go to those in detail. Would you refer I ramble into why I think I'm not sure which side of this tree I should ramble down yet. What's yeah, I think I think we can go into maybe a bit superficially what is functional package managing and why is that good and then we can go back to how how that ties in with the the whole distribution thing. Right. Yeah, I think it's interesting, you know, describing it as functional package managing. Package management, I think doesn't really give people a good idea of why it's interesting from the beginning. I mean, probably when I heard functional package management, I imagined a bunch of Haskell people, you know, running around is shouting monads over and over again. Yeah, I didn't know why that would be interesting to me. My first reaction when I heard of Geeks was I was like, oh man, like the world does not need another free software packaging system, but it turns out that phrase free software package manager actually means something really interesting, but I think we in order to really understand it, you need kind of a very brief description of what functional programming means in order to kind of unpack that idea. Oh yeah, that's true. Maybe we should start from there. We don't know really. Right. Not maybe not everyone knows what that means. Well, I mean, you know, I've been a free software advocate for a long time and I really didn't know what functional programming really meant for a long time. I mean, I was a Python web developer and I was like, you know, I've got functions here. Things seem to be functioning. It seems like, you know, what and you know, what's this having to do with function? Yeah, what's the opposite of functional? Yeah, right. Yeah, exactly. Well, it turns out in functional, I mean, functional programmers might say that imperative programming is dysfunctional, but there is there is that kind of reputation of functional programmers kind of ways, waking their fingers at everyone, but I mean, that partly does come from there's some really interesting properties you get when you go into a purely functional system. So to define what purely functional really means is it means that when you give a procedure, you know, people are used to the idea of having, you know, a function or a procedure where you have input and then it has output, right? You know, you pass in some arguments and you get something return back. Well, in the pure functional system, you have a guarantee that you will, if you pass in the same input, you will always get the same output back. And that also in order to be able to get that guarantee and really tied in with that is the idea that there are no side effects and side effects are things like, like, you know, in the middle of things, kind of reading and writing from some input output source or, you know, or all, or, you know, maybe write a displaying beeping from the screen, you know, like, you're, you basically can't do any of those things. You also can't change variables that anything else in the program might use. So you can't have global variables that you quote unquote, you take, you know, so if you have a list and you find out that something, somebody passes in some sort of list to you and you're like, oh, well, they're going to use that list later. It would be really helpful if I just, you know, tacked on an object for them. Well, that person might not be expecting that and suddenly they have a, or maybe you didn't even think about it, you just popped off something off the end of the list because you needed that object. Well, you basically change the list to which someone else had a reference. Right. So that person had a reference and then they might be very surprised to find out that that list doesn't suddenly has something, you know, gone from it. So a purely functional system won't do these surprising mutations and it won't have side effects. I mean, when I hear mutations and side effects in functional programming, I imagine, you know, some sort of person like, you know, some, some person in an office and they're they like take some sort of bottle of pills and they start mutating dramatically. This is the comic version of things that I imagine I had. And then some person with, you know, like functional, some functional programmer comes into the office and they put on some, they go, you know, looks like he should have checked, he should have read the bottle for its side effects and then he puts on his sunglasses and there's a couple of llamas on there. And, you know, I guess again, if you if you go to these, imagine the arrogant functional programmers wagging their fingers and everyone and calling procedural programming dysfunctional, I guess they would also think something like that. Yeah, yeah. But the evil mutations with these evil side effects. But it turns out that in, and I really hated functional programming for a long time until I discovered that I loved it. But because it's so annoying, you know, kind of curing that, that type of like finger waving and stuff like that. But it turns out, it really is true that there are a lot of bugs and programs that are solved by not having those surprised mutations and being able to kind of guarantee that property that you can guarantee that you will get the same result based off of those inputs and that you also won't mess with anything outside of that system. That's really great. Of course, it turns out most of the things that actually matter on a system require side effects in some sort of really useful way. Like in the thing that people really care about on their system is not just the programs that they have installed, but all the data that they built up with those programs and stuff. And you're eventually going to have to have side effects where you pull things in and out of a database or off your hard drive or something like that. One of the great, I, yeah, when we talk about, when we talk about states, or we talk about side effects, it's really about changing states. Right. And in the end, what a program does is it changes state and it interacts with the user, which is sort of changing the state of the world. So in the end, in practice, you're going to have side effects and then the the difference is how you sort of formulate that within the programming. Right. So the paradox is that side effects are the things that ruin the functional programming world. And they're also the things that actually really matter. And like so that's a big paradox for functional programmers. Now kind of the way that we kind of get around it is that you kind of make, you kind of, you have your beautiful functional programming world and you kind of isolate and quarantine the input and output areas. And you kind of prop up this beautiful system in the middle where you pass in input on one side as like as if they're the arguments, the function and you pass out the output on the other side. And then you've got this small like this scaffolding on either end of things that's holding up your beautiful city. But you've you've pushed that, you know, mutation stuff out to the side. So that I mean, that's one way to be able to look at how you can actually do functional programming given the fact that side effects are actually necessary. Did you do any programming in in Haskell with Mohamed? No, I've actually never really done Mohamed's at Haskell that much. I I've done a little bit of Haskell as in terms of going through some tutorials and stuff. But it was really getting into scheme, the programming language that got me really interested in functional programming and partly being involved in the guy in the guyle community and the geeks community. And you know, starting to kind of go down the rabbit hole of reading the little schema and you know, structure and interpretation of computer programs it. But it's also like watching, I watch the video of Bittomsen, one of my favorite guyle hackers has a functional reactive programming based game engine thing. That's that's David's unit on the social networks unit. And he has this this video that he put up of, you know, like his game engine slide, which was called Gile 2D the first time I saw it. And he was, you know, programming the system and he was able to live, change things in the system. And I just watched it like he was able to change the game as it was running. And like different parts of the system kind of all flowed out of this graph. And when I watched that video, I was like holy crap. There was a whole side of programming I don't understand that I need to understand it. And you know, getting involved in geeks and getting, you know, frustrated and angry that I didn't understand what this functional programming thing was, kind of forced myself down that whole of kind of, you know, picking it apart. So we kind of talked about what functional programming is, but we didn't really dive into what it gives you, right? Like we said, we said, you know, you know, you can, you have the guarantee that the same inputs will always give you the same outputs. And that's one of the cool things that that slide game engine that I was watching, one of the things that there's another very similar game engine called Elm that's able to do something really cool, also functional reactive programming. It's more than just a game engine, but Elm has a time traveling debugger where you can move, you can kind of scrub backwards and forwards across the program's time. And that's because, you know, you're actually folding over the inputs in time. And if you're able to always reproduce the same inputs that are coming in each other, the program that you can always reproduce the same outputs, which means you can just replay that system from front to back just by replaying the inputs and what the previous state was that were built out of that inputs, which, Yeah, we haven't even, we haven't actually said that, but that's the functional and functional programming. You look at it as a mathematical equation, where you have the value x that becomes some value f of x. Exactly. And so even though in Python land, we call the things that we're writing with depth functions, you know, a functional programmer will say, well, that's technically a procedure. You might write a function with it, but it's by default the procedure because you might do side effects and other things like that, whereas like a real mathematical function is, uh, won't have any of those things. It's a much more restricted subset of procedures. Okay. Uh, yeah. So, uh, so that's functional programming. Yeah. So that's functional programming. So what can we do once we end up having that? Well, I meant to the time travel type thing. You could also say, you know, like, um, you could also have like a guarantee of kind of atomic. So, so one thing that's kind of familiar to people is Git, right? Like, you have this atomic thing where, you know, you can commit and you can roll forward back into some time and, you know, you've got your kind of the local state of the things you're working on, but once that's done, you can keep going back to a previous state and it's, it's not going to break things. And that, uh, and also when you end up changing things, there's a guarantee that either things succeed or they fail. Uh, and there is that promise in geeks where, you know, so you've probably been in Debian or something like that where, you know, you've got, um, you've, you've been doing an upgrade in Debian or Fedor or something and suddenly the power goes out and you boot your system back up again. And there's no, there's no way to kind of restore things, uh, because like, it's mid upgrade and like fixing it is a big hand in the butt. It doesn't even have to be the powers. It can be as simple as, oh, yeah, I forgot this thing and then you do control C and you, and you stop the process and that could also end you up in a, in a state between things where nothing works. Right. So, I mean, this is jumping ahead a bit. Um, but you can imagine one type of feature is if you have a new output that you're building is entirely built based off of these inputs, well, you don't actually need to switch everything over until you've built up that new output. And then you can just switch it over all at once. Like, so geeks uses a bunch of sim links and we'll get into that, I guess, but you just switch out which sim link is pointing to your current state of the system, um, which means that like you can build up the whole thing and you don't switch everything over until it's ready, which means that you'll never end up with that mid upgrade breaking thing. And I, I did check the, the command that they use to switch things over is a atomic, uh, it's an atomic operation from the kernel level. So you won't end up with a broken thing even on that switching the sim link level, which is pretty cool. Yeah, I guess they, they create a sim link and then they move it to the position where it should be. Yeah, yeah. So you basically replace the sim link, um, so, so I guess, um, so, so this actually, I think we're starting to get to the point where we can kind of move into some of the other ideas of geeks. We've got an idea of what functional packaging is and we've given a hint about the sim link thing and that there's a sim, okay, and we, one thing we didn't look at yet is how, what does functional mean in the context of creating packages? You mentioned the atomic thing of applying, uh, the changes all at once when you upgrade packages. Um, yeah, yeah. So let's, let's talk about that. So, um, what in, in a normal, like, you know, the kind of imperative distribution, like Debian or Fedor or something, you know, you've got, um, so say you're, uh, uh, you're replacing, um, maybe I'm releasing my systems Python 2.4 and I'm moving to Python 2.5 or something like that, or maybe even 2.4.1 and I'm moving to Python 2.4 or two, right? So then kind of the traditional model of things you'd actually, uh, you know, add and then remove or maybe the reverse of, like, the files and basically just kind of write over everything that's currently there. Um, uh, in the functional packaging version and, you know, the, you also might be, if I replace Python in Media Goblin, depends on Python, well, that previous version of, uh, Media Goblin, uh, will, will, will, you'll just have left it in place and it's now just pointing, uh, it's, it's now just using the previous Python. Uh, but so one crazy thing about using geeks and nicks, we didn't even mention nicks, you know, yeah, yeah. It's on my list. Okay, we'll get to that later. Yeah. Yeah. So, so one of the crazy things that, like, was kind of mind-blowing for me when I initially saw it is that, um, Geeks is entirely based off of each new package that you built this entirely based, based off of its previous packages. So you started to mention this with, like, Jeal and Z. Um, so say I'm building up, um, you know, we've got something, uh, give me a package that, that's a good example. I can't think of a good one. I did say Media Goblin, but I want to think it's something that's not promoting my own stuff. Bash, right? Okay, so Bash. Um, so there are, Bash both depends on a lot of things and a lot of things depend on Bash, right? Um, and, uh, um, Bash depends on a lot of things and a lot of things depend on Bash. So when you have g-lib-c changes, right? Um, Bash needs g-lib-c and it also needs a number of other things in order to be built. Well, anytime you change g-lib-c, uh, you will actually a new version of Bash will be built. Uh, and that's because each package and geeks entirely depends on all of its previous changes. And so if you change one package, it will build a new package based off of that. And instead of having Bash just 2.4 or whatever, I have no idea what Bash numbers are on right now, but, you know, it'll actually be, yeah, I, I, it was 2.03 for several years, and then I'll just, then it's just going. Wow, I wasn't too far off then, I guess, maybe. Um, I guess it's on 4 or 5, certainly. Oh, okay. Yeah, I guess it, it's not at the Firefox land, but, you know, uh, no, not yet. So, um, the, so when you, when you end up having some sort of previous dependency, uh, all the, dependencies above it get rebuilt, which sounds like a big pain in the butt, but it turns out it's really useful because that's how you get that guarantee that you can roll forwards and backwards in time. And so you look, yeah, right. Someone might interject here and say, but well, that's not how it works in Debian because you have forward compatibility, right? So I up, up, I upgrade Glib C. And, and of course, the new version is compatible. So why should I also, uh, recompile bash? But as you're saying, that's because in the functional view of all these things, bash is a product of the inputs, and you just changed one of the inputs. So then necessarily the output must be different. So you need to compile that again. So if you look in your geek's, uh, store directory, it's like in slash, canoe, stuk slash store, you'll see, you know, like you see the, the package names of what you expect, like bash, dash, whatever. In fact, I'm going to look right now, might as well, uh, going to store bash, uh, oh, it's going to store. Oh, it's, it's the hash and then bash. That's why it was confused. Yeah. So I've got slash canoe slash store slash GVWF 71 blah blah blah blah blah, dash bash. And you'll notice that there's a hash prior to bash, which sounds like, you know, like, oh, what is that hash doing there, right? Like, well, you know, so the version of bash that I have, it's not just bash, it's bash that's, um, built, uh, oh, I missed another start, right? Yeah. So there's some, so there, but you know, regardless, it'll be, you have a hash before the name of the package. Uh, I actually have two bash dash 4.3, 0.39 on my machine. One of them is three one blah blah blah one of them three nine blah blah blah. And that's because at some point, and I haven't garbage collected my canoe store in a while, um, yes, functional package managing means that you bring garbage collection to your packaging which is kind of curious, but, um, the, uh, but because at some point, some dependency beneath bash ended up changing, uh, it ended up giving me a new version of bash, uh, which, which, uh, so at some point, um, that that might make you wonder, oh, well, that that could be really annoying having all of those things, but it turns out somebody else is building some of those packages for you, probably there is a system that can build things, uh, that's off in the distance. We won't worry about it too much at the moment, though I, you should remind me to mention the, the funding campaign that they're bringing up related to that later. Right. I want to bring that. Okay. Yeah. Yeah. We'll talk about that later, but, but somebody will probably have built it for you. So your, your computer is probably not doing the hard work, though it could, uh, is just pulling down the new bash when it becomes available, built on the new g lib c or whatever. But the good news is, if a new version of g lib c comes out and it makes bash really screwy, right, um, it will not be a problem because you can just roll back your whole system to the prior version of g lib c. Uh, and in fact, if there are multiple versions of g lib c on your system, uh, you can actually run multiple versions of bash or multiple versions of different programs that require the same library, but at different versions at the same time. Yeah. And each of those bashies have their own specific set of exact dependencies. Right. So people in web development, so like, you know, so one example is also, uh, so now we're getting to the really interesting feature. So, you know, since the output of a package of entirely both off of its inputs, that also means, and we've got this slash, can you slash store, we can move into the simlink for us now, right? I think we've covered I want to do something, uh, something first more a little bit more about background. So I want to know how you, you talked a little bit about it, you, you came into guile somehow. Uh, was that because you got interested in scheme and you started reading the sick p book or it's hard for me to exactly trace what brought me there. I had a number of things that got me into guile and, uh, land basically. So about a year and a half ago, I was a very different programmer, I guess. I was on a bike ride with my brother, and I remember saying to him, uh, one of my friends said that, you know, we should teach programmers that they, you know, all basic, uh, types in a program should be immutable. And I don't understand that because, you know, mutation is so useful, why would, why would you not want it? And now here I am in the functional programming land, you know, also waiting my finger at other people, they're trying to not be too much of a jerk about it. Um, and so like, obviously, something's changed a lot. And some of the things that changed were, uh, uh, for some of the people who don't know, I work a lot on, uh, you know, network item stuff, uh, I work on a project named Media Goblin, which is written in Python. And for almost a decade, I identified as a Python web developer, like I, I got really far in my career. Um, I mean, I knew some other stuff outside of that, but I was definitely pretty core Python web developer, uh, as kind of my core. Um, and about a year ago, I started to hit some real limits. Um, I was getting frustrated with the state of deployment. And initially I was not interested in geeks. I knew about it. I thought it was kind of cool conceptually. I thought it was annoying that the GNU project was basically going and starting a new package manager and distribution. And I was like, wow, why are they doing that? Uh, so did you find out about it through the dial connection? No, I found, I heard about geeks first. Uh, well, I knew about dial, but I was also dismissive of that for a long time. Uh, I had been a fan of Lisp for a long time. Uh, but, in fact, I, I liked Lisp so much and I liked Lisp. I initially got connected to Lisp because of Emax and extended Emax, but I liked Lisp so much that I participated in a project called Hi, which is a hilarious project, which allows you to, um, uh, do Lisp style programming on top of Python. Um, so you were, you were using Hi before you were using, uh, only, well, I was a contributor to Hi partly because I thought it was interesting. I wasn't really, I, using it initially for very much though, I did write the tutorial. Um, for a long time, I really wanted, uh, macros in Python partly because I wanted what later became yield from and then later became, uh, like async and await in, in Python, uh, before it existed. So I wanted macros. Um, and, uh, so when I heard about hi, I got really excited. Um, so I had been contributing kind of this lesser Lisp in a certain way. Um, it's a really interesting project, but then I, getting frustrated with the state of deployment, uh, and, you know, running a big network freedom project with Media Goblin, I was like, oh, I really need some better deployability tools. Um, you know, like, and I tried looking into salt and I tried looking into Ansible and I tried looking into some sort of way that people could do deployment that, uh, um, where people could kind of share recipes and then have a web interface where they could kind of select things and, uh, you know, select what packages they want and it would be able to intelligently build out the dependency graph of, you know, if I pick a mail transfer agent and I install Media Goblin and Media Goblin needs a mail transfer agent, but so does WordPress. Um, but Media Goblin and WordPress's configurations should be able to know about and pull the information from the configuration I already specified for the mail transfer agent. So that was a problem I was really interested in and I was interested in building a really simple, the use web interface for this and it turns out there were some, I just didn't, I couldn't think recursively about, uh, how to build the directed acyclic graph that's required for dependency tree. So I started realizing the limitations of what I knew in programming, you know, I just, there were certain problems I just couldn't reason through anymore. Um, so you were, you were already thinking about these things like how can I define a system around this application that has dependencies? Yep. So I was already interested in that. And I had seen, as I had said, you know, Dave Thompson's uh, sly video and I knew that he was excited about geeks and I'm like, ah, that's kind of interesting, but I'm going to, and I wrote out a whole specification for what the domain specific language was going to be for the config file system that I wanted. Uh, and I, I was, oh, you got that, yeah, I had actually done a lot of research in it. And I had written out this whole domain specific language, um, plan and I was planning the web interface and everything and I was like, okay, now I'm going to build this thing on top of high because high is, you know, like it's Python's familiar and it's comfortable. Yeah. So I started to do that. Um, and then, uh, so is this linked somewhere? I do have a copy of this somewhere. It was called the optimal. And, uh, right. I think. Yeah. And there was a high version and then I threw it away and I built a, uh, a, a, uh, guile version. So initially I tried with the high version and I was like, okay, uh, this thing I'm going to, uh, um, you know, I'm going to use high because it's familiar and I like Python and I can kind of have both things, but it's easier. High makes it so that you can build the domain specific language on top of Python really easily because you have the advantage of all the kind of the speed things. Uh, okay. So optimal, uh, the, the, the, the domain language for optimal was in, uh, list. Yeah. It was in high, which is, you know, list on top of Python. It's like a list that, yeah, that compiles down a Python stabster syntax tree. So I was, so I wrote that out and it turns out. It was a nightmare to debug because in Python, when things break, all you really have are line numbers. But if you imagine that you're writing macros, how do you keep track of line numbers anymore, right? If you're expanding out code, in something breaks, what line are you on? Well, if you're expanding out code, you don't really know anymore. So you, you, you use the one piece of debugging information that you really have. I mean, yes, you can use PDB and stuff like, it's really not possible to tell where you are anymore in the code. And I just got such a headache trying to write this thing in high that I'm like, okay, you know what? I'm going to try guile. I installed the guile, you know, info manual and e-max. And I read it occasionally while working on other things that I'm like, and I, I was already talking to Dave Thompson because I thought Sly was so cool. And I'm like, okay, you know, I'll try writing optimal in guile. And so I started writing optimal in guile instead. And, and I got a reasonable amount with it. There's also a repository of that somewhere. I wouldn't say it's really good code because I was just learning scheme at that time. And so I was writing, I was writing that. And then people kept saying, oh, you should look at, you should look at geeks. You should look at geeks. You should look at geeks. I'm like, yeah, yeah, yeah, you know, that sounds pretty great. I mean, I can't figure out how to run it. It sounds pretty good. But honestly, I'm pretty invested in Debian and Fedora and stuff. And your own system? Yeah, my own system. And like, I had built up all these ideas. And you know, and yeah, that's true. I'd also gotten emotionally invested in my own system. And I'm like, you know, I think that Debian and Fedora are not going away. So why shouldn't I build something on top of that? And yeah, maybe, maybe I should learn more about geeks. And then so I'm like, okay, you know what, I'll take a weekend. I'll install geeks as a local package manager. And I'll install some stuff with it. And then I did that. And I was like, whoa, wait a minute. This is really cool. You know, the ability to kind of roll back and forth was pretty cool. And then I packaged something. I think the first thing I packaged was, at this point, I had started to dive deep down the rabbit hole of scheme. I had learned, I had read the little schema. And I had a copy of the reason schema, which is like this crazy logic programming system built on mini-canron, which is a logic programming system scheme. And I was like, okay, I really want to play with mini-canron. How, how can I get a hold of this? Well, mini-canron's already been written, but there's not really a good package manager for Guile. Like people started on it and then kind of didn't really finish it. So I'm like, well, I might as well package it for geeks because, you know, you know, geeks is kind of becoming the package manager for Guile. So I do that. And it turned out it was pretty easy to write a geeks package. So then I started getting involved in geeks. I started to read more about it. And I really started to get invested in the ideas. And one of the things that I really came to realize is that it has, and this is showing how deep I've gone into the scheme land. It's as hard to not use these terms once you start following this enough, but there's these terms and structure interpretation of computer programs where they describe a means of composition and a means of abstraction. And what they're really talking about is how you end up combining things in a program. And kind of the languages that like directly let you express, you know, combining things in a program. And what became really clear to me is, hey, wait a minute, I could ill that very thing I was interested in at the beginning, that web interface thing on top of this. And if something went bad, I could roll back. And that, oh, I could roll back itch. I couldn't get it out of my mind. And I think that was something that, yeah, the way back thing is like if you've ever upgraded the system and things go badly, that that's a pretty appealing thing already. But then I started to realize that it wasn't just the rolling back thing. Very recently in Geeks, for instance, Ludovic Cortes, the main developer landed a new system configuration system. And you can, you can describe, you can, you can do that whole thing I was talking about, where one, yeah, yeah, dependencies between, yeah, dependencies between services, exactly. And that made me realize I wrote an email to the list. I was like, holy crap, I now realize I can totally build this web interface type thing on top of here. Because, and I'm talking about this, and like, you might be wondering, why have I gone down such a deep dive into deployment stuff? I already have a big project with Media Goblin. Why would I want to go down a deep rabbit hole of deployment? And, yeah, so now we're sliding into what's the problem with all these programming language specific packaging systems? Right. So the real problem for me is that I realized that network freedom is just going to fail in the current state of deployment. There is just, and this is from a couple of years of kind of being in denial about this. You know, people would deploy Media Goblin. They would spend a couple years, you know, maybe they would spend a while maintaining it, and they would be afraid to upgrade. Almost everybody was afraid to upgrade. And here's the thing, I'm afraid to upgrade. I'm afraid to upgrade my own software that I wrote. And it's embarrassing, right? I should be embarrassed about that. You know, why should I be afraid to upgrade? But constantly, like I even had an experience where I had spent the previous day making sure before a hackathon that everything was right, that all that like people were able to go through the documentation and everything would work and etc. Then the next day when the hackathon starts, something changed in the dependency tree and there's a new version of something. There's a new version and I couldn't figure out what it was and everybody came in excited to work on Media Goblin. We had a number of people show up and oh, hey, nobody can get the thing running who is a new user. And that was infuriating, right? You know, like, because and so David Thompson says this, this kind of, you know, I guess it's another kind of snarky functional programming thing, but I, but it's so true that he says, you know, you're dependent on the phase of the moon, imperative packaging systems. And it's, it's so infuriating having to be dependent on that and having users be afraid to upgrade their system. So the fear of upgrading is one part of it. And that's assuming that you even get things installed in the first place, right? If people ask me, so I run my own mail server and people ask me, oh, well, how do you, how do you run your own mail server? How do you have it set up? I'd like to run my own mail server. I don't want to be in the hands of Google with Gmail and stuff like that. I want to run my own thing. They're like, how do you set it up? And I'm like, well, I don't know if you want to know my setup. They're like, no, no, no, no, no, no, tell me your setup. And I'm like, okay, so I've got, you know, postfix and doescott set this setup to handle incoming and out, me coming mail and they get passed through Proc mail, which ends up filtering everything out all to the right places. And then I end up pulling it over the wire with offline IMAP and processing it locally with with MU. Oh, I forgot that I actually also am running spam assassin on my server. You definitely want to use spam D not the spam client so that it doesn't have to keep restarting itself. Oh, right. Also, when you pull it down locally, you're going to want some sort of nice client. I'm using, you know, EMAX client here. I wish I could show you my config, but they're, you know, a big, you know, clusterf. And I, oh, oh, yeah, oh, also you've got to make sure that you set all these settings up right in your DNS and these types of things. And like, and people are like, oh, that sounds exhausting. Could I just be here to run it for me? And I'm like, there is no way you can pay me to run your mail. Like, such a nightmare. So basically your answer is, I know exactly how I set up my mail, but I have no idea anymore how I set up my mail. Yeah, exactly. I like, I'm afraid to re, you know, I mean, I do have backups of my system, but how I got to the state that I'm currently at, I don't know. You know, and if I ended up installing a new copy of things, I mean, sure. So when I start describing this, people are like, aha, this is where Ansible and Puppet step in, right? They're like, oh, you should have kept all your files in there in the first place. And that's kind of true, except that you're still, you still have this problem that like Ansible and Puppet and stuff like that are still dependent on that phase of the moon problem, right? So you might roll things out and you're like, oh, well, I've got to switch over to a new server because mine's compromised or something like that. And then it turns out you do an upgrade and you were running Debian testing and Debian testing is broken right now. You can't switch over or, you know, your configs don't work with a new version of a positive that came out because they completely changed things or whatever it is. Yeah, maybe actually now there's a Debian snapshot package server where you can go in. I think GRML, do you know GRML? I don't. It's a sort of systems hacker distribution. It's Debian, but it's configured. It's a live CD and with certain useful tools installed on the CD, you can, it uses the Debian repos and you can do apt-get and everything. But what they do is they have a specific snapshot of Debian because Debian has a package server now that you can say, I want to do apt-get install bash from the package tree as it looked on June 27th. Oh, that's really great. I had no idea that that's pretty cool. And I just noticed this. I was using GRML a couple of days ago and I noticed that they were doing that. So they print out or they create an image that is their DVD. And that one points to a repo that is actually known at the time they produce the DVD. And if you come a year later and you do install, they've already verified that that's actually going to work because it's a specific snapshot of the Debian tree. Oh, that's pretty cool. Yeah, no, that is really cool. But that's still, it's like you say with puppet and all these things. You're still taking this malleable system and you're trying to force it to become deterministic by sort of limiting the, yeah, you're doing the snapshot of the packages and have some sort of definition with a state that it's supposed to go toward by installing and uninstalling packages. Yeah, yeah, yeah. So I mean, I actually think that a lot of these systems can be improved. I mean, I mean, Debian's even leading the way in some of them, right? The Debian reproducibility project is great. Yeah, they're even ahead of Geeks in some ways. Yeah, yeah. And in fact Geeks benefits massively from all of Debian's work in that space. So like, I don't mean this to sound like I'm hating on Debian and Fedora because I have, you know, deep connections to those, you know, like those communities have served me so well over the years. And I think I'm going to be important for a long time to come. So I don't actually think that this is a Geeks versus, you know, Debian and the rest of the world type thing. I think that those systems have good opportunities to work together for a long time. But I do think that I do think that that vision of the world that I wanted that that led me down this path that I started at, you know, quite some time ago, is best served by Geeks and etc. Like it's the it's it has the cleanest foundation. You know, and I mean, and like really clean in several ways, like I mean, also as in terms of like the purity, it tries to enforce itself to be a pure free software distribution. There's no non-free components by default. That's one distinction from Geeks next, which we haven't talked about yet. But yeah, it's it's easier to, if you have to change your system, which I don't endorse, but if you have to, it's easier to change a pure system that it is to pull all the tainted bits out of a system. It's very easy, it's very easy to mess up a pure system a little bit than it is to try to purify a messed up system. So I think it's really important that Geeks is starting with that pure basis. So you mentioned now that Debian has a role to play and Geeks has a role to play. So do you think that Geeks ops and and using Geeks for deployment is the the first place where Geeks might become important for everyone? Well, I think that there are a number of ways that Geeks might become important for everyone. And you know, so first of all, you're mentioning kind of Geeks and Debian side by side. I currently run Geeks on top of Debian. So you don't have to pick and choose between those two. You can run Geeks as a user space package manager. That's one cool feature about Geeks also is that you can have different different users can be on the same system. And if they need different versions of things, they can have a huge feature, right? You know, your system has GCC4, but you need GCC5. It's AOK. You don't you don't even have to bake for the system to get moved over. You can just run your own local version of it. And that's fine. That's one of the things that like because you have that that kind of ties into the Simlink the first thing I started to talk about you since you have that, you know, all those hashes in there. You're basically pointing at specific versions. So that's the makes it safe. Yeah. So let's go into that for for people who don't know how it works. So on Geeks, I as a user can install and uninstall packages for my user only. And so how does that work? Right. So what's this forest thing? Right. So you I mentioned that in slash can you slash store I had this big hash before the name of bash, right? So that's like the very, very specific version of bash that I have, you know, including all of its previous dependencies. So so of course, if if the system, if you basically have the what's stopping another user from installing their own version of bash, maybe they even end up installing bash that has these terrible hacks installed in it, like terrible hacks that you really wouldn't want to use for any reason other than that, you have these specific scripts that you created for this off purpose usage. I don't know anybody do this, but it's an example, I guess in some ways. And so you you need this and your assistant means like no way. There's no way we're putting that on our system. And it doesn't really matter. You don't have to bend the system in because you can just install that hacked up version of things. And since your version is pointing at this, you know, very specific hash, it doesn't mess with anybody other users on the system. And there are these when geeks packages are built, they're built and installed by these worker users by default that have pretty much no permissions other than to create these truths where they built things and that's it. And that's going to get even more secure because we're some kind of container support stuff has landed in geeks. So we'll be able to even get that more isolated. So it's both secure to build. I mean, the main concern is whether or not users install so many packages that they end up, you know, kind of filling up the space of the system. But if one user installs some sort of thing that really isn't trustable by the rest of the system, they're they're putting themselves at risk, you know, but not really putting the whole system at risk or they're they're, you know, just using something goofy that isn't going to give headaches to the rest of the users on the system. Most users actually, most systems are kind of by single per users these days. Like my system, nobody else is on it, but me. And that's true. A lot of people have laptops. Yeah, a lot of people have laptops. So this might be true more on like a VPN where a lot of people have something on there. But but even there, I think that there's another way that this becomes really useful, which is like the geeks environment type thing, which is like say in the Python world, we have something called virtual and right. We have our own kind of ecosystem of Python packages. And I can install a little virtual and that has this version of Django. And then another direct rack and have a different version of virtual and with a different version of Django. And they won't conflict with each other. And the node does the same thing. Yeah, node does the same thing and so does Ruby and all these things. And but but it's kind of becomes a headache because now what happens if you need one very specific version of Django, but you also need a very specific version of like rake, which is a, you know, Ruby tool and you need a very specific version of jQuery, right. And now you've got three different systems of packages and you're trying to get them all to play together and it's a big headache. It requires a lot of expertise in each one of those package management systems. Like each language requires a heavy amount of investment to really learn the the kind of sharp edges of that language as package manager. Well in geeks, you can actually do something called geeks environment, which is kind of like a universal virtual and where you can have you know, you you can start up something that has a specific of G version of GCC and a specific version of Django. Yeah, and especially when attracted me to geeks when you and Dave started talking about that. Yeah, yeah. So it's really great that you and and what I'd like to in media goblin have a geek status CM file on it, but what's really cool is, you know, David Thompson being, you know, kind of since he's kind of in Ben pushing hard on a lot of both interesting guile projects, he starts an interesting guile project, I think at one seven once a month. But and they are really usually pretty interesting, but but like I don't have to worry about learning how to install and set up all the dependencies for each one of those projects, because I can just go into each one of the ones he starts. And I could type geeks environment dash L geek status, yeah, I mean geek status, yeah, I'm as a file that's in that thing. And it starts up a new bash that has all of the packages pulled down that are very specific to that project. So if if it needs guile SDL and I don't have guile, I don't have any reason for guile SDL anywhere else on my system, well, it'll pull it down. It can even pull down a very specific version of it. And that's fine. And it can pull down a very specific version of GCC or whatever. And it won't mess with the rest of my system because it build a very localized file of that. And that's really cool. Like being as a developer, being able to just give a file and say here, here's all the stuff that you need to run with it. And it can pull it up. And you still also have that time traveling feature of being able to roll backwards and forwards in time. And now you have it on that like virtual environment level. Well, now I don't have to now, I don't need to shiver in my boots the next time I thought I'd do a hackathon, right? Because yeah. And this is the next level we're talking about. Oh, each user can have their own versions of GCC or whatever. But you can even have it down to one process having one set of packages and another process having another set of packages. Yeah, which is pretty amazing. Which is pretty amazing. So it's like each little development environment. And people are like, oh, well, I've got that with Docker, right? You know, Docker, I've got all of my packages packed in there and stuff. But what you've got in Docker is like a whole distro. And like all of those packages that are in there like the G-Lib-C and stuff like that might are probably not actually shared by any of the future, the other Docker things that are on there. And people say, well, Docker's got this binary dip thing and stuff like that. But if you upgrade your base system, that those other binary dip things were based off of like if you've got a Debbie and that you started out with and then you upgrade that anything that's got stuff on top of there will probably break. So like for the most part, when you end up in a kind of Docker-esque environment, those things are not shared between them, which means that you've got like five versions of G-Lib-C running in memory or whatever. Well, that's not true in geek. Oh, yeah, that's true. It eats memory as well. Yeah, it eats a lot of memory and it eats a lot of disk space because there's a lot of redundancy. Well, you don't have that running through redundancy in geeks. I mean, you might. Yeah, in Docker, you need to be very careful that if you have several images, you need to make sure that it's able to use the ButterFS function of having the base image and then every every other image being based off that in the file system. Right, right. So that it can share blocks. And like you said, you upgrade the base system, you lose that. Yeah, yeah. So when you're doing these geeks things, then you have your store and it's just files. There's no low-level file system. It's just files and they're either simlinked into some bin directory somewhere and some lib directory or with geeks environment, you can just set up all the path variables so that you can reach these things. Right. And so I currently have those two versions of bash 4.3.39. But that's because I've done some upgrades on my system. The difference is that I can I can have I can just I'm like, well, I don't need to roll back into any of the previous versions anymore. So I dropped those old profiles and I can now do geeks GC and it just garbage collects away all the old stuff I don't need. So I can have multiple versions of things. But the moment that I no longer need those previous provisions, they just get garbage collected away. Yeah, which is pretty nice. And in the meanwhile, hey, even when you have those two, it still does the duplication between them. Yep, exactly, exactly. And which is pretty awesome as well. Pretty awesome. Pretty awesome. Without low-level file system magic, well, it's just fine on x4. Yep, yep, exactly. And yeah, I'm running x4 here. I'm not running any complicated butter fs stuff. But but that thing that you're talking about with the environment stuff is you could take that environment thing and not only can you do the environment thing like the virtual type thing. You can also do this for containers and for virtual machines, right? So right, that was one of the things that I also saw before I even started using geeks that you showed the command line or I read it in the mailing list or whatever you just do geeks system VM and it produces the command line that allows you to run a VM with a certain set of packages installed. Yeah, hilariously, when you run geeks system VM, it doesn't actually boot it up. It returns a bash script that it generated for you to boot it up. But then you can run that bash script over and over again, or you can get a new bash script when things have changed. But yeah, that's really, I think that's really nice. So one of the things that also really appeals to me is that, so see, I'm doing a lot of deployment stuff. And I want to, and I guess we said we'd get into geeks ops and stuff, but we haven't yet, but, but you can already get a sense of this right now. So see, I'm still not nibbling at it. Yeah, we're nibbling at it a bit. So say you're doing system configuration. And I've set up my system config, which is just scheme code again. I could build a fancy UI on top of it, or I could just write out this scheme stuff myself. Either way, this makes that really easy. So I've written out my system config, and I'm like, I think this is exactly the way I want it. Right? I can do system system VM, or the geeks system container. I don't remember what the container command is, but I can boot it up in a VM or a container, and I can verify that that system is exactly what I want before I push it off to the network. In theory, you can even actually build all this stuff. Say you've got custom packages and stuff, you can build all those custom packages locally and push them over, like push the closure of the system over to that machine once you've got it all verified locally. I mean, you can have it build there too, or pull it down from Hydra or whatever, but, but you can, but I think that's pretty cool. And since you have that functional promise that the inputs will always give the same outputs, you are able to be sure that the system that you're going to deploy is the one that you've got locally. And that's pretty neat, because now you can splat that across a bunch of machines, and you don't have to be afraid that there's some race condition in between the time in which you ended up verifying that things are okay, and then you went to sleep, and then you woke up in the morning, and then you pushed it over to the machines, and oh, no, you know, a new version of this package came out and all my stuff broke. And now I just pushed a bunch of broken stuff to a bunch of servers. Well, that's no problem. You don't have to worry about that. You know, you can push out exactly that version of the system, and it's no problem. Yeah. So, uh, let's, let's go back and talk about Nix. Yeah. Yeah. So I was really surprised. Uh, I found Geeks first, and then I started learning about Nix, and then I found out holy crap, this stuff is really old. Well, it's been around since 2004, if I remember correctly. Yeah, I guess it is about a decade old. So, um, so I guess you're right. I didn't think about it being as old as Ubuntu. I mean, I think Nix is also taken off in a lot of ways over the last few years, similar to Geeks. Uh, it has a bigger user base than Geeks currently, but I think Geeks is going faster right now is my biased view of things like it's accelerating faster, but it has less of a large base right now. Um, but, but you're right, that the Nix has been around for a while. Um, uh, so Nix, I think is what pioneered most of the ideas that Geeks is using. It pioneered the store, it pioneered the functional package management stuff. Uh, pioneered almost all of it. Um, and Geeks makes kind of two big, uh, splits off from, from Nix and two big ways. So the founder of Geeks was one of, I think he was a developer on Nix, and I think actually one of the core developers at one point, uh, Ludovic, uh, was one of the core developers, I think he was at least a developer on Nix first, and then he became inspired to sort of Geeks, uh, because of some of the limitations he saw in Nix. And those limitations, okay, that, that's not how I saw it, but, I guess you've looked deeper into it. I, I think that's what it was. I thought he came from the Geeks idea first and then looked up. So is there something I could build off? But you're saying actually, he was already on Nix. If I remember correctly, he started out in Nix, and then, uh, when, uh, started Geeks, uh, basically perceiving some limitations in there. And he was, okay, cool. He was a guide developer and a neat Nix developer at the same time. It's my understanding. So Ludovic, the Cortez is not only, uh, Geeks is founder and maintainer. He's also one of the three co-maintainers of Guile. And Guile has three really great co-maintainers, Andy Wingo, Mark Weaver, and Ludovic Cortez are all three amazing people, in my view. Uh, and, um, so he, he, he started, uh, working on, uh, Geeks. And, and when Geeks made these Geeks shares very little code with Nix, even though it shares almost all the conceptual things, it shares the Damon that, uh, does the building and installing of things in the background on your system. But other than that, Geeks has all original code written in scheme. Um, and so the fact that it's written in scheme is one big difference. Nix has its own domain specific language, which, uh, is also functional, but it's kind of just used for building the packages. There's a whole bunch of other languages that are used for the different parts of the system, whereas Geeks is scheme from top to bottom. It's Guile, top to bottom. Um, and, uh, I'll talk for in a minute about why I think that's really valuable, but there's one other big difference, which is that Geeks is completely free software, top to bottom. You know, it's, you know, Linux Libreon up and, um, and you could corrupt it if you wanted to, but I think it's pretty great that you've got a completely free system from top to bottom. Uh, yeah, good, clean starting point, like you said before. Yeah. Uh, oh, also Nix uses system D and Geeks uses, uh, DMD, which is, uh, um, which I think a lot of people assume is for some sort of system D hater reason, like, uh, but it's actually, it's actually for a very good technical reason. Um, you know, the, uh, uh, the, the reason that Geeks uses DMD is because of that service composition stuff we talked about earlier. Um, you, because DMD is also written in Guile, it's possible to be able to express the system in a way where you can compose the construction of the system. I could write a web interface that gives people the options that they can select all those things and it's building out structures and scheme to build out my system exactly the same way that it is to build up the packages and the package definitions and stuff. And that's a really good feature. Uh, it, it does mean that, um, they're getting good own package to spend a little bit difficult, but that's a whole other topic that we test the system D dependency. Right. That, um, which is mostly, I think, at this point, log in D, uh, for, uh, GDM, uh, is using log in D and Andy Wingo split out E log in D, which, uh, is a version of log in D that does not depend on system D. I don't know how well it'll be maintained. Um, but it does seem to be working. Um, I'm not sure what other dependencies on system D genome currently has. Uh, there's a good number of people in Geeks who really want genome, um, yeah, but and are working on it. Um, but that it's a lot of work to get things included and, um, I do worry a little bit that the future of, and I'm not a system D hater. I think system D is really nice on my Debian machine, but I do really value the things that Geeks provide for me with the system composition stuff. And that's really important to my long-term plan. So I, I really hope that genome does not become intertwined in a way that makes it difficult for Geeks and genome to get along in the long term. Um, but that's kind of a tangent, uh, uh, and probably one that I'll end there. The other more important one was actually the, the general point of Geeks being built off of scheme from top to bottom. Um, yeah. And as I said, Nix kind of has a variety of languages, including its, you know, domain-specific language for packaging. I don't know Nix very well, but the big advantage that I see in Geeks is because it is scheme from top to bottom, which is, you know, you can write your system configuration in it by hand. And I, I like writing S expressions, not everybody does. Um, you know, there's, there's a system called Wisp that makes things a little bit more pathonic if you'd prefer to use that. Uh, but, um, the, uh, but, uh, it, it's actually the main feature for me was not this very low-level diving into, you know, scheme as this academic language type thing. Keep in mind that I started out as like a Python hacker about a year ago where I was like, oh, I, I love mutation, you know, like, uh, and like, I want to build a webinar phase. That's what I really wanted. I want to know. Yeah, you, you came in from, do this from a practical direction. Yeah, I came in from a practical direction in a very top-down direction of like, I want to serve users, uh, and I want users to be able to deploy their systems for, and they're, these are these specific needs. And it was really over time, I realized that no other system provided what I needed. And one of the key pieces that Geeks provides is that scheme from top to bottom. Um, because you've got the same language to configure your system as it is to write the packages as it is to everything else, it means that you can just as a program build out every single part of this system. You can build out, you can build out logically based off of user inputs. The system definition that somebody explained to you if they need, you can build out. Um, there's the amount of code to write the Geeks system VM stuff that starts up the virtual machine is stunningly small. I think that you commented on, uh, the pump of verse this, like, didn't you end up looking at it or something and like you were like, I love that I remember about this entirely possible. Well, the, the, but it is, it is pretty stunning. Like the, the amount of code that you need to build these kind of features is pretty small because since everything's built in a really nice and sane language that's really optimized for adding new languages on top of it where, you know, you can use all the other language features together because it's just as expressions. Um, you can build amazingly expressive systems where normally you're like, okay, I've got my puppet here and I'm going to try to substitute in these really difficult string expressions into this config file system and I'm going to have to think really hard about how that other system wants me to do message passing between it and all these different like difficult layers between there are not difficult at all. They're not difficult at all in Geeks and that's because of the decision to use Guile. So I think that that's, that's the number one feature of Geeks. And when I explain that, it normally sounds like, oh, I love Lisp so much and I love Corentesis so much. I just want to hug and kiss parentheses and, you know, I'm such an academic nerd. But the reality is is that it's actually the opposite. I, I, I'm so concerned about everyday users and I just don't see any other path to get to that point. I don't see any other path that's sustainable in the long run. There, you, we maybe we could keep hacking these other systems but I don't think, I don't think that it'll be as easy for them to provide those features as it, as it has been easy for Geeks to build these other things on top of them because good foundations really do matter. Yeah. Yeah, I think I'm running Geeks now. I used to run first a Nix VM and then Geeks as a package manager beside and then try to install most of my packages from Geeks and then just, I wanted GNOME. And so then I used Nix as a base to to get GNOME in there. But lately I removed that VM and now I'm running a Geeks as DVM. I'm using, I'm using Enlightenment instead. Enlightenment. Because I saw that, wow, there's Enlightenment in there. That's so cool. I'll use that. And, and then I'm running Nix packages on the side instead. Oh, cool. Because there's, they have more packages. It's an old distribution. It has had more people. So there's some stuff in there that that is not yet in Geeks. Yeah, that's so now Geeks SD is my base system in the VM. And then I had the Nix packages on the side. Wow. So that's pretty cool that we, we've reached a point where I feel that's actually a practical thing to do. Yeah, nice. You're even further ahead than I am. I'm still running that data on this thing. I actually have, I just ordered a, oh, I had one more thing. I was running this Geeks machine and then Nix packages on the side. And then there was one package that I needed that was neither in Geeks nor next. Oh, what was it? Cluster SSH. Oh, okay. So I ended up doing a devian jail. Oh, maybe you should package it for Geeks. Yeah, it's on my to do list. I have this long list of things that in my copious spare time in the future, I'm going to package this and that and cluster SSH. I think actually cluster SSH is in there. I don't remember if it's in Nix or Geeks, but it's in there, but it doesn't work. Oh, interesting. Well, we should fix that. Because it's, it's like hard coding to respond to by what name it's called or something like that. And it messes up things. And it does the wrong thing. So that's why I ended up doing the devian jail just just to get cluster SSH. I'm taking a look. Oh, wait. I do not. But yeah, I think, I think we covered most of what Geeks is good for and why everyone should be looking into it. Yeah. And I think, and like we said, you come from the practical angle and I think that's the, maybe the place to start. If someone is doing development, they should really consider doing Geeks package definition for that thing with dependencies and use as their language, agnostic virtual end to work in because that's, that's pretty awesome. That most of all that while you're working on your thing, you don't want the dependencies to change underneath your feet while you're working. Right. So you're upgrading your system and the new Firefox comes out and so on. You always want to keep your system upgraded. But if you have a profile for the package you're developing in that profile can keep a static set of packages that doesn't change when you upgrade the system. Right. Or you could, so that the only moving part that changes is the code that you are changing. Right. And if something does change, you can figure out what it is because you can kind of bisect your way back and forth. I don't know what Geeks bisect has been written like get bisect, but it should be. Yeah. It's probably on, at least, some, at least one person probably has it on the, well, maybe Ludovic will listen to this or Dave and they'll just like, they'll just implement it. I'm constantly amazed that I look at the list and Ludovic Dave and Mark Weaver are just like, I look on that list and at every, every week, like each one of them seems to like contribute some sort of major new thing that just astounds me. And I think the latest thing, I haven't been keeping so much up to date the latest month or two, but the latest thing I saw was that whole rewriting of the whole services structure. That was pretty impressive. Yeah. Yeah. That was pretty amazing. He didn't take long. He was like, they discussed, hey, maybe we should do things this way instead and then someone sat down and just a couple of weeks. Yeah. Yeah. This entirely new thing. Yeah. I think it was actually Andy Wingo was writing out. It was one of the systems that he had tried to put in place. Maybe it's color D or something. I think he was actually trying to get something in good home and like debust or something like that. And he was running into, you know, he needed each system to kind of be able to pass information around to the other ones. And Ludovic was like, oh, I'll just run. It was just like, oh, yeah, it was, was about one service knowing about other services that it would have to present some something. Yeah, you're right. And then there, like, like you said, debust, it needs to know what services to activate. And then it needs to know they exist. Yeah. So Ludovic just kind of spoke, spec'd up this plan. If I'm remembering this correctly, and like over a couple of days, like suddenly he's just like, oh, I've got a prototype right here. And people like, it needs to work. And like within, within no time, that thing has hit the list. It's, it's, it's pretty astounding, I think. Yeah. Yeah. So if people want to look at geeks, now they're really excited after hearing you being all excited about it for over an hour. Yeah, hour 15 minutes. Then they can just go to a new org slash s slash geeks. Yep. You should check it out. It's great. They've got a nice video on there from Ludovic speaking about it as well. Oh, I haven't seen that. Cool. I'll check it out. It is considered alpha software. But I think as you said, it's, it's much, it kind of feels like that alpha software badge doesn't really belong on there to me in some ways. I think the most alpha thing about it is that you don't have a nice graphical installer. Yeah. There's no nice. But I think that I think that it's the most awesome installer I've ever seen for any system. Because, okay, I'm here at the prom. What should I do? I want the system. Okay. Write the definition for your system. And then you apply it to your machine. And then you have a system. I think that's that's when you've done that install, you sort of experience the full power of geek. Yeah, it is pretty mind-blowing to go through that process. And if something is something screws up on the way, you just do it again. And you can, it's like, what do they say about HTTP operations? It's only something. Only potent, no? Oh, item posts or whatever. I don't know. I don't know how you can ask that. But yeah, you're right. It won't screw it up. If you've done it once, you can do it again and it won't break things. And I've, and basically that's how you upgrade the system or you add services. You basically regenerate the system every time. Oh, that's one thing because it's functional. What we hadn't talked about is that not only can you roll backwards and forwards and time across packages, but you can also do it across the system's configuration. Which means that if you're upgrading a server, and this is where, and we really didn't have time to get into GeekSops, and I don't think we should, because GeekSops doesn't really, it's kind of starting to exist, but but that's the big promise of GeekSops is that you can write out your system. And if you have a system upgrade that goes badly, you can roll back the whole config, not like, including the Apache and Ngedex configs on stuff like that. And that's pretty cool. Now, what database migrations that are a whole other topic, I've got ideas on how to deal with that. That's mutable state. You mutable state, right? But, uh, well, database migrations are in any system. Yeah, I do think that we could get to the point where we can explain to Geeks, like, here is where the mutable stuff from this system is. And so when you do an upgrade, uh, before you run all of the migrations and stuff like that, you could run a command that backs up all your mutable state. And that, I think, would be the good solution that we could have, so that people could upgrade their Media Goblin Instance and not be afraid to do the migrations, or whatever, because they could just roll back from a backup. And they don't have to locate that Geeks already knows where all that backup that mutable state is. But that's kind of a far future kind of, you know, starry-eyed thing that doesn't exist yet. But I think it could be. So, yeah, I guess, do you have anything else you want to talk about, or should we kind of get to the wind down part? Yeah, I think we're winding down. We covered most of the things that I wanted to talk about. Okay, should we do the... What does it do? Why is it awesome? What's the difference between the package manager and the Geeks SD? Why is there a guy everywhere? What's the relationship between Geeks and Nix? And how will this take over the world? Yeah, should we do... So a lot of shows end up doing plugs where you talk about something that you think is really cool, or something you're working on, or something that you think other people should know about, but not necessarily, but could be tied into the show. So, should we do some plugs? I don't really have anything to plug, but I'll take Geeks, the Geeks fundraiser then. Oh, yeah. Geeks is looking to upgrade this server product because it's becoming so popular that the servers that are providing the pre-compiled binaries are starting to get overloaded. Yeah, and the... So, this is actually, hopefully by the time we publish this, it will be officially out. Dave Thompson kind of pre-announced it on the pump of verse today, but the actual announcement has not been put out yet, but hopefully by the time this comes out, it'll be out there, but there will be a donation link on Geeks's website that you'll be able to find to donate to the server farm. And I think it'd be... It's really useful to the long term of the project, and they're also doing it through the FSF. Very similar to how Media Goblin was funded through the FSF, which paid for my salary for a while, and obviously am all supportive of. So, people should definitely donate to that when they see it. It'll be worth your money. I promise. The future of freedom, thanks you for your donations. Oh, hey, I have something to plug for myself, actually. Okay, great. And I will be going to fast them. I'll beat you. You're going? Yeah, I am going. Wow, that's great. So, I'll see you there. I'm bringing some friends. I managed to excite a couple of people in the office, so we're getting accommodations together and going there. Oh, awesome. So, yeah, we... Actually, I wasn't sure if I was going to go, but I basically sent an email to the list being like, I don't know if I should go to FASDM or not to the Media Goblin list. I'm like, because I'm kind of broke, well, I mean, you know, like there's basically not a lot of money left in the budget. We've been spending it on Jessica's hard work on Federation. So, I don't know if I should keep pumping out money from my own personal account to go to these conferences and a bunch of people donated. And I'm like, well, I guess that's a sign. So, so if you actually donate between now and FASDM, we might have a little Media Goblin dinner thing that we meet up. It might be tied into Conservancy's dinner, like have a table at Conservancy's dinner, but yeah, there's motivation for you to donate to Media Goblin as well, if you want. But yeah, cool. I'm just really looking forward. There will be a Guile in Geeksroom at FASDM. So, yeah, so people should drop by there. I'll be giving at least one talk possibly too. So, okay, cool. Yeah. In the Geeksroom or on Media Goblin? In the Guileroom. I might be giving another talk as well outside of there. It depends. I might be giving a talk on deployment, but it depends on what that can accept, accept it elsewhere. I submitted a couple of talks to the Guileroom as well. Very cool. So, apart from what you already did, you have something else to plug? I have a few things to plug. I apologize. I'm going to list them off as quick as I can. Oh, no, no, no. First of all, Software Freedom Conservancy is running a fundraiser supporter program. I made a nice copy heart logo for them for this thing, and you shouldn't let that effort go to waste. You should support copy left compliance. So, I think it's sfconservancy.org slash support or support ur. Sounds right. I don't remember. Yeah, it's either support or supporter. And you should definitely donate because they're doing great work. I mean, after service also doing a fundraiser and they can also use your donations. Conservancy, especially as important to me this year, because they're trying to move to a supporter model. And that's that's I think it would be really good for the long term of free software for a conservancy to be able to be supported in that way. Yeah, one sign of you doing good work is that you upset some people. And apparently, the conservancy has now done good enough work that they upset some people. So they are support. They do need our support. And they're doing great work. So, so that's number one. Number two is I have a project that will be coming around the corner. Very released soon. It the project's already out there, but you hopefully people will be able to see it more prominently because we'll have a website up soon called eight sync, which is eight number eight and S Y and C. It is like no JS or async I will for Python, except for Guile. And it uses limited continuations. I know this is getting really jargony, but basically you normally have to write code in an asynchronous environment where you end up as in some sort of nasty callback hell. And then eight sync for various reasons, you don't. Writing asynchronous code is about justice. That's the only way to our show by itself. Yeah, it's the limited continuations and why do they make eight sync great? Yeah, we should do that in the future when we get eight sync 0.1 out or something. But yeah, that's one thing. Also, if you're interested in getting involved in Guile, I just submitted a I'm starting to work on and it should be fleshed out more by the time that this episode comes out, a tutorial on how to get involved in like how to start using Guile, because I think the current manual is amazing as a reference, but doesn't kind of give you a nice kind of jumping guide. So, if you check them, Guile, develop mailing list, you'll find the link. I can also spell it out. It said dustycloud.org slash MISC slash. Oh, I should actually check before I start saying things. I'll put it in the show notes as well. So that's much better. That's much better. So there's something dusty cloud. Oh, yeah, dusty cloud.org slash mix slash guile-tutorial.html. That's a temporary URL for you. But I'd love feedback. If you have it, please send me an email. And I actually keep plugging things, but I think that's enough for now. No, that's pretty good. Now, right? So, yeah, thanks. Thank you for this chat, and I'll be seeing you at Fostom then. Yes, you at Fostom, and I'd love to do another one of these again. If you enjoyed it, I really enjoyed it. I certainly did. So, let's do eight sync when you're getting ready with that. All right, sounds good. All right, later. See ya. You've been listening to HECCA Public Radio at HECCA Public Radio.org. We are a community podcast network that releases shows every weekday, Monday through Friday. Today's show, like all our shows, was contributed by an HPR listener like yourself. If you ever thought of recording a podcast, then click on our contributing to find out how easy it really is. HECCA Public Radio was founded by the Digital Dove Pound and the Infonomicon Computer Club, and it's part of the binary revolution at binrev.com. If you have comments on today's show, please email the host directly, leave a comment on the website or record a follow-up episode yourself. Unless otherwise stated, today's show is released under Creative Commons' Extribution, ShareLight 3.0 license.