The Changelog: Software Development, Open Source - Homebrew and package management (Interview)

Episode Date: October 7, 2016

Mike McQuaid joined us to catch us up on the latest in Homebrew and the recent 1.0.0 release. We talked about no more `/usr/local` — Homebrew moves to `/usr/local/Homebrew` to keep `/usr/local` clea...ner, auto-updates, the growth of the Homebrew community and how it has grown to almost 6000 unique contributors, and more.

Transcript
Discussion (0)
Starting point is 00:00:00 I'm Mike McQuaid, and you're listening to The Change Log. Welcome back, everyone. This is The Change Log, and I'm your host, Adam Stachowiak. This is episode 223, and today, Jared and I are joined by Mike McQuaid, the maintainer of Homebrew. We talked about Homebrew's 1.0 release recently. We talked about a lot of the changes happening. There's no more user local. Homebrew now lives at user local Homebrew to keep user local cleaner. Homebrew also auto updates now. And in the seven years of Homebrew, the community has grown to nearly 6,000 unique contributors. There's also talks of Linux Brew, which is a fork of homebrew,
Starting point is 00:00:46 joining in lots of fun stuff happening in this package manager space for the operating systems. We have three sponsors on today's show, Rollbar, TopTal, and Linode. First sponsor of the show is our friends at Rollbar. Rollbar puts errors in their place. Head to rollbar.com slash changelog, get the bootstrap plan for free for 90 days. And today I'm sharing a conversation with you that I had with Paul Bigger, the founder of CircleCI, and he talked deeply about how they use Rollbar and how important that tool is to their developers. Take a listen. One of the key parts about doing continuous delivery, you don't just have to test your software, but you have to constantly keep track of it.
Starting point is 00:01:27 You're going to be doing deploys 10 times a day or 20 times a day, and you have to know that each deploy works, and the way to do that is to have really good monitoring. And Rollbar is literally the thing that you need to do that monitoring. You need to make sure that every time you deploy, you're going to get an alert if something goes wrong, And that's exactly what Rollbar does for CircleCI. Oh, that's awesome. Thanks, Paul. I appreciate your time. So listeners, we have a special offer for you. Go to rollbar.com slash changelog, sign up, get the bootstrap plan for free for 90 days.
Starting point is 00:02:01 That's 300,000 errors tracked totally for free if roll bar trying today head over to rollbar.com slash changelog we're back we got a fun show lined up got uh Mike LaQuade here from Homebrew. Homebrew fame. Obviously, Homebrew 1.0. Jared, what do you think about that, man? I was excited. I think our whole community was excited. It's a big announcement from a big project that many of us have relied upon for years and years. And it's awesome to see anything hit that 1.0 milestone. So, Mike, congratulations on the big release and welcome to the Change Dog. Thank you very much.
Starting point is 00:02:47 Thanks for having me, guys. Yeah, no, it's an exciting time, I think, for most of the Homebrew team as well, because we've been sort of a bit haphazard with the version numbers. If you look at, I went through and actually took the time before the release to go and tag all the old versions through there. And some of them are, you know, multiple versions in the space of a week. And then you have years, I think, between some versions and they roll a little bit arbitrary. And now it's kind of giving us this chance to sort of become a more real software project and start doing like semantic versioning and start kind of thinking about how we're doing our release process and try and have that stable base for people to be able to rely on.
Starting point is 00:03:26 Now, Adam, you had a homebrew show back before I was a co-host of The Change Log all the way back in 2010, episode 35. You want to give us a little bit of background on that? I wish I could, Matt. I wish I could remember six years back. I can barely remember last week or last month. But just based on our own show notes, me and Wynn, when Wynn was part of the show, and it's kind of funny because now Wynn works with Mike, his manager manager of somebody's manager,
Starting point is 00:03:51 or something like that at GitHub, but we caught up with Max Howell, talked about Homebrew. I think the show was a lot more loose then. I don't think we were quite as standardized as we are now, where we kind of go into the history and kind of go deep like this. It was a bit more of a wing it kind of show i guess then but fun talking to max i can't remember a single thing we talked about i know we talked about at least mac beer and scrabbling because that's what the notes say so there you go but you can check that out at changelog.com slash 35 or
Starting point is 00:04:20 scroll all the way back or pretty far back in the list of podcasts that you have there in your listener. Yeah. So it's been a long time and definitely kind of a catch-up show, but a new show, an introduction to Mike. Mike, we like to get backgrounds, origin stories, kind of the roots of where you began in the programming trades. So can you tell us how you got started and what got you to where you are now? Sure thing. So I guess I first got interested in computers and computer things being young and when my parents brought a PC home. And it was always... I guess my parents learned that they could pretty much get me to do any chore, including mind- numbing spreadsheet entry if it was on the computer
Starting point is 00:05:05 and and i was just i don't know i was always fascinated with the thing so when the time came to go off to college i went and studied uh computer science and yeah and basically just got more into i guess open source while i was doing that there was our curriculum was quite kind of unix focused so i ended up kind of using linux on my desktop and all the fun that that produced uh back in 2007 using gen 2 to compile everything from source so take like days to get my system ready in 24 hours hardcore well i mean i don't know if it was so much hardcore as just masochistic but it was certainly i certainly learned a wee bit along the way about you know how how software gets put together and how things kind of build and how they fail and
Starting point is 00:05:51 stuff like that so um yeah i kind of dabbled with that through uni started doing little bits of open source programming kind of by myself like publishing stuff on my website or whatever but not really collaborating with anyone and beyond kind of university group projects um until after i guess i was sort of got a bit involved with the gentoo kind of bug tracker and stuff like that and then my uh summer after graduating i did google summer of code on the kde project uh which is the the linux like i guess a desktop environment or like the kind of gooey and stuff like that um and yeah and i kind of worked on that for a few years and that that was great fun and then in the end i remember the very so i had a job um where i was doing like cute the kind of toolkit it's based on which everyone thinks is cutie but it's actually cute which is
Starting point is 00:06:42 always interesting when you refer to someone who doesn't know this as oh they are also a cute developer and then yeah so there you go um but yeah so i was doing that so part of the job a lot of clients back then at least were wanting stuff that would run on at least two out of three platforms windows mac and linux so i would i had like an environment for each of those platforms and so i had i had like an environment for each of those platforms and so i had kind of a mac that i kind of had picked up because of that and i didn't really use it for much and then i remember one day i had some friends around we were trying to watch a dual monitor set up and i was trying to watch a dvd without tearing on my new nvidia card or whatever and and i couldn't get a dvd to play and this was in 2008 i think uh you know 2008 2009
Starting point is 00:07:27 and i couldn't get a dvd to play properly and i was just like that was the day i realized that my my days with desktop linux were done and so i i pulled out the mac plugged it in and then that all worked perfectly and then sort of slightly moved my approach over to the mac was doing some kde on mac stuff before i kind of gave up um and then kind of used mac ports a bit and then i ended up creating this while working on this thing called mac ports dummies which kind of sort of led me a little bit into homebrew mac ports dummies was a way of like sort of pretending that a bunch of stuff was installed that was provided by osx and then i kind of knew, he was a friend of a friend. And we
Starting point is 00:08:06 ended up kind of meeting up and going for a beer and stuff like that. And he was like, Oh, yeah, you know, there's this homebrew thing I've kind of made, you should check it out. It sounds like it's sort of in keeping with your interests. So I guess that was about 2009. I started working on homebrew. And I guess since then, I've been kind of working as a maintainer. And yeah, just never really stopped. So that's an interesting way to go to the mac i guess my story was a little different i was on windows and it just was a better machine so i just kind of went to the mac and didn't look back but uh you know moving to the mac is that's kind of interesting story to to kind of get to the mac basically
Starting point is 00:08:41 yeah it's it's weird i guess because when i talk to a lot of people who i guess being involved with a project like homebrew and i'm also kind of really obsessive about like osx styling like i still use textmate as my main editor just because i mean as much as i love things like atom and sublime they don't look like quite right right so everyone assumes i'd be one of those people who's been on a mac since i was you know purist yeah exactly like since what year was that because i mean you might be a purist well so i guess that was 2000 and yeah 2008 or 9 i kind of yeah so the first mac i had was on leopard on 10.5 also the first version of osx that homebrew supported and so yeah i've been on it a wee while at this time,
Starting point is 00:09:25 but I feel like the really hardcore folks are the people who had the OS 9 machine at home. Right. I was a little bit sooner to the party than you, but not much. In fact, my path is very similar. Only I was on Ubuntu in college. Started off in Windows in high school,
Starting point is 00:09:41 Ubuntu in college, and just got sick of of having to deal with mostly device drivers and wi-fi back then um and the mac was tantalizing i think it's probably 2007 and leopard was also my first version that being said man i'm far moved away from text me at this point are you at least on text mate 2 or are you like real old school yeah i'm on text me too and i'm i'm kind of scratching my own itches quite a bit more like you know i've made a few bundles for it and all this type of thing but it just fits pretty well with with my workflow so as i say i try other things but then i just there's tiny
Starting point is 00:10:16 little things that annoy me and i might just be too old and far gone at this point to stuck in my ways so give us a little bit of the context around, you gave us how you met Max and you started contributing to Homebrew and using it a lot. Give us the timeframe around Max's kind of transition. Now you're now lead maintainer. Of course, it's a huge project with thousands of contributors.
Starting point is 00:10:39 And many of that is because of the way that you used to contribute formula, which has recently changed. We'll talk about that soon. But help us out with the transition where you became the man when it comes to the homebrew community and project. Well, I mean, I guess so the lead maintainer thing is quite recent. Like that title, at least, is literally just something we sort of decided shortly before homebrew 1.0 um so max i guess like like any open source project and we try and build this into the way we kind of run homebrew
Starting point is 00:11:12 there's the expectation that people will kind of come in and come out and stuff like that and i think max just ended up having a different job and was spending less time on homebrew and some other people stepped up and were spending more time on homebrew and you know in the end i think he just ended up sort of drifting out and other people ended up drifting in and when max left so he he was the kind of you know the lead at that point and when he left we kind of agreed that we'd sort of have a sort of democratic situation where you know we would decide things more or less by committee and stuff like that and i think that and there's definitely a lot of open source projects where that that goes pretty far i think where we struggled and where we felt the kind of pain
Starting point is 00:11:57 of that coming up recently was when what i was kind of contributing a lot more than other people were and when you have the idea that almost it's a democracy and everyone gets a vote, like it doesn't. With the way I guess I read a thing about the governance models and the best one, you know, the meritocratics are really loaded term and it's not. I don't think it applies in open source but that what people have described as the meritocratic governance model is almost like you you have more decision making power based on doing more work basically so you know and that's not commit counts or lines of code changed or whatever but basically if you're more involved if you're spending more time in the project and you're kind of leading the direction a bit more then you probably have a bit more say.
Starting point is 00:12:47 So I think the lead maintainer thing came about because I was essentially kind of filling that role. And, you know, to validate some other kind of complaints, I think, that were made, I was maybe sort of overruling or pushing through some things and not really operating by the committee side of things. And my understanding was that people were annoyed that I was doing that, whereas I think actually,
Starting point is 00:13:09 like having talked about it more and come to the lead maintainer thing, what was annoying people more was actually this disconnect between the reality of like me kind of basically leading and other people feeling like they couldn't overrule me on things. And yeah, I i guess you know i'm sure you've all read and heard about you know all the stuff about implicit and
Starting point is 00:13:32 explicit power structures and githubs as a company has had its movement through there as well and i think that's basically what the move has been is that it's moved from being an implicit to an explicit thing and it's just as a result it's made a few little things a little bit easier. So there was an explicit transition then from Max to you or? Well, no, I guess so. The transition was from Max to, I guess, every, to all of the maintainers. I think it was five or six of us at that point. And then that we grew up to, I think, 13 maintainers. And then the transition from that model to being me with the kind of majority agreeing that that was a good move.
Starting point is 00:14:14 I'm sitting here on the contributors tab. I mean, it's funny you say that, too, that it wasn't just contributors in terms of code, but contributors in terms of effort across the project, whether it's thought, leadership, governance, whatever. I think that that's something that the contributors tab doesn't really reflect very well. But one thing that I was thinking about on the contributors tab is I'm looking at Jack Nagel, I'm looking at you, I'm looking at Adam V, I'm looking at Max. And so for others that kind of line up there, I kind of wish we can overlap, you know, see Mike and you and Max and Adam, see all of your graphs kind of in the same timeline because just kind of like looking at them,
Starting point is 00:14:51 I can see where Max was having fits and starts during a couple, during 2012, and you seem to like start to get more involved in terms of contributions. And then it seems like when Max dipped away and stepped off to do his own thing or go to Apple or wherever his path has taken him is when you got more involved in the same thing with Jack
Starting point is 00:15:11 and a little bit the same thing with Adam as well. So it's kind of interesting to look at the contributor graph that way. Yeah, and it's interesting as well because as I think you were, I suspected you were going to mention later on anyway, there's the, we've split into two repositories now. So you've got the Homebrew Brew,
Starting point is 00:15:27 which is the package manager and Homebrew Core, which is the formula. And we kind of split the history between them as well. So you can kind of see the kind of, there's quite a difference in contribution patterns between the two. And there's the same sort of faces in there, but you know, there's someone who,
Starting point is 00:15:45 people who are very, very active in one and not really in the other. And I think that was the big thing where like Max particularly was kind of always most active in the package manager itself. And I guess lately I've been sort of similar. I've kind of, you know,
Starting point is 00:16:01 had a reasonable number of contributions to the packages, but like not nearly as much as some other people. And in the last, the 1.0 release has been more of a thing around the package manager rather than the packages itself. And so that's where my focus has been the last, I guess, few months, certainly. to this, uh, meritocracy or voting based things. And you, you all found that it wasn't moving forward at the pace or the, you know, the desired, uh, pace that you guys wanted it to. And then because you were already kind of implicitly acting as a leader, or as you thought perhaps overstepping your bounds, but people actually appreciated it. Um, did you end up just kind of
Starting point is 00:16:43 like with this flat structure where it's, you know, Mike McQuaid and then everybody else, or is there underneath that structure, is there a group of core maintainers and then everybody else? How exactly does it structure now? So, I mean, we have what our kind of lingo is, and I realize it varies from project to project, is what we call a maintainer is basically anyone who has commit access. And historically, that's always been based on you get commit access to both repositories, you don't just get it to one.
Starting point is 00:17:12 That may be something that changes in the future if we have people who are very interested in just the package manager and not the packages or vice versa. And then we have contributors, which are anyone who's ever submitted a single commit to any project basically within the homebrew umbrella and then we have users obviously which goes without saying um so we've yeah so we've moved from a model of being all the maintainers are like at least on
Starting point is 00:17:37 paper kind of on an equal footing to being i'm i guess technically in charge. But then the way I've had a good manager in a workplace deal with this stuff in the past is that they basically only invoke their manager status when they have to. So they will always try and have a discussion and win the discussion on an equal fitting. Well, not win, but convince other people of their point of view and i i feel like it's the same thing with us now that the lead position is mainly just there to be able to have me be able to say sometimes like okay well we need someone to make a decision here we have two sides who are kind of equal or equally like there's some stuff that is important in the direction of the project and this is a feature that other people may not feel passionately about, but I feel that this has to go in. And it's important for us to have this feature, even if the bulk of other maintainers might disagree on that front.
Starting point is 00:18:35 And maybe part of that is because we started gathering analytics, which I don't want to get too much into but you know before that a big part of it would be i mean i i was the person who did the most i guess talks at conferences about homebrew and stuff like that and have kind of traveled around and met a lot of users and there's a certain amount of stuff that it doesn't it doesn't turn into mailing list post it doesn't turn into issue tracker but you you speak to the same sort of power users again and again and you hear the same complaints again again like in person and then some of that has sort of driven the kind of i guess product direction of homebrew maybe a bit more because you just realize like okay this isn't people are not filing issues because they're confused about this this is just something that they find annoying and people generally don't find like file issues about just things that are like annoyances they follow them about things that are
Starting point is 00:19:24 actively broken or whatever so let's touch real quick on github's relationship with homebrew with regard to you know employing you and you're the lead maintainer and is this this officially sanctioned work or is it are you still doing it like completely on the side and then we'll take our first break and on the other side we'll talk about uh the new stuff in homebrew specifically we'll probably start with the split repositories, but how does GitHub play into the mix? So I guess I've been at GitHub coming up to three years. So certainly the majority of my time working on Homebrew has not been at GitHub.
Starting point is 00:19:55 And GitHub, similarly with my previous employees, really like they have, I guess, paid me to work on Homebrew on occasion when I have had google summer of code students through github and stuff like that or homebrew google summer code students which have been blessed with github i've spent work time on that uh in terms of like day-to-day work like i i don't in theory at least work on it on github's time if i'm blocked waiting for something for like five minutes i'm waiting for a test run to finish i'll go and fire through my home emails triage give a little reply whatever
Starting point is 00:20:30 and then there's something that is going to or is currently blowing up and will affect github employees because we use homebrew fairly heavily internally and then i'll fix that but i don't generally do kind of the day-to-day kind of Homebrew work during GitHub time. So that's mainly my kind of evenings, weekends, spare time, etc. Very good. Well, I think that sets us up. Let's take a break. And on the other side, we'll talk about what is new with Homebrew 1.0.0.
Starting point is 00:20:58 We'll be right back. I talked to Daniel Reed, head of design at TopTow about their new new expansion into TopTow Designers, doing for designers what they've done for developers. We talked about why TopTow works for designers, and this is what she had to say. As a designer, or as any kind of creative person, the big overarching question is always, like, how can you find inspiration? And for me personally, and for a lot of creatives that I've spoken to, it's really about traveling, exploring, and being accountable for your own career. And I think as a top-tile designer or a remote designer in general,
Starting point is 00:21:35 the ability to be able to switch up your lifestyle, change contexts, meet new people, have new ideas sort of infiltrated into your life by having that freedom and flexibility is something that's absolutely fundamental to doing great work. For any designer that is wanting to pursue their skills, to be accountable for their life, to have new challenges, that's the real power of TopTel I feel. You're not just stuck with one product, one company or even one agency but you can choose to work on multiple occasionally
Starting point is 00:22:06 or a range of different clients. And I think that that keeps you fresh. It gets you involved in new technologies, different people, and is really fundamental for being sort of switched on as a designer. All right. That was Daniel Reed, head of design for TopTile. To learn more, go to toptile.com slash designers. That's T-O-P-T to toptile.com slash designers.
Starting point is 00:22:28 That's T-O-P-T-A-L dot com slash designers. Tell them Adam from the Changelog sent you. And now back to the show. All right, we are back celebrating, cheersing even, on Hover 1.0 with Lead Mediator Mike McQuade. See what I did there i like that and mike we like to hear all that's new fresh and new like we haven't covered homebrew for many years you don't have to go through the entire history of the source code but uh kind of just want to
Starting point is 00:22:56 camp out on what's new with the official 1.0 release and there's a lot of highlights we have the uh separate repos We have the community site. We have the move out of user local, user local homebrew. We have the software conservancy, software freedom conservancy thing. So we'll kind of work our way down through the list, but let's start with where we left off,
Starting point is 00:23:19 which was that you guys split the repositories up. And one thing about the original Homebrew repository, which, by the way, it's still out there. You guys have it under brew, under legacy-homebrew, is it was always one of the most forked and starred and watched and contributed to, probably has the most PRs, perhaps, of almost any repository on GitHub because of the reason
Starting point is 00:23:47 that not just, like you said, not just the package manager itself, the source code that makes up Homebrew is in there, but also all the different formulae, which is how, you know, the descriptions of how packages get installed and uninstalled. So when I first saw that you guys split up into different repos, I thought, oh no, they had this great star count. They had this great fork count. It's kind of this statistical legacy there that now is going to be broken. But that being said, y'all have set up analytics over the last year or so that gives you better stats than just the stars and the forks for actual usage. So start off with telling us the onus behind splitting the repositories,
Starting point is 00:24:30 and then perhaps give us some insight into the analytics that you guys have been tracking. Sure thing. So I guess the main onus is the problem with Homebrew before was if you wanted to get, say you wanted to get a new version of some package, you run brew update to kind of update homebrew's kind of definitions and that also updates the package manager the problem with that is if you want the new update of something and we have made some change on master which breaks something for you then there's no way you can get the new version of open ssl or whatever
Starting point is 00:25:02 and not get the broken thing as well. So we've kind of had that goal for a long time to be able to separate the package manager from the packages. And I mean, that's what every other package manager does, to separate those two things out so we can provide some degree of stability. So that was the first step in a process, which again is kind of noted in the release notes
Starting point is 00:25:22 that now we kind of jump between tags. And so you can, if you're kind of a homebrew maintainer, then you continue to track the master branch, but everyone else kind of jumps between 1.00, 1.01, et cetera. And that gives us time to be able to do more QA on the package manager itself while still having that rolling release approach for the formula. In terms of stars and all that type of stuff like yeah that still breaks my heart a little bit i still leap for the star count but you know it's it's slowly getting its way up on the new repository and stuff like that and it it is useful to be able to see stuff like github's kind of contributor graph and see how that varies on the package manager compared to the packages because that's interesting and another thing on there which is a wee while off probably still is we're trying to get the package manager
Starting point is 00:26:10 there's another thing called linux brew which is like running homebrew on linux and stuff like that and having the package manager be separate means that we can we can separate out our package definitions for but still have the package manager itself be cross-platform support all platforms stuff like that and it generally just provides it as a nice tool who knows maybe one day it might even be bundles of ruby gem you can use to kind of access your your stuff and but yeah nowadays we have as you mentioned the analytics that was introduced i think it was march or so and that basically provides us with the ability to see, we can't see any stuff about individual users.
Starting point is 00:26:50 If I wanted to see, okay, this particular user, what have they done? But that's not available to us because we kind of just use a random UUID that people can reset at any time. And so we track users just so we can get kind of user counts. And so I've got kind of the analytics dashboard open right now.'s you know it's kind of a slightly weird mapping from what it's normally
Starting point is 00:27:09 used for but it basically lets us see what commands people run like in proportion to each other what packages people are running what versions people are running and the really useful stuff for us is what is like the percentage breakdown on stuff like OSX versions? So then we can prioritize the support on different things. And also, what are the most popular packages that people install? And what options are they installing with? So again, we can prioritize options and things like that. So as a whole, it basically just provides what analytics tends to do for any piece of software, which is it lets us inform our future design and inform kind of what things we focus on based on the stuff our users actually
Starting point is 00:27:48 use, rather than our speculation on what the users use, which is something we didn't have before. GitHub stars and watchers are indicators, but they're not exactly, I don't think those things are for maintainers. I think they're more for the general public to show some, I mean, because I can't give you that deep of insight like knowing watchers and stars those are important but it's not giving you deep enough insights that you need as a maintainer these days yeah i agree like it's not you know you certainly can't have like oh well we did this we shipped this new feature and we got
Starting point is 00:28:19 you know five percent more stars that doesn't really that doesn't really help us whereas when we see we ship this new feature and our error count's gone up from you know 0.01 to 0.05 or whatever and stuff like that like that's more of the type of things we're concerned about and it's particularly useful when you know when we can go and see if something breaks like we periodically go through and you know do some porting or when a new version of osx is out or whatever and it's useful to be able to go through all of our packages and be like okay well this thing's broken on the new version of osx but no one has actually installed this since march so let's not go and spend like three hours trying to fix this piece of software that no one is actually using we can just remove it instead we call it sending it to the boneyard
Starting point is 00:29:04 which means the definition is still there if someone wants to pick that up at a later point and pull that through then they can do that that's it's a little bit easier than kind of navigating through the git history if you're not a git whiz and it lets us kind of push away the kind of maintenance burden of that for a wee while at least. Well, you wouldn't think twice when delivering an application that you do for work or whatever about installing error tracking or installing monitoring or something like that. So it's almost the same case for, you know, Homebrew is that you need something to track what's happening so that you can make good decisions for the future, right? You wouldn't
Starting point is 00:29:41 think twice. Yeah, exactly. And I think that's what it comes down to for me is i i have used a lot of these tools well i mean across i think every workplace i've been at i've used some sort of kind of metrics tracking and again people i guess people sometimes think that metrics tracking is just google analytics and like oh well they don't have google analytics installed so they're not tracking metrics and so well actually they're probably tracking metrics in the back end so they're not tracking metrics. And so, well, actually, they'll probably be tracking metrics in the backend. And they're not doing this because they're selling your personal information. Well, I mean, some companies are doing that
Starting point is 00:30:10 because they are selling your personal information. But in Homebrew's case, it was kind of disappointing to see one which, well, yeah, exactly, we're not. I mean, we've specifically designed it so that we couldn't, even if we wanted to, kind of get anything that would be commercially viable out of this.
Starting point is 00:30:24 So the thing is, is that it's kind of disappointing when you you release some stuff like the analytics because you get some people who go and express kind of obviously some sort of solidarity with like okay i understand why you're using this and most homebrews users are developers so there is that but then there's this very vocal minority who, you know, who escalates beyond that. And it becomes how dare you have this? How dare it be opt out rather than opt in? My reasoning, obviously, for it being opt out is because you can gather better data if you're tracking the majority of people and not just the subset of people who decide to opt in. They may well have different behavior and stuff like that, which means that you're not able to make as sound decisions but yeah so and that vocal minority you know that they got very upset on some of them on uh hacker news and reddit and stuff like that and then start sending me
Starting point is 00:31:14 personal emails telling me to you know do all sorts of things and it's not yeah it's it's not unpleasant and it is with hindsight it's funny and i i'm lucky enough to have a thick enough skin that it it didn't bother me too much but i mean it it is depressing that we still are in 2016 have to deal with stuff like this because i mean if there's any of those people who and i did say this to someone who um who emailed me i mean that that's what kills open source that's what drives open source maintainers away and kills successful open source projects like me and well i had moments but certainly some of our other kind of major maintainers had to be talked into staying in the project at all because they were you know and several of my we talk about diversity problems
Starting point is 00:32:00 sometimes in open source as well you know several of my co-workers who aren't just you know young white men who i talked to about the homebrew thing is they just said that sounds awful i would never want to be involved with a project where i would have that abuse for something i do in my spare time to try and help out other people and i think it is you know it does seem to be getting better and we do seem to be as a community recognizing that like this behavior is not acceptable and this behavior is not what we how we build software and but you know we don't necessarily have all the kind of toolings and institutions and everything quite figured out how to kind of stop stuff like that when as you say it's you're an email or a twitter message away from someone starting to be mean. Well, sorry that you had to go through all that, Mike.
Starting point is 00:32:49 In light of the change and the fact that you guys have had it running for a while, would you mind sharing some stats with us, like users or popular packages or what fruit have come from these analytics? Yeah, sure. So, I mean, I can see the kind of active users, which I guess is someone who's run a homebrew. So there's, I think, 2,000 people who've run a homebrew command in the last 30 seconds or so. Nice.
Starting point is 00:33:12 There may be more than that. And then I can see kind of the version breakdown. Interestingly, there's still a lot more people running on pre-1.0. The kind of active users right now, there like over a thousand on 0.99 and then 637 on 1.05 209 on like the kind of master the last kind of master commit and stuff like that and then i jumped through to kind of the most popular packages and somewhat unsurprisingly open ssl is the most popular package by far uh then followed by package config and which is used like it's one of those things where no one probably intentionally installs it but it's
Starting point is 00:33:50 right a dependency for a lot of things then lib png sqlite great piece of software node.js free type again probably something that not a lot of people are installing intentionally and then git and so yeah it's kind of it is valuable being able to see these things and and the the drop down is kind of quite impressive so i mean open ssl we have in homebrew itself and this tracks homebrew and our kind of third-party repositories so you know maybe 4 000 different packages so of that open ssl itself has like 3.5 of all installs of all software. And so it's quite interesting to see how quickly it drops off. And you get below kind of 0.1% within the first, you know, 170 packages. Curious, in light of transparency and open source, kind of the spirit of the community,
Starting point is 00:34:41 have you considered making the, I don't know if you can even do that with Google Analytics, but like an open dashboard where anybody can come and just see the usages yeah you can't unfortunately i mean what i i've been considering is doing a database dump every so often of like the stuff that i'm kind of most interested in um but yeah i mean it's again it's this doesn't seem to be a trivial way of automating that. So it needs to be me manually going in and like clicking through every time. So yeah, I'm still, that's still kind of on my list of things to try and do to try and improve the transparency of this. And then hopefully people can see that this is not, you know, there's nothing nefarious happening here. Yeah, because I mean, they can see the source code, at least of where the calls to track are happening in google analytics or calls off to google analytics
Starting point is 00:35:29 but it'd be really cool to have you know publicly available the results of that data because then you can have people draw other insights or just enjoy it but even yeah remove that fear of what what y'all are tracking and well and the thing that some people have asked already actually about that is um people who are scientists who've been asking you know if it would be really useful for me as i've you know worked on some piece of software as part of my phd to be able to put in a paper well this has actually been used this many times or installed this many times or whatever because that gives some i don't know i'm not a scientist but that gives i think some sort of weighting or a sense of importance to the kind of work they've been doing,
Starting point is 00:36:09 which I can understand. Or people who are putting the work in to maintain specific formulas or formulae, as you guys call them. Yeah. To know, like, is this worth my effort? Like, oh, me and six other people are using it and I got six complaints, you know, that's just the total. That's all the users as opposed to, oh, this has, you know, a lot of people are really drawing value from this.
Starting point is 00:36:29 I'm going to continue to maintain it. Yep. Yeah, exactly. Well, one thing you mentioned is updating in light of those stats, you know, not everybody's on 1.0, but just moving on to the, some of the other new features is you guys now have auto updating built in. Is that correct? Yeah, we do.
Starting point is 00:36:44 So now if you run brew install it will check for updates in the background i think by default once a minute um when i say in the background i don't actually mean in the background i mean before you run the command it will check for updates and that was actually that's one of my favorite features in there because it was a really fun exercise for me in kind of performance benchmarking like on kind of the full stack because um i this is something i had a while ago is i was like okay well i want to be able to run auto updates because a lot of the time when things break we tend to get a fairly long tail of people who haven't run the update who file the issue for something which is fixed you know a day a week sometimes even a month a
Starting point is 00:37:25 month earlier and i've always kind of wanted to have that but then the updater at that time took probably about 15 to 30 seconds depending on where you are in the world and stuff like that sort of minimum uh to do that and that always kind of frustrated me so in the end i kind of poured some time into that and tried to make it worked on a few things that made that really fast and one thing was kind of more reliable i guess so one thing was kind of moving some of the the auto update stuff uh from ruby into bash more just because ruby gets more upset when you modify its own code underneath it than bash does or at least it's easier to work around that in bash the other the other thing that was a kind of fun but completely overkill thing was with me being
Starting point is 00:38:10 lucky enough to work at github i noticed that the slowest thing by far was doing a git fetch on like a massive repository like homebrew that's had huge numbers of pull requests and stuff like that so that git fetch just did like a no op git fetch when there's nothing to fetch was actually pretty slow and so i was at that time on the github api team so in my kind of weekend i figured i'd go and see if i could play around and and figure out a way to make that faster and because we have like a a cache api layer and there's like an api call you can use to get the kind of latest state of a of a branch so i kind of tweaked that a little bit i made it so you can pass in the sha1 from git as the etag to that so you get three or four unmodified if
Starting point is 00:38:58 nothing has changed and therefore not use up your rate limit and allow us at github to kind of deliver that from the cache and basically yeah as a result like flip that git fetch operation to just being an http call and and that's like way way way faster and for both github to process and for homebrew to process so as a result was able to kind of play around with that and do some parallelization and stuff like that. And now it's generally kind of under a second or around about a second down from kind of 30 when you are kind of doing an auto update. So that seemed like a reasonable amount of time for people to kind of spend on every call, considering if you do a brew install, the compilation and extraction time are going
Starting point is 00:39:42 to be significantly longer than that anyway. Life is good when you control both sides of the APIi right yeah no it's it's much it's much much easier and when you have that like it's it's nice to be able to kind of jump in there and play around but i think even if i didn't control that side of things there there might have been ways i could have played around and made it a little bit faster. But no, it's certainly easier, as you say, when you have that. And when you have very smart co-workers who I can kind of bump it off and kind of actually work on Git itself as their day job and then be like, okay, am I being stupid here? Like why this is slow and all this type of thing? And then discussing an approach with them, that was kind of pretty fun.
Starting point is 00:40:22 So just one aspect of user experience, I think focusing on the speed is key there. And in fact, Adam and I were kind of lamenting a little bit before the call about certain bits of software that do auto update, but you don't run them enough for them to ever be updated. So my example, for me at least, is Firefox, which I don't use on a regular basis, but I do use if I'm doing browser testing or for one-off purposes. And it seems like, I think they may do it in the background now, but it used to be every time I launched Firefox, it would say, Hey, we have an update update. And it seems like brew for me, at least I use it all the time. So I don't have that issue,
Starting point is 00:40:58 but it could be the kind of thing where you don't launch it very often. And then it feels like every time you're running the brew command, it updating sometimes sometimes like i just got to get this thing installed i need this command so i can fix something that's on fire um so speed i think is important to fix that is if it happens real fast no big deal um but in light of there is a new update does it automatically run that for you or does it prompt you where you can say not right now? Have you thought through those kind of things? So we have, in terms of our commands, we have a separation between update and upgrade.
Starting point is 00:41:32 So update is basically get all the definitions in the package manager at the latest version and then upgrade is like, you know, install OpenSSL 1.1 instead of 1.0. So yeah, we don't auto-upgrade. Sure, but I'm referring to like, say I run
Starting point is 00:41:48 brew install jq because I need to parse some JSON on the command line real fast. And you don't want to wait a couple of seconds for the update. Yeah, I mean that's one of those things that we kind of considered, but in the end the kind of support burden
Starting point is 00:42:04 for that is, it's worth it for us like that you would not believe how many like annoying because again i don't think we mind that much about the the issue count or whatever or the number of issues people are filing but what's right the worst thing is when you get the same issue again and again and again and the the response to fix it is the same thing again and again and again and like my attitude is always try and automate myself out the job so like if it's the same command we're having to tell people to run like every single time and if people are still not running that command then it's like well we're gonna just run that command for you and i think it's definitely that i think the pain is alleviated because of the small payload size of updating homebrew.
Starting point is 00:42:48 Whereas in like, for example, with my Firefox example, you got to download like a 60 megabyte file or whatever it is. So it's more of like, OK, I'm going to sit and wait. But in this case, even when you do have I run brew installed JQ and I'm, you know, I'm a dot release behind. We're talking like seconds to get that thing upgraded. Is that right? That's the point where it's doing the, the auto updating is like when you're doing a brew install, not just brew update.
Starting point is 00:43:13 Yeah. Yeah. So we have to basically a brew install now does a brew update in the background. Okay. I'm, I'm tracking now. I heard you said before,
Starting point is 00:43:22 but I wasn't sure what, under which command it was doing in the background you said once per minute something like well if you do brew update yeah so if you do brew update then it will basically skip them or the next skip even looking for the next minute and then as I say it's optimized for the no op case where
Starting point is 00:43:38 if you don't actually have anything to update there then it will just ignore it and she said it's just definitions right so it's just definitions right so it's just pulling back like the latest things are available to brew install yep yep exactly and invariably that's i think the other thing that's kind of tricky from a package manager perspective is that you have this conflict between what people want and uh what people need where you know humans included, are lazy.
Starting point is 00:44:06 And if you can avoid upgrading something now, and if you can kind of put it off until tomorrow, like most people will, but then there's some of this stuff that it's like, well, actually, that's a really big deal with security. So you need to update this now. And if you don't want to update this now, then we've got to sort of like nudge you
Starting point is 00:44:24 in the right direction so that you do that so that your machine doesn't get earned and then it's we're at least partly responsible and as i say it's that kind of weird conflict that you have where sometimes you've got to just force people to do things or not implement things that they want you to like a recent thing that could have made the 1.0 release notes but actually it i kind of pruned it from there is we don't we used to let you run homebrew as root um and like you know you would have to completely change all the ownership so it was root and everything like that to almost emphasize that look i'm really sure but in the end we're just like you know what there's a use case for this but it's just a really bad idea because if you run
Starting point is 00:45:05 homebrews root like we don't like other package managers that run as root they drop privileges because that's what they're designed so they'll run as root and then when it actually comes to doing installation or whatever they'll go and just be like okay i'm a user now with no privileges so i can't do stuff whereas in homebrew because the vast majority of our users are not running as root we haven't implemented that. And we don't have the motivation to implement that. So if you run Homebrew as root, a makefile can now literally change any file in your entire system. So that's bad.
Starting point is 00:45:37 And we added a sandbox that means that obviously you're running as the same user. And then we stopped the build process from being able to write to arbitrary locations in your system. But again, to make it even worse, sandbox broke when you were the root user. So we had to disable the sandbox for the root user. And at that point, we were like, okay, this is just way too dangerous.
Starting point is 00:45:58 And unfortunately, we need to make the call that we know better than other people do at assessing the risk in this situation because we've seen what happens when there's a make-bar log that starts trying to just delete random files off your system and users maybe haven't seen that.
Starting point is 00:46:12 And when that happens and they destroy everything and they don't have any backups, they may not hold us responsible, but they kind of should if we have seen that coming and we've not addressed it properly. So yeah, fun times.
Starting point is 00:46:26 Well, while we're talking about technical changes, well, let's hit on one more and then we'll take our next break, which is you've changed the default location of the Homebrew repository. In fact, I believe as you upgrade it, it will move it for you from user local to subdirectory user local Homebrew. Can you speak to that change and then the implications of what all it entails? from user local to a subdirectory user local homebrew. Yeah. Can you speak to that change and then the implications of what all entails?
Starting point is 00:46:50 So there's always been a bit, people have had a bit of a love-hate relationship with homebrew being installed in user local. And the main reason the homebrew is there is because originally at least was because that's in your compiler and a bunch of other Unix-y tools, they look there by
Starting point is 00:47:05 default so that basically means with ruby gems and various other things if you have a library in there and use your local lib use your local bin then they will look in there and you don't need to like manually specify your location so that works kind of quite nicely for most people and again when hubru kind of got started that's something that helped is again like adding to this sort of zero configuration approach that Homebrew was taking on things. So the problem with this is time goes on
Starting point is 00:47:30 and we say in our repo, like, oh yeah, we want to add a readme, we want to add a code of conduct, we want to, you know, add a bunch of stuff in our repository. The problem with that is
Starting point is 00:47:41 all that stuff ends up then getting dumped in user local. And then people are like, okay, well, user local bin wget. Okay, I'm fine with that is all that stuff ends up then getting dumped in user local and then people like okay well user local bin w get okay i'm fine with that user local like readme.md that feels kind of weird to me when there's other stuff in user local and people people were getting annoyed with that and i kind of understand that so it was actually one of our users came out with something which was kind of, I mean, frankly, a hack that had never really been patched, which was that Homebrews, by default, Homebrews, what we call the prefix, which is user local. And that's where all your files get symlinked into like user local bin, etc., as I was saying before. And that has actually remained unchanged.
Starting point is 00:48:23 And that was the same as where we had the repository previously but there was a hack you could do where you could install the repository in a different case in a different place and symlink it funnily and then it would put the repositories files or the readme file code of conduct documentation whatever in a different path that you specify if you're choosing and then user local would contain just the kind of symlinks and the install packages. And the nice thing about that is that user local, you may have seen the user local seller directory.
Starting point is 00:48:53 Now that's where all the binaries are actually stored, and then there's symlinks into various different locations. The problem is if we decided to move that, we would have to rebuild all our binary packages for all of our OSX versions. And that's basically a massive pain that we don't want to have to go through. So this hack that this person suggested, I tried it out on my own machine for a few weeks,
Starting point is 00:49:16 and it was completely flawless. Everything just worked absolutely perfectly. And that allows us now, after the move, to have all our binary packages be the same, still have all the kind of the compiler search paths and stuff like that be fine. But now we can move stuff around in our repository on GitHub. You know, if we want to put a readme.md file or contributing.md file or change those file names or whatever, they can all now live inside user local homebrew instead. And we don't need to worry about kind of junking up people's user local another final benefit from that is so we always we would tell people to take ownership
Starting point is 00:49:53 of user local and just recursively churn that so you can always write anywhere in there the problem is is apple's osx installers various various other tools, would reset that. Yeah, every time. So every time there's a new version of OSX that comes out, there would be that kind of reset process, and it was a massive pain for a lot of people. So now what we do instead is we create the root-level directories in user-local, get people to CHR them instead,
Starting point is 00:50:21 which our installer does by default, and then you just have those root root level directories which kind of stick there. And anything else can dump files in user local, can change the ownership of user local, and all that good stuff. And that doesn't affect us anymore. So again, that's another example of somewhere where it's
Starting point is 00:50:38 massively cut down on a bunch of these issues we would just see again and again on every AeroSense release. So yeah, it's been great. Or MacOS os i should say i've actually been bit by that bug once before yeah yeah i've been bit by that one several times before i forget that it happens and then it happens and then everything explodes i just upgraded at 1.0 yesterday and as part of the upgrade because i i upgraded to sierra last week and i just did the upgrade to Homebrew 1.0 yesterday and I had to change ownership on user local
Starting point is 00:51:07 because Homebrew had set it back to was it root and wheel or something like that. So yeah, I can see that happening to everybody. Yeah, exactly. And then nicely now we after the migration,
Starting point is 00:51:16 we then tell people, OK, you can actually now change this back. And then that's now the last time. So when Sierra plus one, I'm still hoping for Mac OS Sea Lion to come out but when that comes out or whatever and then yeah hopefully these permission issues will just be gone for good
Starting point is 00:51:32 at that point which will be lovely that's funny as we're talking through all this the details I'm I'm just reflecting back on earlier in the show when you said that you that you do this homebrew stuff as you said in the times whenever like you that you uh that you do this homebrew stuff as you said in the times whenever like you're running a test suite and it takes five minutes or something like that like i'm just reflecting on all this detail and all this complexity and all this community and all this you know how important homebrew is to so many developers out there how you and others do this in your spare time and that's just crazy to me i mean yeah so i mean i'd say kind of here in the air time but yeah i mean in the run up to 1.0 i'd sort of decided i wanted to ship it all around about the sierra release um so yeah so
Starting point is 00:52:11 in the two weeks before that like i was just like doing pretty much every every evening and weekend like pretty much all evening and weekend like i i think there was you know we were getting to the point where my uh my dog and wife, like, not tolerated any further. As we know, you're a dog lover, too. We can hear your pups in the background there for a second or two. Still got a little cameo on the show. Yeah, yeah. I do love my dog.
Starting point is 00:52:36 She's pretty great. And she's in my GitHub profile picture as well. Well, cool. Let's pause there, then. When we come back, we've got lots of other things to talk about. Software Freedom Conservancy, the new community site, several other things happening, more community growth, and maybe even more ways that the community can step in and support Homebrew and ship their own formula or formulae, as you might say, or have changed the way you say it. So let's pause here. We'll be right back. One of the fastest, most efficient SSD cloud servers is what we're building our new CMS on. We love Linode. We think you'll love them too.
Starting point is 00:53:28 Again, use the code CHANGELOG20 for $20 credit. Head to linode.com slash changelog to get started. We're back with Mike McQuade talking about Homebrew. And Mike, around Homebrew, there's several terminologies used. You've got cast, you've got tap, you've got brew, you've got several things. You've got formula or formulae. I think that's changed, if I'm correct. It's plural form.
Starting point is 00:53:55 It's plural form. Okay. Walk us through some of the terminology. Do you tap a cast? Do you tap a keg? What is it? How does this work? Yeah, so I think the terminology is a bit
Starting point is 00:54:05 sometimes tenuous in places and it's not quite um all adding up but a tap is effectively what we call a third-party repository basically so that that was initially created that was one of kind of max's last big features he worked on and a tap basically allows anyone to be able to have a git repository which well it doesn't be able to have a git repository which well it doesn't actually have to be a git repository anymore but a directory with a collection of formulae or homebrew extension commands that they can go and say to anyone okay like here's this one command you can use to install a tap on your machine and then brew update will then keep that up to date and brew install will then
Starting point is 00:54:45 let you install from any of those taps as well so actually as part a fun little fact is as when we split out homebrew into the two repositories the formulae became their own tap so previously you had all the kind of central formulae and then you had taps but then now actually everywhere that contains formulae is always in some sort of tap seem like that's a promotion of the tap idea because back when i first started using homebrew like using a third-party uh repository for formulae was kind of like sketch and you're like well if you really have to do this but now it seems like that's very commonplace is that a fair characterization? Yeah, definitely. I think there's a recognition in that,
Starting point is 00:55:27 that A, that people are going to want to do stuff that we don't have. If you work at a company, you may well want to have internal tools which are installed by Homebrew through a tap. But also it's helped us with some of the really long tail stuff because now we can say to people,
Starting point is 00:55:44 if you're the only person interested in this then you can just create your own tap and you can keep that up to date and then if more and more people particularly now we have analytics for some of this stuff and if more and more people use that then we can consider kind of bringing that into homebrew itself and before that we couldn't not that kind of private taps are revealed by analytics we're careful to not do that. But within the Homebrew organization, we have several taps for different things. And it lets us as well subdivide maintainers
Starting point is 00:56:13 based on things that are interested in. So we have a science tap, a PHP tap, a Python tap. And those are not... To install Python, you don't have to tap Python tap. But it provides some sort of stuff which is deeper into that ecosystem and stuff which we wouldn't include in our main repository and can kind of find a home in some of these taps instead and these taps can be run independently and a little
Starting point is 00:56:35 bit looser on some of the restrictions that we kind of have to have to kind of keep the core working effectively tell us about cask what's? So yeah, so that was quite exciting. So brew Cask was originally a thing made, I can't remember what year it was originally, but someone basically really liked homebrew, but they hated the fact that when you install Mac applications, you have to download the zip or the package file, the.mg or whatever, and move the file there. And it's almost always the same process every time. And it's like, and I think's almost always the same process every time.
Starting point is 00:57:05 And it's like, and I think they were just like, well, why do I have to, why can I install my command line software beautifully? But then I have to like physically drag and drop a thing with my mouse. That's the sound I make when I do it. Exactly. I actually quite like drag and drop.
Starting point is 00:57:21 I kind of miss that a little bit in some ways, like the little drag and the icon into the applications folder and it's all nice and pretty. You can of missed that a little bit in some ways, like the little drag and the icon into the applications folder and it's all nice and pretty. You can still do it, Mike. No one's stopping you, man. Yeah, my obsessive desire to script everything is stopping me, unfortunately.
Starting point is 00:57:37 But yeah, so they made this brewcast command so you could do that. You could do brewcast install and Google Chrome, whatever. And we had a cask command so you could do that you could do brew cask install and you know google chrome whatever and and we had a summer code student this summer anastasia who is a very very smart russian student who worked on basically trying to unify the two projects so homebrew cask they originally were kind of a little almost extension i think in just a tap and we kept because we
Starting point is 00:58:07 didn't provide any sort of official api for them they kept and they're being broken by our changes so in the end they ended up vendoring a lot of homebrew code homebrews code so in google summer of code this summer the student worked on basically de-vendoring all this stuff so that they could kind of we could share a lot more code between the two projects and de-vendoring all this stuff so that we could share a lot more code between the two projects, de-duplicating between the two projects so stuff which didn't make sense to have in both wasn't in both,
Starting point is 00:58:33 both in terms of source code, but also in terms of things that are installed. When they both installed identical software, there wasn't a need to have them both. And then finally, actually moving all of homebrew casks kind of package manager codes into the homebrew package manager itself and so now we have homebrew cask living within homebrew itself so when you run brew cask
Starting point is 00:58:56 now that's part of the homebrew package manager and part of the homebrew's release process and stuff like that and we're able to do stuff like share a lot more code, share maintainers, share testing. And that kind of provides some guarantee as well that we're never going to break Homebrew Cask stuff because our package manager tests are now running all of Homebrew Cask's tests as well. I just did a Brew Cask list on my machine. And it turns out, even though I don't know what Cask is, I have used it to install Screen Hero.
Starting point is 00:59:23 So I believe someone said yeah just type this and i thought oh that's really cool you just type brew cask install screen hero or whatever the application is and magic happens and then you forget that you did it and all as well so and the cool thing that comes on top of uh brew tap and brew cask as well is which not many people know about and i think partly because i've not done a good job at describing it is the thing brew bundle so that lets you have a brew file kind of like a gem file or whatever and in which you specify a list of homebrew packages cast packages and actually like taps and eventually even like mac app store packages as well and then it will automatically you can run brew bundle and it will go through that list and install any of the ones that aren't installed. And you can also do the reverse where you can kind
Starting point is 01:00:09 of dump to a file and then have that as kind of almost like a backup of everything you've got installed and all the options they're installed with and stuff like that. So that's been really useful for letting people kind of almost import and export their configuration, but also for having like a system wide like installation so you can have one script which then installs all of your software but then we've been leaning on that heavily inside of github as well and to have that per project so you can specify a definition of this project requires my sql and nginx and stuff like that and there hasn't really been a good way before that of kind of defining that.
Starting point is 01:00:45 Like often that's just in the documentation, but we can actually have now in the brew file. So we'll install the correct version of MySQL and then start up a daemon in the background on the system if it's not already running. And then that'd be a no-op if that stuff is already installed and the daemon's already running.
Starting point is 01:01:00 That brew file is really handy for descriptors. I've seen that actually, I think, in maybe earlier versions of ThoughtBot's laptop project where they're doing lots of interesting things around. They actually used to support Linux and Mac, and now it's just Mac, but it's kind of like their way of setting up a development machine. And I'm pretty sure I recall seeing a brew file in that, and that's kind of where I actually stumbled upon that and thought that's kind of interesting to see. Like, here's a way you can just run a lot of brew commands, basically.
Starting point is 01:01:31 Yeah, yeah, exactly. And so it's pretty neat for that. And again, being able to standardize on these things, I self-plug have like a little project called Strap that we, again, use inside of GitHub. That is kind of a system bootstrap type thing and and that rather than it's a different approach to thoughtbot laptop because it's not opinionated at all about what stuff should be installed so if you have a brew file in your dot files directory it will check out your dot files directory and run the brew file in there so every person can have their own almost custom system bootstrap script and from that perspective
Starting point is 01:02:06 and still yet have like a sort of centralized way of running that for everyone so it's been quite neat and but yeah my long-term dream if i ever get around to it which i probably never will is to try and work with a few other people and see if we can get some sort of uh brew file definition format which um a bunch of package managers support so that we can have a way of you can declare in a project that okay i i want to install my this project needs my sql installed libxml2 whatever like the kind of native package manager dependencies and that file can then be read by you know whether you're on fedora or NuGet on Windows, maybe even, or Homebrew or Mac ports and have a single file, which could be used to kind of as shared metadata
Starting point is 01:02:49 across all these package managers. That's kind of a little dream of mine that may or may not happen one day. That would be cool. I think RBM had a similar dream. Isn't that right, Adam? Or RBM3? I'm not sure if you ever got there, but it was kind of like beyond Ruby versioning. It was like versioning for everything you could just list all your you know this requires postgres this requires
Starting point is 01:03:10 uh redis for instance but definitely a dream to get everybody involved because that's a lot of different uh software projects that would need to come on board and if i couldn't call it brew file it'd have to be like oh yeah yeah yeah obviously yeah i'll submit term you should call it dependencies yeah yeah that seems fine when people tend to like that one might have to have some slight pun on the name just because i'm british and that's you know that's what happens to us so tell us about keg so kegs are when so that's one of the hardest metaphors in that even the homebrew maintainers probably disagree on what a keg actually is um but a keg is technically that's the directory when you install homebrew a package in it the directory is used as the
Starting point is 01:04:03 prefix so this is going to get a bit package manager navel gazey but the way most package managers work is they have a unified prefix and what i mean by that is when you run configure or make make install or whatever say on two pieces of software the prefix you set is say user local and then what it does is it chucks binaries in user-local bin, it chucks libraries in user-local lib, et cetera. And that's the general way most package managers work. What Homebrew does, which was actually aped off
Starting point is 01:04:34 by Max's own omission off another package manager whose name escapes me off the top of my head at the moment, but basically having every single package be in its own prefix by package and by version. So if you go into user local seller, you'll see you have user local seller and then the names of all your packages. So user local seller and then a subdirectory called wget and then a subdirectory of whatever version of wget is installed. And then within that, then you have bin, lib, all these other directories. And then what Homebrew does is we then symlink the contents of those subdirectories
Starting point is 01:05:06 back into the user local bin. So in user local bin wget, that's not actually the wget binary. That's a symlink to user local seller wget version bin wget. And basically the benefit for that is it lets you stop software from stomping on each other. So you can have software installed side by side, which installs conflicting things, but they just both can't be linked at the same time. Rather than being like, okay, we actually just can't install these two things in the package manager at the same time.
Starting point is 01:05:40 I might actually suggest after this that there actually be some sort of glossary for homebrew, because you'll have so many terms, and I'd forgotten about cellar, and we actually asked about keg as a joke, because I didn't think it was a real thing. I was hoping you'd laugh, but it's actually real. And so our next one is like, tell us about pints. Yeah, pints are not real. Well, I mean, they are real, but not in homebrew. They're real to me.
Starting point is 01:06:04 Yeah, yeah.'m so yeah no i mean we definitely could do with having a glossary i mean why i mean if anything it could be an attractor to contributors because it's funny it's just a new way to like talk about your project and just have fun with what it is you know yeah exactly i mean so my the reason why i i didn't do that originally is my whole thing was I wanted to rename everything. So we wouldn't call kegs kegs anymore. Careful now. Why? Exactly. Exactly. And that was an example. You were concerned about the analytics people getting you.
Starting point is 01:06:38 This is the real reason he wanted to be lead maintainer, so he could rename all of the ads. Would you come up with a brand new analogy or would you just remove all analogies i mean i think yeah we just call things packages if there's an established name already call them that packages prefix whatever but i mean i think the argument which i i probably mostly agree with at this point that pretty much every other person in the world said is that okay you might make things slightly easier for new users but at this point homebrew is at the point where you're probably going to confuse a lot of people who've learned the existing terminology more than you're going to help, you know, a new user at Code Academy or whatever, understand this stuff. And yeah, and as you say, probably the best middle ground is just have a glossary and just define these things. I guess it depends though on this change stuff. Now, the Nayserami says
Starting point is 01:07:25 don't do that, but I think if the plan was wider adoption and a greater invitation and if the normalizing of the puns, while we all love puns and just the play on words kind of gets played out, so to speak,
Starting point is 01:07:42 if reducing that helped invite people and actually contributed to a greater project that might be for it but it would hurt along the way i'd cry a little bit yeah yeah no i i do agree and i mean it's it's maybe whether we can change some of these things whilst maintaining other things or whatever like you know we can certainly maintain the kind of beer theme and the little nice cute emojis we have and stuff like that whilst maybe renaming some of these things so yeah it's it's it's still a source of debate and torment for us all adam sounds like he's for it i'm against it so there you go you split us down the middle i'm not exactly for it embrace the analogy and just it's it gives homebrew has
Starting point is 01:08:27 personality it has a theme it's it's actually worked out better than most names in terms of like they have kegs and casks and taps and i mean those are things that actually have make some sense now once you get outside of it like would you say boneyard or graveyard or something but some things just don't match then you get mad you're like oh we can't think of a beer themed boneyard but along the way i think it's helped massively and i think it makes it kind of a joy in certain ways yeah yeah and i i think that's you know i redesigned the website for with a help from an australian designer danielle uh whose full name is actually on the website but uh yeah so i i think that was part of what i was going for a little bit with the redesign as well
Starting point is 01:09:09 because she came up with these great new icons you may have seen which it just they feel a lot more playful and kind of fun and like it's i i feel like that i i love them when i i set upon them at first because it it just feels like that's the vibe of our project is we're trying to have that sort of fun slightly kind of jovial slightly silly like you know part of that is the fact that you know we have prose guidelines and in our prose guidelines we favor british english just because you know max was british i was i and partly just because i mean a little part of me and i think this is more Scottish thing than a British thing is I kind of just like being difficult you know I'm one of those
Starting point is 01:09:48 people when I worked with cute back then as well when you define colors that was a cue color and I would regularly name my cue colors variables color with a C-O-L-O-U-R just because you know
Starting point is 01:10:03 because I'm a crotchety Britishish person and i right i find it funny to do those type of things so i think part of that kind of creeps into homebrew and we do try and we kind of have to remind people sometimes that like we know some of this stuff's a little bit silly but that's that's the project we're not a company we're not a serious business and we can afford to be a little bit more silly even when maybe sometimes it's a little bit self-destructive because that fun is what keeps us working on it i guess right well now that you're getting kind of beyond yourself and talking about the community and the group of people that are all involved with it let's let's change focus we're getting a little
Starting point is 01:10:39 bit low on time here but let's talk about the social side of things in 1.0 and you have two what i would call kind of social announcements or things that have happened at least in light of 1.0. And one is the joining of the software freedom conservancy. And the other is a setting up of the community discourse. I'm not sure exactly when those things happen, but let's start with the software freedom conservancy. Homebrew has joined that. What does that mean for the project? Sure. It's one of those things that for open source that you don't really understand until you run a big project for a while. But when your project has no possession effectively, then there's not really a need as much for a thing like software freedom conservancy.
Starting point is 01:11:18 The problem is when you have... We had a Kickstarter a few years ago, which was really great. It let us buy some Mac minis, which we for our ci and as i get older thankfully not that old and i'm a bit of a paranoid person anyway part of me is like okay well these cis are in a data center like a friend of mine runs an isp in the uk uh and we have a bunch of money in a bank account which again i have access to but i've given other people the credentials to and stuff like that what happens if i get hit by a car to those servers what happens when they go down what happens to the money in that bank account uh and i just you know that stuff gets a little bit more worrying and it becomes one of these things where you think well it's actually not very responsible of me just assuming that this project will survive my
Starting point is 01:12:05 health and it also means that if i ever did want to or i have to step away from the project then the the unwrangling of me from the project would be a lot more difficult and what the software freedom conservancy provides is a legal entity to own these things and and a legal entity to if whoever got sued for whatever reason then the software freedom conservancy would defend us and also on top of that as well they are a 501c3 or for non-americans and a non-profit in the u.s which makes it a lot easier to accept donations basically which are tax deductible for individuals and corporations to provide so that is not something we've we've not managed to do a massive amount of fundraising yet that's
Starting point is 01:12:51 probably my next big project to try and like lean in on that a bit more and because our recurring monthly revenue is zero but basically just all those things that kind of help provide some more kind of infrastructure and architecture around the kind of the governance and running of the project. I'm surprised to see or to hear that, uh, that it's zero, like there's no contributions, there's no donations. I mean, I mean, that's, we're running low on time, so this is harder to, to kind of like tap into, to keep using our terms, but, our terms. But it just surprises me that Homebrew is used by so many
Starting point is 01:13:28 and depended upon by so many. I mean, I don't know a developer, that many developers out there that aren't developing, at least on a Mac, more often Linux, but not as often on Windows, although it's becoming more and more popular with Ubuntu's announcement of Bash and Microsoft and all all that good stuff but i'm just surprised wow yeah yeah so i mean part of that you know we're coming to personal beliefs and stuff but you know my whole thing is i i don't feel happy spending money on a recurring basis until i have money coming in on a recurring
Starting point is 01:14:02 basis in both my personal life and with homebrew. So it restricts the stuff we can do. There's certain things that it's like, I would love to just be able to spin up an AWS instance to run that, but we don't have the money. So we can't afford to do that. And yeah, it is a bit of a pain and it's not hit as that adversely yet. But as I say, on the flip side,
Starting point is 01:14:22 we've not ever really beyond the Kickstarter tried to do decent fundraising for that and that's something i do want to you know personally do in future well that's somewhere we can help you play a role a little bit i mean i know that jared and i we both uh have some passions around that and you know we can always talk to you outside of this the context of this show to to help you on that front, to give you, you know, collaborate in that front a little bit. And that's something I think we have some future ideas around,
Starting point is 01:14:50 nothing that's exactly solid, but definitely some passion. And anytime we hear of something like homebrew, having zero recurring revenue to do even stickers, you know, anything that's like community outreach, not so much like just have money, you know,
Starting point is 01:15:03 that to have money, but you know, to have money to do things that are community related or growth related or, you know, outreach or anything, anything whatsoever. You can't sponsor one of the maintainers going to a talk because you just have, you know, you have no funds to do that stuff. It's very limiting. And I think that there's so many people out there using it. There's got to be some way you can bring in at least a bucket user and that'd be a lot. And I mean... Yep.
Starting point is 01:15:28 Well, let's cover real quick, even though we're real short on time. So give us the information on the community discourse site and the purpose and the setup of that. Yeah, so that's something we shipped I think on the same day as 1.0. And it's basically just another way of communicating on Homebrew.
Starting point is 01:15:45 It's something that the mailing list, we've got a mailing list, we've got an IRC channel, we've got the issue tracker, and none of them are quite, you know, they all feel slightly formal in their own ways. And I think that the discourse has been kind of great since it started, actually, of just allowing people a little bit more of a kind of free-form place to talk, to kind of post about issues in a little bit of a looser way and people to be able to help each other as well that's the nice it seems to be building an expectation there
Starting point is 01:16:12 which is nice which is that it's not just the maintainers who are kind of jumping in and kind of helping people there and a bit more of a kind of discussion and stuff like that and yeah it's been good one more thing i I heard you mention earlier, but I'm just curious what the tie-in is together. Because I see in the footer, it's Linux brew is maintained by Linux brew. But earlier you mentioned Linux brew. It also says it's the homebrew package manager for Linux.
Starting point is 01:16:36 Is there an affiliation there? Is there, I know one of the maintainers crosses over, at least. What's the relationship there? Just curious and closing. So I think originally linux brew was like just a fork um and then we we kind of created that and they they just kind of had a bunch of patches on top of homebrew and but then with 1.0 like we have a kind of what i call a generic
Starting point is 01:16:59 back-end which is a back-end that doesn't assume anything OSX or Linux centric and kind of run the tests and run an install on Linux and Mac. So now that we have that backend, we're trying to do more porting to try and get things into from Linux Brew's Brew kind of package manager fork into Humber itself. And then hopefully maybe a 1.1 or whatever will have a point where Linux brew can go away entirely.
Starting point is 01:17:30 And we can run that entirely off Homebrew's brew. And we can have a unified package manager that works on OS X and on Linux. Nice. Good stuff. Is there anything we missed in this call? I know Jared and I had quite a list to talk through pretty much just based around your 1.0 announcement. but is there anything we missed that you wanted to make sure we talked about?
Starting point is 01:17:47 I don't think so. I think that was everything I wanted to talk about. I looked at your little notes about the common questions at the end of the show. I'm not sure if we were doing them or not, but I think we've touched on almost all of them anyway. There's one we want to camp out on, which is essentially
Starting point is 01:18:03 a great invitation from you and the other maintainers of Homebrew to the community. So there's lots of listeners to this show from all walks of open source, all walks of developer life. So if you were putting out a widespread invitation to those who could step into Homebrew and help out in various ways, what would those ways be? Yeah, that's a great question.
Starting point is 01:18:24 I think basically just getting involved at all it's great we have a thing in our homebrew brew read me about the easiest ways to get involved which is basically we have a an audit tool for kind of running through things and seeing if there's any little violations and of our kind of style and that's a great way to get started and get kind of familiar with our workflow. But I think the main thing I would just say is anyone who's sort of in the wider homebrew community is just be nice to each other. I think open source, as I kind of touched upon a little bit earlier, has a problem with retaining and welcoming people, particularly people from more diverse backgrounds than it's historically been. And that's something I feel like everyone can do, whether it's on Homebrew or on any project to kind of make the open source ecosystem a better place is try and just be nice, be friendly, be helpful, be kind to people in Homebrew and on any open source project,
Starting point is 01:19:17 because that's the way we're going to grow this community. And that's the way we're all going to make better software together. Because when you don't have those things, people stop working on things like Homebrew. When you don't have those things people stop working on things like homebrew when you don't have those things people don't want to work on open source and that hurts us all really i need kind of like a a universal mini so or mini song what is it jared for uh matt's is nice we are nice can almost be like maintain our maintainers are nice we are nice kind of thing you know it's just universal mini swan that's what it is yeah no i like that that's nice you know i mean i think that uh every you know sure everyone says they're nice and it's a variation of nice but uh you know maybe maybe they're not nice i don't know maybe there's a project out there that's just like led by somebody who's a complete jerk or not a very
Starting point is 01:20:00 nice person and so therefore their community is not very nice. But I think when you look at the leadership of homebrew over the years, you know, starting out with Max and the leadership that stepped up over these years, you've all been very nice and, and there's no reason not to be nice back. Yeah. Well, we do try to be. And I think that the thing that I think that's important to remember is people, again, when you were saying everyone kind of thinks they're nice is you're you're as nice as the way you treat the person you're angriest with the person you're most disgusted with whatever like it's not when it's dealing your day-to-day it's when you're really angry or frustrated or disappointed or confused or whatever like that your behavior in that situation is what like we're asking you as
Starting point is 01:20:46 like open source people and and equally myself as well i've got as much to learn from this as anyone does like that's the stuff we need to kind of work on because it's very easy to be kind of nice in the times where you think things are great but it's harder in the times where everything is broken and your house is on fire that is true's a, it's actually a good example of when people are actually nice is when they're angry or should be angry or could be angry or whatever. That's totally true. So, um, Mike, you know, one thing I want to mention to the listeners before we close out is that we have this email called change law weekly. I don't know, Mike, if you subscribe to it or not, but, uh, uh, every week on Saturday and Jared, now it seems like Sundays
Starting point is 01:21:24 because Sundays have kind of been a better day for us. We've just had such business going on between the new site going out, three shows, lots of stuff happening around the business. I've been changing our verbiage to every weekend. Every weekend. Yeah. I mean, I think Saturday has been a great day traditionally for us, but Sunday has turned
Starting point is 01:21:42 out to be the day we actually end up shipping this email. But in that email. The most recent one. Issue 124. We mentioned Hobrew 1.0.0. And many other awesome things. So if you're not subscribed to that. Go to changelog.com. Subscribe.
Starting point is 01:21:57 All we ask for is your email. But if you put your name in there. We greet you nicely in the email. So the name is optional. So don't feel like you have to. But a lot of people in the email. So the name is optional. So don't feel like you have to, but a lot of people listen to that or sorry. A lot of people read that email, include our latest episodes,
Starting point is 01:22:12 everything that hits the, you know, our radar in terms of open source, software development, encouragement, things like Mike's talking about here with being nice and stuff like that. So a lot of stuff around software development. So if you don't subscribe to that, you know,
Starting point is 01:22:24 Jerry, what have we got? Sad faces or happy faces? Emoji sad face. Emoji sad face. And Mike, so do you subscribe to this? Just curious. Yeah, I do.
Starting point is 01:22:36 As of three seconds ago. Three seconds ago. What's your favorite issue? That's all we ask. That's all we ask. Just because you're subscribed. My favorite issue is the next one. 125.
Starting point is 01:22:45 Nice. You're going to love it. You're going to love favorite issue is the next one. 125. Nice. You're going to love it. You're going to love it. You're going to love it. Now we get a lot of pressure on us to please Mike, which is hard. I don't want to see you non-subscribe on Sunday. I'm going to email you nasty things. That's right.
Starting point is 01:22:59 Yes, that's the way we do it. But that's what I want to mention in closing, just because we mentioned Homebrew's 1.0 announcement recently in that email, a great place to mention that. And if you listen to the show and you don't subscribe to that email, it's just, you're just missing out. That's all I can say.
Starting point is 01:23:12 So do that now, take our direction. And that's it for this show, fellas. So let's say goodbye. Bye. Bye. you

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