851 lines
79 KiB
Plaintext
851 lines
79 KiB
Plaintext
|
|
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.
|