Programming Throwdown - 148: Package Management with Max Howell
Episode Date: December 12, 2022Package managers are an often-overlooked aspect of any operating system, but their importance is not to be underestimated – especially in today’s development environment. As both creator ...of Homebrew and CEO of tea.xyz, Max Howell is intimately familiar with the ins and outs of open-source development, software engineering, and balancing passion with practicality. He shares these experiences and more with us in today’s deep dive into the subject!00:01:00 Introductions00:01:29 When Max started Tea.XYZ00:03:51 British plugs00:08:10 Literally rolling out of bed to work00:11:49 The value of meetups00:13:14 Getting into open-source00:23:00 Mandrake00:25:02 Turning frustration into action00:30:47 Deno00:40:28 OSX’s relationship with Unix00:55:33 Trying out Ruby01:01:13 April Fools prank ideas01:04:13 The cause of sleepless nights with Homebrew01:14:41 What got Max inspired to do Tea01:19:53 From startup to company01:41:55 FarewellsResources mentioned in this episode:Links:Tea.XYZ:Website: https://tea.xyz/Twitter: https://twitter.com/teaxyz_Instagram: https://www.instagram.com/tea.xyz/Github: https://github.com/teaxyzReddit: https://reddit.com/r/teaxyzDiscord: https://discord.com/invite/KCZsXfJphnReferences:101 on Package Management:https://en.wikipedia.org/wiki/Package_managerDeno:https://deno.land/If you’ve enjoyed this episode, you can listen to more on Programming Throwdown’s website: https://www.programmingthrowdown.com/Reach out to us via email: programmingthrowdown@gmail.comYou can also follow Programming Throwdown on Facebook | Apple Podcasts | Spotify | Player.FM Join the discussion on our DiscordHelp support Programming Throwdown through our Patreon ★ Support this podcast on Patreon ★
Transcript
Discussion (0)
programming throwdown episode 148 package management with max how take it away jason
hey everybody so um if you have used any OS, which is everybody
who's listening to this, even if you're on your phone, you have had to deal with installing
software and managing software of various ways, shapes and forms. If you're a developer, you also
have to deal with libraries, static shared libraries, all sorts of ancillary packages. And that makes package
management a real challenge and a real opportunity to learn more about the OS. So we're going to
kind of dive into all of that and talk about some other stuff that Max has been up to. So
we'll jump right into it. We have Max Howell, who's the CEO of TXYZ and the creator of Homebrew. Thanks so much, Max, for
coming on the show. It's great to be here. Cool. So one thing we kind of lead in is just talking
about the whole remote revolution, which is almost like two years old now. But I think it's still
kind of worth talking about, especially when folks are starting new ventures.
When you started TXYZ, did you start it during the pandemic?
Was it pre, post pandemic?
And how are you handling remote work and return to office and all of these things?
That's a good question, especially nowadays.
Personally, I feel that I started remote
because I started with open source.
It's how I got into programming.
And the first bunch of people that I worked with were all over the world.
We had a bunch of people in Europe, some people in America,
and some people in Australia.
So for me, it was just always the natural way to work.
And so when I got my first professional job in an office, I didn't like it.
I liked the commute.
It sucked and having to get there.
But, you know, certainly some great things about being in person,
like some ideas only form when you're like bantering around the table.
So what was your commute like?
When I started working in London, I live in the US now,
but this was a while ago. And I lived an hour north of London by train.
Is that Chelmsford? I have an aunt in Chelmsford. I don't know. And she says that's north of London. There's probably a million places north of London, but I figured I'd throw a dart at the dartboard.
Yeah, I don't know Chelmsford. This happens a lot where people are like, oh, do you know this tiny little town in Britain?
Actually, I probably should.
I probably should know better.
I lived in Milton Keynes,
which is where some of my family still lives,
about an hour north of London.
Kind of famous city for being kind of modeled
on the American model of how cities should be
with lots of fast roads and big malls and things.
And so I liked it for that.
I've been to Melton Mowbray, which is completely the opposite.
Melton Mowbray, I think they're famous for growing honey.
And it was very rural, which I think is like a nice break
if you've been in urban towns for a while.
Melton Mowbray is famous for their pork pies in fact oh oh i didn't know that
yeah they're delicious and uh one of the things i miss most i think there's i think i say there's
like three things i miss from britain and uh pork pies is one they all begin to be i miss pork pies
pubs and plugs the uh the british plugs electrical why do you miss those i don't know too much about the differences there
yeah well obviously the british plugs are famous for being ugly and enormous but um for someone
who's passionate about design they're they're very well designed they're kind of beautifully so uh numerous like safety and
convenience features built in let's see if i can remember them all it's been a while since i've
done this uh this tirade uh but for one they stay in the socket so you can hang them from the ceiling
and they have like they were deliberately designed to have like a lot of tension around the
the plug parts would equal
Yeah, they're out right? Yeah. Yeah so that you could yeah like hang things from them
interesting
Mandatory earthing so it's like safety feature and every every single socket has to have an external switch so you can turn it off at all every plug must have a fuse in it so it's fused safety wise as well and then the
earth prong prong that's the word is slightly longer than the other two so it goes in first
another safety feature so it's always grounded and the electrical the two that are actually live the socket in the wall has
covers over those so that you can't like stick a finger or a fork in them and the covers only
get removed when the earth pin goes in that's why it's slightly longer so it makes a mechanism that
then reveals the live connection so there's no point where there's a hole that you can stick
something in while you're using the plug unless you like you know force it open somehow that's probably all
i can remember but you know i've always been like passionate about like these little bits of design
that not everybody notices that are just like hidden there and so like i thought that was a
bunch of neat things that someone spent the time to do a better job than American plugs, which are terrible.
Yeah, I mean, what happened to me there is this house is a few decades old.
And when we moved into it, I had the ring door chime plugged in in one of the outlets.
And I came back a few days later and it was on the floor.
It had just fallen out of the outlet.
And so then I went through and had to replace a bunch of the outlet um things that are wired into the wall and sure enough yeah
i wasn't that careful and i gave myself a shock so i got the it wasn't the 220 but i got the what
is it 115 volt going through me for a moment which did not feel good you know that's certainly
possible with the american ones but you know brit know, British voltage is 240, so that will kill you.
Oh, 240, okay.
Yeah.
So it's part of the reason that there's all that extra safety in there.
And, like, they are enormous.
So, like, if you have, you know, typical desks set up for a computer,
the whole length of the desk will be, like, sockets behind it
because you need that much space.
So not everything is great that
makes sense so you were uh you were commuting an hour away into london was it by mass transit or
you were driving it yeah yeah like one thing that is nice about europe was that you could get
everywhere by train or bus etc uh so i'd cycle to the to the train station get on the train which was usually on time
this isn't german levels of promptness in britain but it wasn't too bad i think the british could
system a hard time when it's relatively good 40 minutes on the train that would drop me at london
euston so i'd get on the escalator go down onto the subway and then ride about five, six stops to Old Street, Shoreditch, which is famous in London for being full of startups.
I think it probably still is that.
And that's where Lost Femme was.
So, yeah, that was the office trip.
Interesting. And so that I always, you know, I felt like mass transit is better than sitting in a car for an hour. But I did feel like I'm a pretty tall person. So I was always kind of cramped. So I was kind of hunched over my laptop, you know, and every time the bus runs over a speed bump or something, the seat, you know, kind of partially closes my laptop and I have to open it again. It's, yeah, it's much nicer to kind of roll out of bed into the office.
It's way better.
Yeah, well, I did that for a bit while I worked at LastFam because I commuted for a year and
then decided it was enough and I was going to move to London.
But I didn't want to be in the situation of rushing to find a flat.
So I took a tent and lived on the roof of the office for about three months
yeah there was a an abandoned lift shaft and at the top it was sealed and i stuck my tent in there
um i never i didn't tell my boss and they found out and weren't very happy about it but it wasn't
their building so they went too fast so so yeah you went three months how did
a custodian not see that there was a tent there um i don't know like british landlords are very
thorough i guess wow that is wild but i did literally like get out of bed stumble downstairs
after after a few weeks i uh you know wore my pajamas downstairs brushed my teeth got some coffee
and everyone was just used to it it was a real startup way of uh existence for sure
that's awesome yeah the uh they don't have that giant hr department to kind of crack the whip on
that there was an issue uh at there was an issue at google where people were sleeping in the
conference rooms that was a really big deal because I think it's also, you know, the rent is probably similar to London.
The rent is so expensive that you could save you an entire year's salary if you just found a way to sleep at the office.
Yeah, well, I can understand why they would be doing it for that reason.
Well, London's pricey, but it's not San Francisco.
People are more used to sharing
flats, as they call it. Cool. So it sounds like TXYZ is fully remote, or at least embraces
remote since the beginning. Yes, we already have. We just hired someone from India.
It's a bit America-centric at the moment for me. One of the things I wanted to do with this
company is because it's commercial open source.
And for me, open source is about, it's a global thing.
It's not a Western thing.
It's not an American thing.
It's not a European thing.
I said from the start, I want someone in every time zone.
So it was always going to be like this split company.
And as I say, for me, I started in open source
and I was used to waking up
and people had been working overnight.
And I'd have to figure out how to slot that work back in with what I was doing.
And then make sure that we were planning from, you know, not being able to talk to each other in person, even over the phone.
So, you know, it was natural for me to want this company to be that way and to know how to manage that from the start.
And so we're gradually getting to that point.
And yeah, we do have an office in Puerto Rico, which is where we're founded.
We call it the Tea House.
And it's a fun place that is more of a house than an office, several floors for working
and several floors for sleeping.
So that when we do, we'll meet up and we'll be meeting up next month.
There's places for people to stay.
And so we say hi for a few days.
And you can do that more with the fact that we're a funded company
than I ever could be ever could when we were doing open source.
I remember when I was working on apps for Linux and things like that
back in 2005 2005 or so and
we would meet up like once a year all of us who were working on uh whatever it was and you know
that was paid for generously by donations from the community but not everyone could always make
it because you know people from all over the world but it was good just to say hi see what people are
like have a few drinks and dinner with people
play some games doing doing things that you know not the standard things and i think remote
companies need to recognize the fact that you do have to meet up once in a while and you need to
do things that aren't just work because otherwise you have people that are just building relationships
and all it ever is is work related like at t we have every
month we play a game of werewolf over zoom the point of that is to just like make sure that people
you know shout at each other a bit essentially in like in a good spirited way get some uh get
some emotional contact like just get to know each other as friends, not just colleagues. Yeah, that makes sense.
Do you try to meet in person like once a quarter, once a year, once a month?
What's the cadence there and how does that affect things?
Yeah, we're doing once a quarter.
Like the company was founded last December,
but we only finished securing the first round in April.
And then we've been staffing up since then.
So we're still quite small and only recently exceeded like 12 to 13 people.
We don't really have a pattern to it yet.
But the plan is every quarter, indeed.
And so far, that's working.
Cool. That makes sense.
So I want to kind of work us up to Homebrew, which I'm sure anybody out there who uses Mac is familiar with.
But kind of work us through, you know, how did you get into open source?
And, you know, kind of what was the journey that led you to kind of put the pen down and say, I'm going to build Homebrew?
You know, what was that whole progression like?
So programming has always been a hobby for me.
My dad sat me down in front of a BBC micro,
which was this computer that everyone in Britain had in the 90s.
I still don't know if the BBC just slapped their logo on it
or they actually had an active hand in making it
the British Broadcasting Corporation.
But it was called the BBC Micro.
And my dad sat me down in front of it
and taught me a bit of programming one day.
And I really got something out of it.
So I kept coming back to it as a hobby.
So was your dad an engineer or was he a hobbyist or how did that work?
Yeah, he was a, he was just a hobbyist as well. He dabbled in many different things over his life,
but he was super passionate about electronics. And then when personal computing became a thing,
he was like first in line to pick one up. He was always very interested in it. But yeah, he never did it as a career or anything.
And his programming ability was pretty amateur,
but it was enough to get me the spark
so that I could understand how to progress.
Well, part of the reason it was easy with the BBC Micro
is because it booted straight to a prompt that was BBC Basic,
so a basic programming language.
It wasn't a shell like Bash.
It was a shell which was programming.
And so I could straightaway get into writing little programs.
And so obviously I made games, and I made games for years.
Little toys.
I remember one time I started making something that I called Windows 4
because at the called Windows 4.
Because at the time Windows 3.1 was the thing.
I was just experimenting, essentially.
And at school, during my lunch break, there was a little clique of us geeks who'd go in and just program stuff.
And we competed to see who could make the first scrolling adventure game and things like that and like put music on it um so it's always something that i really enjoyed but of course
the school didn't teach it wasn't it wasn't a lesson this was the 90s so it wasn't something
that was typically taught and i never really considered it as a career so i ended up going to i got a master's in chemistry and um the third year of my degree
i went off to work in industry uh for a year and for the first month i really enjoyed it and i was
like messing around with the the big machines and having some fun now like just sorry when i think
of chemists i have this stereotype of a person in a lab coat
with a beaker and a pipette you know mixing like fluids like is that is that what you did or like
kind of like can you educate us on like what the chemists do well you're not far off honestly
the lab coat i worked in a physical chemistry lab so there's three kinds of chemistry organic
inorganic and physical it's like strange how
the first two are just complements of each other and physical chemistry so it had more math or
physics in it than most chemistry and this is the raw one like as physicists will tell you like
physics is the real science and then everything else is an applied version of physics and yeah
you know physical chemistry was really them saying yeah it's true
chemistry is just at the end of the day like raw physics going on down there like electrons are
just strangely all anywhere i won't teach chemistry on this podcast but so i was doing
physical chemistry which mostly meant like i was measuring physical properties of different things that other people in other labs had made so i was measuring the surface tension of surfactants because i worked at kodak there
was a big kodak factory in london at the time i heard recently it's closed down obviously kodak
so well over the last 20 years right this was uh 2002 i think uh so i was measuring surface tension and for a while i i used
this like large machine that i had to calibrate and get the hang of it and i enjoyed mastering
the machine um but then i went home for christmas and while i was there i realized that i hated it
the work was boring and i fell into this huge depression over the next six months where I realized that I hadn't picked the right thing for my career. And I didn't know what to do with myself. So I started programming again, because it seemed like it was fun. I still Linux. And I found open source.
Essentially, I discovered open source as just a route trying to find something else to do with myself.
Now, how did you do that?
So this is the 90s, right?
So you weren't on America Online.
You weren't on America Online because you're in the UK.
But you're on some...
What was the discovery process like back then?
Yeah, well, different certainly.
So it was 2002, so not quite as nascent.
We had broadband internet, so you had a noise-on connection
where you didn't have to dial up.
And the web was coming along.
The web was certainly coming along before Stack Overflow
and things like that, obviously.
So, yeah, like, I heard of Linux because of some of the places on the internet I'd been in the late 90s.
I used to hang out on this music player forum for this music player called Sonic. There was like two major,
because MP3s obviously changed how music was
and how it was consumed.
And that was a relatively exciting period in the internet.
So there was like Winamp was the big one.
Right, right.
And it still exists.
I don't know if anyone still uses it.
Like AOL bought it.
Oh, that's right.
And then there was that one called Sonic, which was a much smaller one,
but it was kind of like the number two.
And I liked it because it had really interesting skins.
Like the music could like interact with the skin itself.
I don't know, like, you know, downloading mp3s it was illegal and fun
but there was a big forum of people who talked and i got to know a lot of these people on there
for some reason or another and like a few of them used linux so i heard of linux by this you know
little community of people that appealed to me so when I was trying to figure out what to do with myself,
I was like, I should install Linux.
So I...
Where did I get... Because you had to get a CD back then
basically.
Because downloading...
Yeah, you could download it. It would take forever.
Exactly, yeah.
Downloading half a gigabyte
of 600 megish
would be a couple of days at that point.
So you would,
you know,
like,
I don't know if Ubuntu exists at this point,
but equivalents of Ubuntu would allow you to,
for very cheap,
mail off for a CD and they'd mail you back.
Oh,
I didn't know that.
I remember using this program called FXP,
which would basically allow you to resume FTP,
which I think you could do anyways.
I don't really know what that program even added,
any value it added,
but I remember I would turn that on
and then sure enough,
like my parents would pick up the phone
and kill the internet, you know, ruin it, and have to resume.
Or I think eventually we also got cable or DSL or whatever it was.
And yeah, it went from taking three days to one day and you'd sit there and wait.
Yeah, indeed.
There was a lot of tools that existed because of the limitations on what you could do back then.
Like the first open source app I made was a file usage explorer
because I had a three gigabyte hard disk.
And so it was very important to me
that I didn't have to delete any more music than I wanted to.
And that I could use my computer
and figure out where all the disk storage was going
and who was being a bad actor.
And of course, nowadays,
no one cares. Those tools don't exist.
Just like your FTP program for resuming FTP, it probably still
exists, but I doubt that many people
use it or maintain it because
if a download fails nowadays, then you just
try again and two minutes later, you've got the whole
thing, even if it's huge.
Or you're using a more sophisticated protocol
like, for instance bit
torrent which is uh really the way that these things should be transferred nowadays yeah so i
set off for the cd and that's how i got into it and then you know it was addicting like learning
how an operating system works until then i'd only use windows and i didn't have to know that much
about how it works because microsoft spent a lot of time making sure it works.
Linux doesn't usually work even nowadays, let's face it.
You have to be a bit more passionate, but it's there for you
if you want to become passionate and learn how these things worked.
I'm glad that I went that route.
Honestly, it taught me a lot about how operating systems worked.
And in many ways, it developed my passion for package managers
because it's just such a key part of Linux.
Yeah, I remember getting, I think, Mandrake was the first one that I looked into.
And just the package manager blew my mind.
Like, I mean, there was, I don't know, thousands and thousands of packages even back then.
And I just remember being like, just completely amazed, like just shocked at what I could do.
It's like, oh, here's a package that does fluid simulation.
I don't know what that is, but it sounds freaking cool.
Like I like, I like the ocean.
And if I can make the ocean on the computer, it looks awesome.
And so, you know, then you go to the website and you see like the wave propagation and
all these things, visualizations of it.
I get you excited about that.
And then you're just going down the list.
Like here's graph libraries.
There's all these things.
Here's like a free version of paint, like a free version of Photoshop.
That's like almost as good as Photoshoposhop like it was just mind-blowing and and that's something that
you know as we get um kind of older and more like familiar with these things we try to take it for
granted but like all of us went through that phase where we just kind of randomly scrolled
through the package manager and saw just unbelievable amounts of human productivity and human effort.
Yeah, I hadn't thought about that in a long time,
but you're completely right.
I forget how amazing it was that first time.
I think I installed Mandrake at one point.
I remember a 2E, they call them now, the terminal
user interfaces. Well, actually, it's not terminal.
It stands for something else.
I forget. Text, perhaps.
Unexpected.
And yeah, the browsing,
this large collection. In fact,
it's influenced a
T we consider what we're building to be a
kind of app store, for example.
And these package managers, in many ways, like the original app stores the original way to like find and install
like huge amounts of free open source software and it really was quite amazing seeing all the
all the things that people were doing like that was inspiring for me for sure uh because you know
i'm the kind of person that whenever I use
something, I, I find something that I don't like about it. And then if I don't like it for long
enough, I want to do something about it. And my co-founder says that if you want Max to do
something, just make sure he's frustrated with it. And it's basically, basically true. So,
you know, I love them, but also hated them. You know, some of the older ones.
So what did you hate about them?
Like, I remember trying out Debian
and wanting to install some package
that wasn't in their package registry.
So people would provide like a deb you could download,
a.deb.
And like the first time,
I just remember the huge amounts of frustration because
it just wouldn't work it would not install the thing uh because i didn't have a number of other
dependencies i needed and then when i tried to install those dependencies it would uninstall
some of the other things i had and then i couldn't install the new thing anyway because it depended
on two things that were in conflict with each other essentially like these things are a lot better nowadays but back then it was a lot more common
because i don't think people appreciated just how vastly huge the open source ecosystem
was and was becoming and how much complexity there is in how all these packages depend on each other. It's one of the more complicated graphs
that humanity's probably invented, honestly,
all the myriad of different things you need
in order to start running Node,
in order to work on your React project.
I mean, Python still has this problem
where if you pip install,
there's a command where you can add something
to your requirements.txt file in python
and i think by default it adds the explicit version so it's like okay you want to use my
software you have to be running you know 13.7.3.1 of software xyz and then that means that you can't
run my software with anything else because that other thing will now require something it's a
little bit off and so that that problem hasn't gone away. I think Node does a good job with the
caret equals where they're willing to tolerate minor revisions, but Python still has a problem.
That's the way it should be. And that's how we're building T,
incidentally, like carets in general. But Node has the advantage as well that JavaScript doesn't mind
if you have two
versions of a library loaded. It just shadows them. I'm not sure. Yeah, which means it's part
of the reason that JavaScript programs can end up with 2000 dependencies, right? Like,
because some of them are actually like three or four versions of the same library, because it's
been overspent. Oh, my mind is just blown.
Yes, it's not really how it should work.
But on the other hand, like, it depends on your goals.
Like, for me, as I was saying, like, these packaging graphs can become so vast and complicated.
Like, developers want to get on with work and chip software.
So that really should take priority.
So the Node way is, like, you know, Node is so huge now. and chip software. So that really should take priority.
So the Node way is kind of like,
you know, Node is so huge now,
easily the most successful tool for programmers of all time.
So they made some good choices
or NPM did at least in that respect.
It's just the programmers in us are like,
this is horribly inefficient and disgusting.
Yeah, I can't't believe although it makes sense because you know i always wondered you know because because whether someone makes a minor or a major revision is completely arbitrary
it's up to the developer to decide this is a minor revision or not so i always wondered how
um when i built uh you know websites with node that it more or less just
worked and i think you just kind of clarified that for me that you know it's running 10 different
versions of bootstrap or whatever yeah they bypass dependency hell and everything you know like a lot
of popular languages are still loosely typed but like javascript is like the ultimate loosely
typed thing as far as i'm
concerned so you might end up with like four versions of this library running and they're
all passing around their own versions of these data structures but because like the code that
uses it only checks for the stuff it cares about it generally just works until it doesn't suddenly
and spectacularly but you know people can't see this because it's a it's it's an audio show you can't
see this but patrick is kind of like uh when that gentleman sees the trash uh on the floor and the
single tear rolls down his cheek that's what patrick's looking like right now i don't think
any of this would work in embedded no i've run through lots of different languages.
I started with C++ because the stuff I was doing in open source and Linux was using Qt.
It's called Qt.
It's a cross-platform toolkit.
And Qt made C++ a lot more bearable.
But yeah, I've certainly learned that too strong a typing system just gets in the way of getting work done
but not enough of a typing system at all means that all you're doing is saying that well this
software is not going to work and I don't know how in a couple of weeks in a month there's going to
be some bug one of my users is going to suffer for this and uh I'm just okay with that so nowadays i quite like typescript actually
because i feel it's like this nice compromise between the loosey-goosey world of javascript
and something which has a strong enough type system that when you when you compile it you
feel that it's done a lot of checking for you probably everything's so we're building a lot of t with
typescript using dino oh what is dino i've never heard of that uh do you know it was made by the
same guy who made node and it's basically a successor in his mind uh it's an you know an
anagram or acronym or whatever it is of node okay so oh interesting oh you have actually i remember
reading an article about it but i can't recall the uh oh there was some kind of technical
motivations i think maybe around threading maybe i'm sure you would know like why the person forked
uh node actually i don't but i'd be very interested to watch talk about it so i must
make that happen because i wasn't that into JavaScript until about
three years ago. So I didn't really care apart from like,
I made the brute formula for Node and NPM back in the day and things like
that. But yeah, there was, there's certainly limitations with Node.
You can, you can tell. And so they threw away a lot of the baggage,
you know, in order to make it sort of like a fresh start in many ways.
And it has,
it has a really nice security system
where the programs you write with it,
you have to opt in explicitly to aspects of the sandbox.
So it allows you to have internet,
but only if you compile it so it has internet
and file system access, et cetera.
So you get some security guarantees
that are very nice for what we're doing with T.
One of the main reasons that we picked
it though is because you can compile your typescript into a single binary with no dependencies
so t is a single binary you can download with no other dependencies like i did this with brew right
uh brew you could clone the repository and it worked in the clone it was a working brew system
in the end we made an installer because people wanted that.
But I'm a believer that with something as fundamental as this kind of developer tooling,
every developer has a different preference on how they want it to work.
And early adopters, especially, are the ones you want
because they're the ones who then evangelize your product.
And they want it exactly how they want it.
So give them as many choices as you can
so to use a single binary compile it for windows linux and mac we have an installer but you don't
have to use it it's up to you yeah it's funny you mentioned that i was thinking about with
eternal terminal we're still not in the debian uh you know main uh manager we're in all the other ones
and the reason is because back in eternal terminal 2 we're up to 7 now i think i don't actually work
that much on it anymore myself but i think it's up to version 7 but in version 2 we didn't support
fish which is this similar to bash or it's a it's a shell and we didn't support it my developer uses
it ah okay cool so so so yeah there's people are really passionate about it and uh i can't remember
exactly what happened i think i basically just didn't implement it i don't think i closed the
issue honestly i can't remember maybe i did some Phish developer got so upset, and they were also one of the Debian maintainers.
And for that reason, you know, half a decade later,
we're still not in Debian.
So I think it was really a lesson that, you know,
the people who are kind of the early adopters,
as you said, they're also the people who are the most passionate about,
and I think that's true for language inventors as well.
You know, to sit down and say,
Python and C++ and all these languages, they're not cutting it for me. I'm going to go and invent
Rust and spend 10,000 hours evangelizing it. That takes a certain mindset and really good
early on to appeal to those people with that mindset, which could be really difficult.
Yeah, well, that's a very good point.
And it's something that I think a lot more open source projects.
When people ask me, how do you make a successful open source project?
Appealing to those early adopters is one of the things they say.
Having a great readme is another thing i spend a lot of time talking about and the t readme i probably spend 10 of my time just crafting that we're not out yet but we're going to be out soon and then i know that when it hits hack and use or twitter or you know slash
dot if you can actually still go to slash dot i used to read a lot i don't know if that's a thing
anymore actually now i'm curious i think it still exists my shot still exists I used to read a lot of slash. I don't know if that's a thing anymore. Actually, now I'm curious. I think it still exists. Slash. still exists. Yeah. They'll read a blurb,
the blurb on slash. say two years, brew two, max hells, make new thing. And then they'll click on
the link and they'll go to the readme. So, you know, having a readme that carefully explains
to people why they need it, how they can use it,
and how easy it is for them to try it out.
Very important.
Yeah, that makes sense.
So I used to use Mac ports and then I switched to brew.
So does Mac ports predate brew
or is that just my own personal experience?
Okay, yeah.
So kind of walk us through that.
So Mac ports exist. And at some, you know, MacPorts exists.
And at some point you say, I'm going to write Homebrew.
You know, what's that?
What happened there?
And what's that journey like?
And how did you kind of bring everybody over to Homebrew?
Yeah, well, it's a pretty good story.
So I use MacPorts like everybody else on Mac.
I was at LastFem, which is a music startup, still exists,
not really a startup anymore at the time it was.
And I was working on the client team because I got the job at LastFem
because of open source, my work on open source.
I worked on this music player called Amarok for Linux,
and it was very popular.
It was a pretty good piece of software for Linux anyway.
And the people at LastFem loved it.
So they asked me if I needed a job.
And at the time, I was living in my parents' house for free,
having finished my chemistry degree, only just passing it because I was so disillusioned with it.
And my parents were ready to kick me out of the house
for telling me to go get a job.
So perfect timing, frankly.
I went and got a job because of open source.
So I worked on the client apps because that's what I did on Linux. Like we were
a website, but we had little apps that you could use to play the music with and scrabble.
We had six apps, Windows, Linux and Mac, Android, iPhone and BlackBerry. BlackBerry had an app store
for a very brief time. It was our least favorite app that we made by far horrible horrible sdks and apis but they rushed it they panicked because
of the iphone uh so in order to build all these apps we only had a small team we used mac because
it was the only platform where the developer tools were pretty good and you could emulate windows and
you could emulate linux so we could build for all platforms and then we had all this open source
that we used and combining all of that and building it
and making it work and then trying to ship and deploy.
It was just a nightmare, frankly.
I feel that we spent probably 30 to 40% of our time
just messing around with build tools
and developer tools and package managers.
So I used to complain about the fact
that it was tedious work
and it was in the way of us getting what we
wanted done and one day one of my co-workers got fed up with my complaints and challenged me to do
something about it so i went home and started writing the code for homebrew putting together
all the ideas i'd had yeah tell folks like uh what was painful about mac ports because
a lot of folks listening have probably never even heard of mac ports you know especially if you're
just getting started homebrew is really kind of taking the mindshare away so so you know what was
mac ports the mac ports experience like back then yeah so um i think the worst part for people back then about MagPorts
was that you had to build everything from source.
So we were talking about Gentoo just before the show.
It was a similar kind of model where you build everything
all the way up from LibC, which is basically the fundamental library
that all open source and all software in
the world derives uh and uh all the way up to whatever you're building and compiling software
used to take forever forever because uh these cpus really were very underpowered relatively
20 years ago yeah especially laptops you. They're meant to be small.
We had Mac Pros at the time.
Oh, nice.
The old ones that were even bigger than the cheese grater ones
that we've got nowadays.
So they had like 16 cores.
They cost like thousands of dollars,
but we got them because we were
trying to build this software all the time
and it took too much time.
Even then. So with Mac Pros, you had to build everything software all the time. And it took too much time even then.
So with MapPos, you had to build everything from source.
Now, the original version of Brew, you had to build everything from source.
But I took the very sensible attitude that Apple has already compiled a bunch of these libraries for us.
So let's reuse them.
So if you build something like Wget,
which is one of the classic uh ways to download things in the
terminal like people tend to use curl nowadays because it's more portable and and uh more
commonly installed by default but i always use wget as my example with brew it would take five
minutes to install it with mac ports it would take three hours so you know yeah what is apple
you said apple is already building some things can you
dive into that i don't understand yet so uh osx or mac os as we call it now is unix under the hood
uh built on top of free bsd originally i think it's free bsd it's one of the bsd yeah that's right
and so uh they didn't bundle a package manager, which, of course, you know, we call Brew the missing package manager for Mac for quite a while.
But they did bundle a lot of open source.
I think people don't realize how much open source that Apple actually do actively support with macOS.
But a lot of these fundamental libraries, they're there and also their libraries that they bundle uh the ones they've
written that are closed source contain some things that are very useful to open some packages that
they can use so macbook is like it macbook took this attitude all right we're just going to ignore
the operating system completely we're going to handle everything ourselves and i get that
especially get that now
like if i'd known how difficult it is to make a package manager i might have taken their uh choice
honestly but i didn't know what i was doing so i built brew with a different idea and one of my
favorite quotes about building open source software is by the guy who made php php uh still
extremely huge programming language
that I doubt anyone who's only learned to program
in the last 10 years has ever touched.
But he said, he quoted something along the lines of,
I didn't know what I was doing.
I wasn't trying to make a programming language.
I just did each part of it as I needed to, step by step.
And I think that's how a lot of really big open source projects
have come about in time.
Because if they knew what they were doing,
they would have known that the things they were attempting
were difficult, hard, or maybe even considered impossible by experts.
But they didn't know what they were doing, so they just tried it.
And then they made something that got some popularity,
so they kept having to hack on it because they felt like an obligation to this community that
emerged and certainly what happened with me improved so packaging is hard it turns out
and i understand why macports would say okay we're just going to do everything ourselves
because then they have control over it but it meant that installing wget took three hours
from five minutes and yeah i have a similar story about that.
I'd never really used Macs until I became a working professional.
So I'd been Linux pretty much the whole time since high school.
I got to my first job and I still had some work to do on my PhD.
I think my university needed...
There was some issue with LaTeX.
So basically, my LaTeX files weren't compiled in the right style and they couldn't print
like the dissertations of the year or whatever.
They were harassing me about this.
So I said, oh, not a big deal.
Like I'm just going to open my Mac.
I'm going to install like whatever LaTeX program I need on this Mac here while I'm at work.
I'm just going to knock this out.
And so, yeah, I installed Mac ports.
I said, oh oh let me install
this mac text and uh mac text it literally took four days i was like port installed mac tech and
i came back you know and it's like okay i got some coffee it's still running i did a bunch of work
in another tab it's still running it took four days like my my laptop was burning my legs on the bus home
yeah it was really quite crazy honestly interesting you talk about latex because we um
we have a white paper like other crypto projects tend to do and we build it from markdown into
a pdf that looks like you know a white paper should. And we're using LaTeX. So we recently have, like, packaged the entire LaTeX stack.
And, yeah, it's enormous.
It's incredible how much work that has been put into this stuff
over the last 30 years because, you know,
that's how old these kinds of things are.
It's a shame that more people don't use it outside of academia honestly because it is a nice
documentation format yeah it takes an enormous amount of time to compile but even now even still
i think we're into like the 30 to 40 minutes mark now
yeah i think there was uh different modes uh i think even in Mac ports, you could specify flags, I think.
And there was a minimal flag.
I don't know if I could have even used it, though.
But yeah, the default just took forever.
It's not worth the risk, though, is it?
Because it won't have something you need.
And then you'll find that you wasted one day rather than four.
It doesn't work.
Yeah, exactly.
Always build with everything.
But yeah, Mac ports wasn't bad.
It just wasn't great. I think the biggest issues I yeah, MacPulse wasn't bad. It just wasn't great.
I think the biggest issues I had with it was it wasn't developer friendly.
And I wanted to build a tool that as a developer, I could hack.
I wanted a package manager that I could hack.
And so Brew was built from the beginning to be more hackable than any package manager before.
I'm sure this is part of the reason it was successful.
Even though nowadays, I don't think anyone knows you can
hack it. And a lot of the hackable
features have been removed by the current
maintainers over the years because they
made it more difficult to maintain.
But
yeah, they were cool features, and T's
going to have all of them.
Yeah, that makes sense.
I love how easy it is to add
repos. That was one thing. I know with Debianbian, this gets back to Eternal Terminal, you know, when people want to use ET on Debian, you know, they have to copy this really long string and it requires sudo. And so they don't really know what it's going to do to their computer. I think it just it adds some GPG key or something from the internet. But then they have to run update, and now it does something different.
And it's just really complicated.
With Brew, it's BrewTap, right?
BrewTap and then the place.
I think it's integrated with GitHub, right?
So BrewTap, the organization name, the repo name, and GitHub, and you're done.
You're good.
Yeah.
Yeah. Yeah, yeah.
Like, that was certainly one thing I wanted to do with Brew
that I felt that very few of the other package managers had
is make it easy to use and fun to use.
Like, get out of your way so you as someone
who really doesn't care how the package manager works
or what it's for in many ways can just get the software they want installed easily and quickly.
And yeah, the taps thing, it was always my plan to make it
so that other people could maintain packages outside of what we were maintaining.
I didn't really develop that idea very much
because it turned out maintaining Groove by itself was a full-time job.
So someone else in the end came up with the name Taps and the idea for Taps,
but I rejected their idea and did it differently,
which caused the person who did this contribution to quit the project.
Oh, no.
Well, it happened.
Yeah.
But I was right because their idea for Taps, right,
it would explore the fork graph of Homebrew
and search for formula in the fork graph
and then install them.
So, you know, on GitHub, you fork projects
and then you can add stuff.
So this was really good in many ways as an idea,
and I've used this idea for other things since then,
because open source should, GitHub as a whole,
should focus more on forks
that's some good work that gets done in forks and people never find out about them and
open source is all about other people starting to work on these projects but anyway this isn't a
site uh but i didn't feel that people would be able to trust the tool if it could just install
a formula like randomly found in the fork tree without some kind
of reputation system and i felt that this would be bad for brew and for the user so instead i
changed it so you had to explicitly add tabs and then they were like repositories full of
categorized formula effectively maybe it would just be someone who is passionate about these few projects or
maybe it's like an organization or an entire uh open source uh project that maintains multiple
different packages and with hindsight that was definitely the right choice because that's how
people have used them uh you you find the tap and you trust the person who's telling you about the
tap rather than it being some sort of random thing.
The original idea was more open source,
but it was risky.
So yeah, it was always planned to do something like that.
And that's because I wanted it to be more like that.
Like Mac ports, I tried to contribute to Mac ports once and I couldn't even figure out how.
So I wanted to build a tool
that you didn't need to figure out how.
It could just like automatically
bring in other people's contributions
as long as they okayed it.
So yeah, it was always a goal. Developer
experience, user experience.
I'm super passionate about both
of those things.
Yeah, that makes sense.
We just had some core Ruby developers
on the show.
And what inspired you to use Ruby for the formula?
Yeah, I love Ruby.
I've only recently realized how much I miss it.
Because the only thing I've ever been able to use it for was Homebrew.
So I picked Ruby for a few reasons.
One, I wanted Homebrew to just work on Mac without any messing around.
So I wanted, as a result, to pick a scripting language because I wanted people to be able to
clone Homebrew and then it immediately just works. There's no compilation step. There's no build
system stuff that you have to do. Because at the time, especially, it was extremely common that
you couldn't use
any software without building it first so you were completely dependent on package managers
so you would like find out about a new project and then you go to the website and you'd find
that your package manager that you were using didn't support it yet so then you have to decide
whether or not you were going to like figure out how to make the thing work which would take hours or just like not use the thing at all and wait until it appeared in your
package of choice yeah i still have this problem today there's a um you know in wi-fi you have the
2.4g and the 5g wi-fi right in linux it's really hard to find a wi-Fi adapter that's 5G that works in Linux.
And I found one where I had to build a kernel module from the source.
The whole thing took me multiple hours.
And then as soon as I upgraded the OS, it stopped working.
So finally, I was like, forget it.
I'm going to get a 2.4G SSID up in the house just because of that.
So it's still a problem today. It's such a familiar story. 2.4G SSID up in the house just because of that.
So it's still a problem today.
It's such a familiar story.
It's why I rage quit Linux actually was like the seventh time in several months where I didn't have any working Wi-Fi and I had no other internet.
So I was just sitting there trying to figure this out by myself.
And then I was like like apple just released an
intel mac and uh osx looks like it's unix but prettier and with some user experience considerations
so i bought one and never looked back i obviously use linux a lot like a lot of people do nowadays
but only as a server and not as a desktop right oh yeah same thing i i have a hard time uh i tried the linux laptop thing back in
2018 i was like oh by now it's got to be a better experience and i was i was back to macbook
in six months yeah i haven't i haven't looked into desktop linux in years but i have a friend
who recently switched,
well, a couple of years ago now.
He's been doing this a couple of years still,
from Mac to Linux.
It's because mostly he got fed up with Apple,
which I get.
The guy worked for Apple for years ago,
so he had a better understanding, I think,
than most people about them and what they're doing.
But he decided that what was going on with OS X and iPhone and all that
was just not worth it for him anymore, so he switched back to Linux.
And he's doing all right.
He doesn't complain, at least.
But I think he was politically motivated to a reasonable extent.
Yeah, I think if you're motivated, you can do anything.
I couldn't get the Thprint uh you know the thumbprint
login to work and they're like oh you know the company that releases the thumbprint this is a
dell it's not even like a random brand and they're like try building it from source it didn't compile
so the thumbprint never worked yeah god you bring back a lot of memories
you know like it's basically these kinds of frustrations
that drove me to doing homebrew it's like i want all this stuff to get out of the way because like
oh at the end of the day i like making other things and i like playing around with new things
i love new tools and apps and utilities that people build in open source and i want to try them out
i was like i just want like the whole bit that's difficult to get out of the way so yeah i built
it from the start and throughout with those being guiding philosophies for how it should work
like the people who did join the project and now maintain it in my absence i drilled it into them
like quite thoroughly and maybe even like unpleasantly that the most important thing was that Homebrew was robust,
that it worked, that it got the user what they wanted.
And so we spent a lot of time on error messages and stuff.
Your experience with compiling your Wi-Fi driver.
The problem was the error messages didn't help you
to figure out what to do about it, right?
Yeah.
If they could have been more useful, then probably you would have been able to figure about it right yeah if they could have been more useful
then probably you would have been able to figure it out and then it would have been a minor
frustration rather than the major frustration that made you abandon even trying to do it and
so with homebrew the error is always like attempting to be helpful and then we built like
the doctor command into it so doctor like tries to diagnose what might be wrong with your system for you and give you helpful tidbits.
Then direct you to stuff on GitHub that might be able to help you.
We used to make it so that when the build failed, we'd search GitHub for you and see if we could find where someone else had already had the same issue.
So maybe you could get some help there.
Well, I believe that people can fix these problems themselves.
It's just we're the experts,
and we need to give as much automated help as possible
because we don't have enough time to do it by hand.
That makes sense.
So when you install Homebrew,
I'm assuming it installs a Ruby VM and interpreter
because I don't think that comes built in on Mac, right?
And then how does that work?
That was one of the reasons I chose Ruby
is that it came with the Mac.
And I think it's still done.
Oh, I didn't know that.
Yeah, it's like an older version now.
And so, you know,
Brew had to like maintain compatibility
with this older version for a long time,
probably still does.
But yeah, it came with it.
So yeah, I picked Ruby because it came with the Mac.
I wanted brew to be
this thing that just easily installed and just worked immediately without any messing around
no installer no build systems and uh i wanted to try out ruby i'd heard great things about how
great ruby was uh ruby on rails was like relatively nascent this was like 2007 2000 that was 2009 2009 and uh you know i read some
tutorials about ruby and it like looked beautiful and like frankly it is i i miss it because you
know i've been doing tea i've been packaging with tea and so i ended up doing some ruby again i'm
like ah it's beautiful nice so what is beautiful what's beautiful about ruby
it's just so elegant there's there's a way to do everything in ruby that i used to spend
hours rewriting my code just to make it more pretty because i could i knew i always knew
there was a prettier way to express it in ruby and you know like the primitives are great. Just today
with TypeScript, I was annoyed
there's no zip function, for example.
There's just not enough functional
primitives that come
with TypeScript or
JavaScript. You can get libraries
that do these things, but then
they don't have enough language
built-ins
to make it so that it works nicely.
So I don't like using the libraries,
and I just avoid using zip and things like that as a result.
But Ruby's standard library was really nicely designed.
And some of the little features, like they'd borrow a few things from Perl,
but not too much, so that it was a nightmare.
And then you could, you know, the one-liner type input system from Perl, but not too much so that it was a nightmare. And then you could
the one-liner type input
system from Perl so you can write
little scripts that will
take
inputs from the command line
and then work on them
seamlessly and then automatically
print outputs.
So you could write these really tight
little scripts and it just felt so good
to use
but yeah I couldn't write T in it
because I need a type system
nowadays I've learned
I learned without a type system and then
my first set of professional
open source work was C++
which is too typed
and too unpleasant in many other ways
then everyone was super passionate about things like Ruby
and JavaScript and Python,
because suddenly you weren't spending all this time
with the type system in your way.
I think things like TypeScript have got the right balance
between allowing you to escape from it
and be able to do reasonably good code when you need to
without the type system constraining you.
But also the type system is really nice and fast.
God, it's fast because I used Swift for quite a few years
because I was quite an iPhone developer for quite some time.
So I became super passionate about Swift.
I wrote a bunch of open source tooling for Swift.
But it takes so long to build a Swift program.
Right. Similar to Scala.
Scala has the same problem.
Like, as a developer, you need
these fast debug cycles, because otherwise you
lose what you're doing. Your brain can
only hold on to all that context for so long.
Yeah, I mean, I was in
some C++
templating hellscape
about a week ago.
And it's interesting.
I mean, there's auto now.
And so there's type inferencing and all of that,
which definitely helps.
I mean, you see auto everywhere now.
But occasionally you will still end up with some just complete template nightmare.
Here's what I think the problem is with C++
is that people, you know,
people will use pound defines and templates
because they don't,
instead of using correct design patterns.
So like, for example, you know,
you could do dependency injection
and inject a clock into your class.
And so now you have a system clock, you have a fake clock, and you can inject any clock into your class. And so now you have a system clock,
you have a fake clock,
and you can inject any clock you want.
Or you could have a template,
which takes like a class clock.
And now like that entire code base
needs to be in the header file.
And like everywhere you use that class,
you have to do bracket, you know, my clock,
except when you're in a test.
And now, you know,
so it's just people use templates
in ways that create landmines, I think.
Oh, absolutely.
I remember many times having similar issues.
And I remember those template errors
that could be like three or four pages of compiler output.
And like figuring out what the error was.
Like Q was nice in that respect.
They understood that like C++ standard library
just went over the top and needed to be discarded.
So they did their own.
I remember having fun with macros.
I edited a co-worker's header file at one point
and put hash error at the top.
And as a result,
every single thing you tried to do with error and because of the way
the c++ compiler did or maybe i did a trick of some sort it didn't say where the error was
happening and i let him like try to debug it for like 20 minutes before i walked over and like
fixed it for him but yeah you could you could really do like evil things it's from an era where you know developers just believe that other developers
needed to be able to like wade in there put on their big boots and figure it out but you know
we made the right choices by realizing that that wasn't actually a good use of developers time
at the end of the day we're trying to improve the world with software and if we're
wasting time finding like a prank that your co-worker put in because it was possible
it's not good a great april fool's uh prank out there if you're listening to this show
and want to know a good april fool's prank yeah you pat if you're in C++, you pound define and replace if with if, you know,
rand is greater than 0.999 and the actual if statement.
And so you've created your own quantum computer.
And so now you have this beautiful quantum computer that you can use,
and it'll run for about an hour or so.
Yeah, man.
It's just crazy, isn't it, that the language
allowed you to literally
do a
string replace on keywords
and you wouldn't know.
You'd have to dig really deep
to find that. And like, yeah, we all
found open source projects or other people's
code where people were doing this stuff
with C++. It needs to die.
Rust is fabulous in relation.
Did you hear about Rust going into the Linux kernel?
I was very excited about that.
That happened earlier this week.
Yeah, we're recording the show in September.
So yeah, this just happened.
So I'm really excited about that.
Yeah, it's so good.
It needs to happen to all the base level
things and the Linux
kernel will only benefit, in my opinion.
I'm sure there'll be some teething
troubles for a while, but I want to see
things like OpenSSL replaced
with Rust
equivalents over the next
five to ten years.
The entire security and robustness
of everything we've built uh needs it yeah can
you imagine when you replace open ssl with a rust version and find you know 3 000 exploits
yeah that would that would be a fun thing to read about so i mean i hope someone's doing it i think
i think i've read that some people are yeah a lot of open ssl code is is pretty gnarly because it's it's like um it's c that they're
compiling with a c++ compiler you know but it but it's a bunch of global functions that are taking
classes as objects and everything so it's going to be a brutal yeah it's a brutal port but someone will do it
it's an important enough library
oh yeah
it's foundational and it's interesting in the respect
that it's like 20-30
years old at this point and like it's
full of
very well tested
but still buggy code
it's a testament to how bad I think humans
are at programming and why
we need tooling to support us yeah totally so what is um like the most kind of uh crazy experience
you've had with homebrew like what's a what's an incredibly complicated situation you've had
to deal with it could be you know arguments over a package or
or some really esoteric error or what's something that kind of really kept you up at night when
you're doing homebrew well i certainly did have sleepless nights at various times because it
became important and worrying about whether or not i was taking it in the right direction,
it mattered to me.
Some people think I'm not a very nice person, but I genuinely care about these bits of open source I put out there
and how it impacts the world and what the world is going to get out.
I think the reason I'm not considered nice in some ways
is that guy who committed the project over the taps thing.
I just stood my ground. I stood my ground. I was like, I don't think it should be ways is like that guy who quit the project over the taps thing, right? I just took my ground.
I was like, I don't think it should be this way.
We need to do it this other way. And it's,
it's hard to have like,
especially if you put work into something rejected in that manner. So,
you know, I felt like a bad person a lot,
but my priority by far was the product,
the thing that we were building and how that impacted open
source and how that impacted the entire software ecosystem all developers of any kind so you know
that that's stuff like that i remember like stories like you know when we put node in we bundled npn
with it and then isaac didn't want that so he came up and we argued for like
several days about whether or not it was
Homebrew's job to bundle
NPN with Node or not
and in the end we agreed
we agreed with them you know that was something
that we tried to do with Brew as well it's like
we weren't we didn't consider
us to be the most important part of the ecosystem
we were just like the middleware
between the people who knew what
their open source should do because they're building
it and the users who wanted to do something
with it. I think a lot of these
packages, they take the attitude that
they're building the system and
what matters most is them.
And
I don't agree with that.
Yeah, that makes sense. Yeah, I think
everything you build has an audience
and you need to kind of understand and iterate.
There was some issue with Eternal Terminal early on
where we have an auto opt-in.
There is an error, or not an error message,
but there's a little message and delay the first time.
We have an auto opt-in to Sentry so we can collect crashes.
And that was a really difficult kind of decision to make, because, you know, I do really respect people's privacy. And we're
very careful not to log someone's IP address or anything like that. But even still, like,
you know, logging, you know, a crash stack, so it makes some people nervous, it was a difficult
decision. But then on the flip side, like I constantly getting issues like, hey, here's a crash.
And there's no way to repro.
And we don't have all the artifacts.
It's just gone.
It's difficult.
You're caught in a space.
You can't make everyone happy.
So you're always kind of a mean person to somebody.
But as long as you're a nice person to somebody else
at the same time, it works out.
I got some stories about crash reporting
with Amarok, the music player.
It was very crashy
because all of us were relatively junior developers,
frankly, at the time.
So I built in a thing where if it crashed,
it opened up your email client with
crashes at Amarok.org with the backtrace in it. And I felt this was a nice compromise there.
Like they choose whether or not they're going to send it. And we've made it very simple for them
because we grabbed the backtrace and stuck it in an email and they understand how email works.
There's no magic going on that they don't understand potentially reporting things that
they can't see. And that worked really well to the extent that they don't understand, potentially reporting things that they can't see.
And that worked really well to the extent that we couldn't keep up
with all the crashes.
And then with Brew, when it crashed,
I just dumped as much information as I could that I would need
to debug it in the terminal and then gave them the link
to opening a new ticket.
I was like, if you want to report this bug, I'll fix it.
Just copy and paste everything above into the ticket.
Yeah, makes sense.
And that was pretty effective.
But part of the reason it was effective
is that I was very quick to fix the bugs as well.
With open source, a lot of the time,
you report a bug and you never hear back.
If you've ever reported any tickets to other hear back if you look at your if you've ever reported
like any tickets to other projects if you look at your github history you'll find tickets you've
opened years ago that never even got a response like open source has a bad rep where you know
like in general like we do it for free so you know most people don't really have the time to provide good support.
With Homebrew, I quit my job to work on it full time so that I could give it that kind of support.
Wow. Let's dive into that.
And then that'll be a good segue into tea.
So, yeah, kind of walk us through that.
I mean, you quit your job.
Was there a ramp where you were already getting donations to a degree where you could quit did you kind of like just take a leap of faith like how did how did that
work yeah i've never received a single donation no that's not true i've received some donations
but only after i'd left the project okay so you how did you work full-time on it then i saved some money up um you can live fairly
frugally in britain if you want to and i wanted to so i saved some money up and then started
working at full-time like it had become apparent that it was a success and it was by far the most
interesting thing i could think of to work on. And I wanted
to make sure it was a big success. So yeah, I quit. And I survived about six months on what I had.
I remember going to the bank and asking them what happens when you go overdraft, because I was about
to go overdraft the next day. And they looked at me and I was like, you know, an idiot because I
was 28 and I didn't understand how banks work. They told me it'd be fine.
But, you know, I had to get another job.
So I got another job at that point, worked for TweetDeck,
made their mobile apps.
But it began like this cycle for me where I would get jobs that I,
you know, I wanted to do most of them.
I don't like working on things I don't like. But, you know know my story is that I couldn't imagine working in
chemistry for the rest of my life it made me extremely depressed so if I don't like the work
then I get depressed so I have to like it to a certain extent but what I've wanted to do for the
last 15 years pretty much is work on open source I find that it's just the place that I bring the
most value to the world and I get the most satisfaction.
I love working with these big communities and building tools that everybody needs,
whatever kind of thing they're working on.
It's just incredibly rewarding.
And so I cycled for years between full-time work and working on Homebrew and my other open source projects.
I've got quite a lot.
None of them as big or as famous as homebrew of
course uh until i burned out essentially like i it'd been years i've been doing two jobs
essentially all the time and never really having enough time for the open source work and so i
felt homebrew was good enough at that point, and so I left the project. People had turned up that were excellent.
You really can get the best people in the world
for open source,
because they turn up,
and they have to really want to do it.
You're not paying them.
They love it.
Right, right.
Yeah, that is amazing.
I mean, I think you're right
that it's a permanent mark on civilization.
You could get a paycheck for that paycheck. I joke that I have direct deposit and direct withdrawal. The money comes in, the know, century, decades or centuries, way out of the future, and no one's using any of these things anymore.
You know, those ideas will make their way into the derived projects.
And, you know, the next person who builds a package manager is going to have a GitHub integration that's really lightweight like that.
Right. And so in this way, those are the marks that are permanent.
Yeah, well, brew.
There's so many different brews now.
The one I found the other day is called Pearl Brew.
It did have a lot of influence, the ideas that it propagated.
And all the ideas I had for brew were based on other package managers I'd used.
There were certainly some innovations in there where I'd put two of these ideas I had
because of using other people's tooling together
and made something that was better and newer.
But yeah, we were all building on the shoulders of giants
in open source, and it's part of the reason it's so great.
That's why we hate the idea of software patents, right?
All open source people hate that because the very idea that you
couldn't take some good idea someone else has had and use it to make something better or new or
different is very offensive but you know that's the world yeah you know that was a big deal like
uh around 10 years ago and then i haven't heard very much about patents or patent trolling in a while. So
I don't really know what happened there. It'd be fascinating to dive into that. We should do a
whole show on just patents and what really happened there. It seems like we're in some
type of healthy situation now. I don't know if it's like a hostage situation or what's going on,
but it seems like the patent trolls have died down lately at least yeah i think you're right and i hadn't really noticed that so that is is a huge
relief there was certainly a period where it was starting to look like these software patterns and
the trolls that owned them were going to seriously disrupt and damage software and the internet yeah
so something happened yeah Yeah, totally.
Maybe it was the Free Software Foundation.
Maybe they pulled it off, what they were trying to do.
Yeah, I think.
I mean, the last I'd heard about it was, you know,
these big companies, these FANG companies,
were all stocking up on these patents.
And so I think it created almost like this
mutually assured destruction type scenario.
And maybe that got everybody to calm down.
Yeah.
Yeah.
So, okay, let's jump into tea.
So tea is, you've said so far, tea is a package manager.
So kind of tell us about like what got you inspired to do tea?
Was it straight from homebrew to tea or was there anything in the middle?
And kind of what, you know, lead us into like what tea is all about and what you're trying to do tea was it straight from homebrew to tea or was there anything in the middle and kind of what you know lead us into like what tea is is all about and what you're
trying to do there yeah so well i stopped working on homebrew like 2015 2016 and i'd been like
winding down for about a year or so before that really uh i'd become very interested in iPhone apps, which I stopped being interested in a few years ago. So
in between, I did a lot of iPhone work and made a lot of open source for the iPhone ecosystem
as a result. But I never thought I would do another brew. My people have asked me
all the time since, are you ever going to do another one and like i certainly been
keeping notes over the years about what i would do if i made something like a brute two like i'm
a possessive note taker in many ways and i had pages and pages of it which i've put into t
but i didn't think i would like i don't typically go back and do sequels.
I like new projects and new ideas, but it's been long enough.
And, well, I have a son now.
Oh, congrats.
Just, thank you.
It's four months.
He's quite a little rascal.
About a year ago, me and my girlfriend were trying to get pregnant and at the time i was working on uh open source and some other little projects i was trying to make some
like micro sasses and stuff like that i wanted to work for myself and i wanted to be able to work on
open source when i wanted to be able to work on open source so we got pregnant a lot quicker than expected so uh it the gynecologist suggested it
would take a year but it took about two weeks and uh suddenly i found that i all my plans
were in a bit of disarray so i was like okay i've either got to go back into industry you know get
a normal job so i can like provide for a family or I got
to figure something out.
So I pulled over all my old ideas and came across Brew2, the ideas I'd written down
there.
And I had a friend who's been trying to get me into crypto and Web3 for years.
So he got into it like, you know, very early.
I never found it very interesting because it seemed like it was just about money, you know very early but i never found it very interesting uh because it seemed like it
was just about money you know right and i thought you know i thought bitcoin was very interesting
and innovative and quite astonishing in some ways like that white paper's worth reading
um but it still just seemed like money but he'd been trying to get me into that and i was like
okay well maybe there's something there so i was also reading up on web3 and seeing what it was like whoever called it web3 that was a great idea
incidentally like whether or not it will earn the title is yet to be seen but it made it sound
different and interesting and so that got me into it and it was while i was late night exploring
my backlog of ideas and playing around with openSea and NFTs and digital contracts,
that I suddenly realized that there was a possibility there to combine Brew with Web3
and, in effect, provide a mechanism for funding open source.
So people like myself could live off open source rather than either turn into a passion project where you're begging for donations or seeking bounties or make it useful to Microsoft so they'll hire you.
You can keep your project for yourself, make some money with it.
So essentially, I then found out my friend and he thought it was a genius idea.
And we managed to get at this point where, we're $18 million of funding.
I started active development on it in April.
And we genuinely believe we can change how open source is funded.
So let's walk through that.
So you have a friend who's really into crypto.
And the two of you kind of click with this idea which i think is a phenomenal
idea basically you have this new kind of uh uh let's say more liquid more electronic way of
transferring money you have a marketplace where you have um one thing just segue one thing you'll
know now that you have a kid it's going to take a few years. When your kid starts preschool, you'll be sick pretty much all of September.
But you have this marketplace where on one side you have, you know,
people who are using open source software and are getting value from it.
And on the other side, you have the people producing it.
And so it seems like you can create, you know, a very efficient market there.
How did that turn into a funded company?
So like, who did you speak to?
Like, what's that chain of events like?
Because, you know, a lot of people know absolutely nothing about, even people who have been in
the industry, I even put myself in this position, know nothing about startups.
We've heard the word seed round.
We don't know really what it means.
And so kind of walk us through what that journey was like till now.
It's a good question.
And it's fun stories, really.
So, well, I'm very fortunate because when you have something that's as well known as Homebrew, it makes things a lot simpler.
You know, we estimate that Homebrew has 40 million users and it's probably true because they're not all developers they're also all these other professions that need the tooling that comes
with homebrew right initially it's going to be very focused on developers but over time it can
evolve i've built t to be the ultimate packaging tool, but we can talk about its future set in a minute.
So, yeah, like, so my friend has known me for years
and he's wanted to work with me on something this big before.
We've worked on minor startups and done contracting together and things.
Timothy Lewis.
So he, because he's been in crypto so long,
just knew a lot of people that were willing to invest in the sector i remember the first meeting we had with one of our first
investors i was talking it through and he was fascinated by my story and i said how you know
the only things i'd ever got from homebrew were google once sent me a blanket and things like
this like great pitch stories because it's true they sent me a blanket and they said thanks for
homebrew wow i didn't know your address oh it's google right i mean
they didn't ask me for my address you know they've had you've had like give back to open
source programs for years and this is one of the first and all it was that year was a blanket like
now they actually throw money at it but yeah at the time i got a uh similarly i got a google home
it's actually in the kids' playroom right
behind me, behind this wall. Yeah, I don't remember exactly how it worked, but yeah,
I remember giving them my address and then being a little skeptical, but yeah, a random Google Home
just showed up at my house a week later. Yeah, that's nice. But still, certainly not enough
to pay the bills if you're going to do open source full time
but yeah
so I was pitching and then
this guy was like okay I'm going to just
invite my friend down to talk to you
and the guy was like a developer
and so the guy turns up
and my co-founder goes
so do you know Homebrew and he was like what
the package manager for Mac and he's like yeah
do you use it and he was like, what? The package manager for Mac? And he's like, yeah. He said, do you use it?
And he was like, oh, God, we use it all the time.
So, you know, the first key moment in us, like, starting to build this raise,
and I'd had, like, this enormous piece of validation from just, like,
some guy who'd been invited to, like, vet me, essentially.
So it does definitely help if you have something
as big as homebrew behind you that's really cool actually one one really quick homebrew story and
then i want to get back to tea but i um i actually think maybe not solely maybe solely responsible
for keeping homebrew alive at facebook which is now Meta. There was a whole enterprise engineering team
that wanted to kill Homebrew.
And they actually, we were in this arms race
where Homebrew installs things to user local.
So they were locking down user local
to where when you ran brew commands,
it would fail in really odd ways.
And then somebody, I think it was a colleague of mine, maybe I did,
we submitted something to Homebrewer when it couldn't read user local.
It told you that like right off the bat.
So then people started writing scripts where it was like chmod user local,
then run Homebrew.
And then an hour later, you know, Puppet would kick in and like change it back and you'd be in this arms race and uh um and and the alternative to all of the
points you mentioned earlier the alternative was not developer friendly it was painful
and um it was basically like the it was a internal version of the app store so you would go to like
the equivalent of like the apple app store and you would search for like you know lib open ssl and then you'd have to click the button to install
it and it's like just ridiculous um and so there's yeah there's this big uh battle back and forth we
finally won and so i think there's still a ton of people uh using using homebrew it's just a
testament how good the experience is that's a great story i love it i
haven't really heard one like it before because you know i know that these big companies use it
uh probably still because i obviously my famous failed google interview i was like you won't use
it and you won't hire me um wait wait hang on i don't you have to you have to you have to explain that one. What happened? So it was like 2015, and I was looking for new work.
So my wife at the time said,
why don't you reply to Google's emails for a change?
Because they've been trying to recruit me since Homebrew got big.
So I didn't know what I was going to do.
I didn't really want to work for somewhere like Google, but I thought, why thought why not i'll just do the interview so the recruiter phones me and said
well we're skipping over the phone interview because of your uh you know prestige i was like
well okay but i don't have a computer science degree right because obviously i knew that
google interviews were always like computer science-y.
And the recruiter said, oh yeah, we know, that's fine. We'll have custom interviews for you. I was like, well, okay, excellent. Then the first interview when I got there was asking me to
invert a binary tree, which obviously I didn't know how to do. So it wasn't a good day. I had
some interviews that were better than others, but I figured I didn't get it. And then a week later
they phoned me to say that I didn't get it. And then I
immediately went to Twitter and typed
90% of our engineers
use the software you wrote, homebrew
in brackets, but you can't
invert a binary tree on a blackboard
so F off.
And at the time I had like
600 followers, so I didn't
think it would matter.
By the end of the next week, I had 15,000 followers.
Oh my gosh.
That's amazing.
This tweet had been on Hacker News like eight times.
Supposedly, it caused Google to look at their interview process and make changes.
I have friends who were at Google at the time.
They said there was a big fuss, a big stink made.
But it also led to
me getting like 200 job offers
from other companies.
That's awesome.
It was a pretty remarkable
week. I felt bad because, as I say,
I had very few followers. I didn't think
it would be like a viral tweet
where this place had like 4 million views or something.
It still gets replies. It's like it happened yesterday. 2015 happened yesterday 2015 people seven years ago what you should do is you should
you should sort the offers based off like your own personal priority and then you know put them
into a binary tree and invert it yeah well after that i did go home and figure out how to do it because jonathan blow you know
jonathan blow oh the developer braid right yeah yeah exactly like yeah he i've always admired the
guy and then suddenly he's in my twitter thread telling me that i'm a bad developer because i
can't do this and i hurt my feelings honestly the guy was a bit of a hero of mine and like he said
i watched his documentary and i loved
his games and he's like you're probably not a good developer actually max you should probably
go and learn how to do that no i went and learned it thanks jonathan well it's good that you took
it on the chin and you know some people would have been crushed by a lot of the things you
talked about i mean having to change disciplines you disciplines, getting your hero kind of taking a sucker punch at you,
but you kind of took all of these opportunities
to step forward, you know?
Well, I appreciate that.
I guess it's always been the kind of person I am.
Always trying to move forward with things.
So yeah, I took the job at Apple.
Apple offered me work and I lasted a year.
I was right.
I don't work well at big companies, too much process.
I also found this out.
I mean, I worked for big companies for, I don't know, 15 years or something.
But now that I'm at a smaller company, it's so much better.
It just fits my personality so much better.
Okay, so based off someone who's made you
know one of the most popular package managers you know you secured some funding and so you have uh
you said 13 people right now i think it's more just like someone else and people keep dying
i'm a little hands off with that side of things at the moment, even though I'm the CEO, because I'm actively building the product.
You know, I'm the key developer at this point.
We're hiring more so I can stop being the key developer.
But, you know, the truth is,
I know the thing we're building, like, very thoroughly.
I've been thinking about it for years.
So I'm finishing that off.
We're hoping to launch it soon-ish this year.
Essentially, it's like a package manager,
but overpowered.
And is this like OS agnostic?
Like what kind of packages are you managing?
So at this point, it's the same sort of stuff
that Brew manages and packages like Debian's,
Apt, and Yum, and all the Linux ones.
So that base part of the stack.
But because part of our product offering
is going to be this blockchain component,
that's where we're storing the package data.
And we're not storing it, you're storing it.
As open source maintainers,
you will publish using a private key into our chain,
essentially an NFT that represents releases
for your open source and dependency information.
So we're building essentially an agnostic package registry for once and for
all.
I want there to be one source of data for all open source packages.
It's awfully duplicated.
Even with brew,
I made it worse by doing yet another one.
Although,
you know,
I get why.
But this time, essentially, we're making the database.
But because this graph understands the entire open source ecosystem
and how it depends on each other,
when you put some token into that graph,
it can distribute it automatically using digital contracts
to the rest of the graph.
So if React, for example, is given some token,
then all of React's dependencies,
the node portion and the portion under node
that is the part that we're starting with,
that T is going to package,
can be given a percentage decreasing all the way down to libc, essentially.
This is the golden principle of it and why it's
going to work we're not changing how open source works as well like you're not going to have to
like pay to use t and t is just going to be one client of this blockchain component so we're using
like the steeping system effectively so we're doing like what banks do with interest effectively
but you invest some money with the bank and the bank gives you an interest payment as a reward.
A blockchain will, using proof of stake, give these rewards to the open source ecosystem.
So you'll get a little bit of that reward as thanks for securing this network.
So we're expecting developers and companies, especially companies,
I think like these fan companies that don't want to use Homebrew but are forced to, like Facebook, should be basically investing tens of millions of dollars a year into the open source that they use. And because we are building a set of tooling around that to assist that, essentially we're
automating the part of the process for these companies or individuals or projects or groups
on figuring out what open source they use and allowing them to put money into that system.
Well, right now, you know, Google have to email you and say, hey, we want to send you
a Google Home.
Like, how do we do it?
And then, you know, there's a limit to how many projects they can support in that manner because it's so manual
effectively we're automating that so i'm incredibly excited about what we're doing on the blockchain
side also i came into this knowing that there's no way our blockchain component would get much
usage unless there was a kick-ass set of tools that go with it that encourage that adoption and that usage so t is
also like a successor to brew in many ways a general tool for developers that incorporates a
lot of ideas i've had over the years because i feel like the package manager can be so much more
than just a package manager like It controls and allows you power
over every tool in your development stack.
It's just so much more that can be done
than just installing updates
and managing a set of packages that you use.
So when we launch, it's going to have a few cool features.
Essentially, we've made the Package Manager
into a virtual environment manager for everything.
You install a set of packages and set versions that are defined,
and you can carrot update them,
just like we were talking about with Node.
So you say, I depend on version 2.2 plus up to version 3 of this tool.
And then You can have
independent projects that you're working on
that use completely independent
sets of tooling. Even things like Postgres
we can instantiate versions
of Postgres, multiple versions on your system
at once. They're all using
isolated, containerized
things. Effectively, I'm making it so you don't
want to use Docker for development.
It sounds similar to Snap.
Snap on Linux has some of these ideas in it.
Yeah, there is stuff that can do this, like Nix.
It's a big one where it makes, effectively, environments to work in.
But I'm coming at it from the perspective of the developer
and not a system engineer or a DevOps person.
This is a developer tool where
i'm making it extremely pleasant for developers to use you probably want to this sounds awesome
so as far as uh you know we have a lot of folks who are they're just graduating or they're um you
know looking for internships you know what's the state of hiring right now at T? Are you looking for either of those, both of them?
Oh, yeah, actively.
I need another five or six developers before the end of the year.
And then almost certainly we just keep scaling up.
Internships are a little trickier because a lot of the work we're doing is packaging.
And the truth is, they don't teach you that at school.
They don't really teach it anywhere.
We're having trouble hiring as a result.
We're looking at all the existing package managers essentially right now i really need a windows packager
because we are a cross-platform tool i believe as a developer especially nowadays you should be able
to work on whatever platform you want and if you're part of a team that team should not like
say okay you have to use a mac because that's always really support it should be uh okay you just use t and t will
make sure that the system that you're building with is the same for all of us even though the
platform underneath is different uh so we're supporting linux and mac very well at the moment
and windows so so we need a windows package but i'm generally hiring full stack uh i want some
react devs i want javascript devs. I want JavaScript devs.
A big part of what we're doing is we think that something like T is really an app store.
And so we're going to have an app.
Like, you know, package managers have had apps before, but ours will be much nicer.
And also integrated heavily into the web.
So I want one-click installs from the web, essentially.
Install nodes straight from the web, one click.
Yeah, I felt like that's one thing that Linux got really nicely,
is you can download a dev file,
and it opens a deep link in the software manager,
and you just click install, and you're done.
Yeah, some of these conveniences, we're just bringing them all together essentially there's a suite of other like surprise
features i think you're just going to open up entirely new ways of i know it sounds pretentious
but like effectively i'm just trying to like break down barriers for developers i want developers to spend all their time making awesome stuff and
none of their time zero uh worrying about how to install things and how to get started with things
or experimenting with new tools or the amount of new stuff that comes out every week i want you to
be able to feel that you can try out like at least half of it because there's a very simple way by the t website
to like boot up effectively a sandbox and try out like a suggestion on like how to use that thing
effectively a playground for those tools yeah super cool yeah i do feel like the
the economic uh model is is also something I really appreciate.
I have a, for Eternal Terminal, I have a GitHub donations button, which I put very little effort into promoting or anything like that.
And I think there is one donor.
So if you're listening to this show, thank you so much, whoever you are. But I mean, this is also part of the problem is I have no way of really,
at least I don't think I have any way of reaching out to that person and saying,
hey, what do you like about this? I mean, you're willing to put money behind it. So, so, you know, your opinion really matters, right? So that dialogue isn't there. And the friction
is just really high. So I think that you're attempting to address some of those things.
Well, if you talk to your average developer, they feel bad that they don't support open source in some manner.
But the truth is, it's very difficult to know how to support 10,000 packages that you use on a day-to-day basis.
So indeed, we're trying to make it so that you can put a certain amount of money in every year, even as an individual.
But I think we should be encouraging these big fan companies to put their money where their mouths
are with this stuff like they make a lot of money out of open source the open source ecosystem
powers the internet more software and if somebody does open source yourself you know that you could
spend a lot more time on it like i assume you made your tool because you wanted it and you want to work on it
to a certain extent.
And we want to make it
so that it is possible
for you to do so.
The whole impetus for it
came from this library for iOS
called PromiseKit
that I made years ago.
And at its peak,
it was used by 100,000 apps.
And so I was like,
well, if every one of those apps
gave me just $1 a year,
I could afford to work on it full-time
and all my other open source,
take a bit of a salary hit overall,
but then I could find some more open source to make.
You don't need that much from everyone.
You just need everyone to somehow be able to participate.
And so that's where we're coming at with what we're doing.
And we want to make it so successful
that people at Facebook and Microsoft and Google
and all these big companies, these talented developers who are basically wasting their
time making algorithms that improve ad consumption, how much people participate with content,
instead realize that they have a viable option to quit and work on an important piece of
open source full time.
I want all these people to quit i want
facebook to seriously run out of developers and i have problems running the company because everyone
has quit to do what is better for the entire open source ecosystem for the entire internet and not
as humanity as a whole yeah i think that makes sense. I do feel like advertising
completely changed the internet
and just the software community.
I feel like it radically changed.
And I don't, you know,
I'm not really educated enough
on this to know why,
to sort of the causal reasoning
there and everything.
But you're right.
I think if we can sort of bring
the economics back to some healthy place that i think we can cause sort of this explosion of
because there's so many talented people all over the world who who uh wake up and and install linux
for the first time and then all of a sudden they're on the vanguard of something um and and
so if we can support those people, it would be fabulous.
Yeah, that's our mission.
Cool.
So yeah, we'll be releasing later this year,
and we are hiring.
But really, your listeners,
one of the better things they can do is when we release,
install it, try it out, and participate.
There's going to be a huge open-source community
built up around it, just like Brew had,
for people participating in making open source function.
And we'll do the same kind of things we did for Brew and make it somewhere that is a great open source project to be a part of.
And, well, we'll have token to facilitate contributions as well. Yeah, I mean, when people hear about cryptocurrency,
they usually think about buying in,
like buying a Bitcoin or buying a Ethereum coin
or something like that.
You don't have to be a millionaire to install T.
I mean, it's not that kind of thing.
You can install it.
You can get started totally free. So it's not that kind of thing. You can install it. You can get started totally free.
So it's completely free.
It's basically a better packaging solution than probably what you're using.
And over time, you'll start to see how you can use the crypto and the web-free parts for yourself and for the benefit of the entire open source ecosystem.
So, yeah, it will definitely be worth checking out.
Cool. All right.
Well, when it's released,
we will definitely post on our social media,
Twitter and LinkedIn and all of that
and get people aware of that.
In the meantime, I'm sure you have a mailing list
and those kinds of things.
If people want to learn more about it and get ready,
they can go to te.xyz. That's tea.xyz.
And thank you so much, Max, for coming on the show. An absolutely fabulous episode,
amazing. And we covered a topic that is really, really important that, shockingly,
we had never covered before, even in the abstract. So we covered package managers, I think, beautifully. And I'm really excited about T. And I'll be the first one in line to try and get
Eternal Terminal onto T whenever it's ready. Well, I hope you do that, Jason.
All right. Sounds good. Thanks again, Max. And thanks, folks, out there for listening,
supporting the show on Patreon. We really appreciate it. And we will catch everyone in two weeks. Bye-bye.
Music by Aaron Farndeller.
Programming Throwdown is distributed under a Creative Commons Attribution Share Alike 2.0 license.
You're free to share, copy, distribute, transmit the work, to remix, adapt the work,
but you must provide attribution to Patrick and I and share alike in kind.