But What About The Stars?
Interviewed by Ruby on Rails Podcast
In this episode, Kyle is joined by Mike McQuaid, a maintainer on Homebrew, to talk about open source, how Homebrew works, and the hardest part of running a huge package manager for Macs. Let’s give this new format a try!
Show transcript
- 0:00 you're listening to the ruby on rails podcast i'm kyle daigle i'm the host feels kind of weird to
- 0:17 say that i'm the host of the ruby on rails podcast uh this is the first episode without
- 0:22 um the previous co-host sean so we're going to give this new format a shot i brought on mike
- 0:28 mcquade he's one of the maintainers of homebrew uh we had a chat around how homebrew works and how he
- 0:34 got involved and the biggest problems that he's had with homebrew uh it should be pretty great to
- 0:39 listen to that'll be coming up next otherwise i'm gonna try this new format i want to bring people
- 0:47 on every week and not really interview as much as try and emulate and have a conversation with them
- 0:52 about what they're doing why they're doing it why i think it's interesting a little bit of
- 0:58 completely random stuff since most of these people that i'm bringing on i know uh but i'd love
- 1:03 to hear your feedback around whether you think it's actually working whether you think it's cool
- 1:07 uh if you want someone to come on the podcast that hasn't been on the podcast in a while i'd love to
- 1:13 hear from you you can reach out to me at twitter my handle there is k daigle or you can shoot me an
- 1:20 email kyle at digitalworkbox.com and we can shout about ways to make this interesting over the next
- 1:28 couple months as we get going this episode of the ruby on rails podcast is brought to you by
- 1:33 braintree payments why make payment integration more difficult than it has to be braintree's powerful
- 1:39 full stack payment platform allows you to accept nearly any type of payment from any device with just
- 1:44 one integration it's flexible to your system's needs and supports most programming languages
- 1:49 so whether you're using java ruby or python you'll always have a range of server side and client side
- 1:55 sdks available braintree makes payments and your job a whole lot easier learn more at
- 2:01 braintree payments dot com slash rails podcast that's braintree payments dot com slash rails podcast
- 2:09 and now let's have a chat with mike mcquade one of the maintainers of the homebrew package management
- 2:15 what's the weather like mike uh kind of it can't make up its mind really it's like alternates between
- 2:35 being freezing and far too hot in the same day alternates between raining and being fine yeah
- 2:43 everything's weird now is that like the season or is that just always i think it's a combination of
- 2:50 the season climate change and me just being pathetic grumpy yeah yeah quite possibly
- 2:57 oh man that's awesome well uh thanks for being my first uh willing victim of uh being a co-host guest
- 3:06 host on this new nouveau version of the ruby on rails podcast that's my pleasure but i mean
- 3:13 it's not starting well because i was hoping to immediately make the victim joke and then you've
- 3:18 already stolen it so see see i'm telling you yeah well now when you message me after listening to
- 3:24 listening to an episode uh it'll be about you someone will message you i heard i heard you on the podcast
- 3:29 mike and i really didn't like this one this one thing you did yeah that's i mean i'm used to i get
- 3:35 that a lot so you know i just have a filter set up so i only receive positive praise and which filters out
- 3:42 like 99 of my email but you know i can imagine your facebook has to be very uh rainbows and unicorns
- 3:51 then well i mean like my facebook's mostly i mean i've said this for a while it's like twitter's for
- 3:56 arguing with people you don't know and facebook's for arguing with people you do know so facebook's a
- 4:01 relatively close-knit group of people who i know well enough to just like tell them they're terrible
- 4:06 because of their political opinions or whatever yeah i don't know i don't i don't really use facebook
- 4:12 i don't really get it anymore i mean i have an account and i like i like people's stuff but
- 4:18 if you go to look at my like timeline or whatever it's probably like
- 4:21 nine months ago i put something in yeah i don't really post much anymore i feel like
- 4:27 both facebook and twitter i i guess i got burned out on the like you post an opinion that's slightly
- 4:34 controversial and everyone jumps on you and you know like i i guess that's probably just the internet
- 4:40 and i should have really learned that earlier than now that that's what happens yeah i learned that the
- 4:46 hard way when i started hosting uh the podcast just every everything i say gets cemented in stone and
- 4:52 then it's like kyle doesn't like go or kyle hates rails or whatever yeah well i mean those are both true
- 5:01 so i don't know why you would wow thanks oh man uh so for those uh who don't know you mike who are you
- 5:09 what do you do so i am two or more people uh i my main hat while my job at least is working at github
- 5:19 i work as an engineer and formerly on the same team as kyle and my other hat is i am the lead
- 5:27 maintainer of homebrew which is a package manager for max that if you haven't got a mac you have no
- 5:33 idea what it is and then you might try it and think that it's awful compared to other package managers
- 5:37 so uh i don't know how homebrew started
- 5:42 so it basically it was started by a guy called max uh and he initially had ideas about having a package
- 5:51 manager that would do some smart things and i mean and most of his initial idea was around it being
- 5:56 beer themed i think more than any sort of technical implementation i just you know i'm not sure whether
- 6:01 the whether the drive was that there wasn't any package managers that met his needs or just that there
- 6:07 wasn't any package managers that like had enough puns in them yeah exactly like the the pun to
- 6:13 the pun to packages ratio was too low so he uh created this package manager called homebrew
- 6:20 at the time the main probably package manager on max was um mac ports and the main early a couple of the early
- 6:30 differentiators were it installed into user local it uh built like optimized packages for you
- 6:36 so like configure them specifically for your machine and it what's the other big thing oh yeah and the other
- 6:44 big thing is that it doesn't basically build the universe um it uses its the system dependencies when
- 6:51 it can so like or sx ships like or mac os now um ships like outdated versions of a bunch of libraries
- 6:58 and mac ports view was okay well we're going to bundle and like install the new versions and the homebrew
- 7:05 was like well we're going to rely on the system as much as possible just because you know you probably
- 7:10 don't actually care that much and you trust apple to have like at least security updates for things
- 7:16 like lib xml even if the the bugs are annoying so if i'm a new rails uh engineer how would i have
- 7:25 probably used homebrew up to this point so you've probably used homebrew to like install stuff that's
- 7:31 not ruby and so i mean some people install ruby with homebrew and that's that's fine but like
- 7:37 within rails land people are typically using it for doing stuff like installing my sql installing
- 7:42 postgres installing redis memcached basically like the the big ones that get a lot of installs are all
- 7:49 the things that kind of your your software might need that aren't in the rails and gem ecosystem
- 7:56 um so you may also use it to install like native libraries that your gems rely on in some cases as well
- 8:02 and so basically if it if it's written in c or c plus plus chances are you're installing it with
- 8:08 homebrew and if it's written in ruby i guess then chances are you're installing it with ruby gems
- 8:13 instead and mac ports is like still around yeah yeah i mean they're still they're still going
- 8:19 like pretty strong i think they've got a different ethos and a few things like yeah like what i'm
- 8:25 curious and i'm not looking to create a war or hate or anything it's funny because there was previously
- 8:31 a bit of a war because um the the homebrew website for a long time said um mac ports driving you to
- 8:38 drink try homebrew oh wow get t-shirts made for that yeah and then uh and i had one with one of the kind
- 8:48 of relatively active mac ports maintainers i had like a twitter spat with them for a while um where
- 8:53 i would like post shit about mac ports and then they would get upset and like argue with me and then
- 8:59 i would argue with them and and then it's funny because like most things in open source you know
- 9:03 like both of us probably really disliked or hated each other or whatever and then we actually met
- 9:07 at a conference we were both at and got on really well and we're just like now you're now you're
- 9:11 best friends yeah yeah and we're just both like you know that's silly and you know so i guess the
- 9:17 main modern ethos i think are things like yeah the pre all the stuff we kind of talked about previously
- 9:23 um and also like mac ports i think always needs x code and the way they kind of tend to package
- 9:30 stuff is a bit different they have a slightly different maybe patching philosophy so homebrew's
- 9:35 patching philosophy which i guess originated from mine patching philosophy is like avoid patching
- 9:40 software whenever possible a little history lesson for anyone who doesn't maybe remember but um debian
- 9:47 back in the day and you know i would have made the same mistake so it's not pointing any fingers at
- 9:51 anyone they patched something in open ssl and because valgrind which is a like c profiler thing and
- 9:59 pointed out that they were using some unallocated memory so they thought okay that's bad well i'll
- 10:04 comment out that line or whatever in a patch but turns out the unallocated memory which is almost always a
- 10:08 bad idea to read from in this case was being used for entropy data so when you took that out you took
- 10:13 out a fairly major source of entropy so yeah so debian and i think the debian derivatives like
- 10:18 ubuntu shipped a massively less secure version of open ssl for a few years and because all this
- 10:25 entropy data was getting stripped out by a patch that someone had just applied and my view as a package
- 10:30 manager is that i don't know what's best for your software so don't make me try and patch it because if we
- 10:37 go down that route i will probably end up breaking it and then your users will not blame your users will
- 10:44 blame you probably for my mistakes and then no one's happy yeah so that's one of the things that i wanted
- 10:51 to talk about because i've always found like really interesting with uh homebrew or any time you're
- 10:57 building on top of something else you know uh where like so say i'm just a normal schmo and i go like
- 11:04 brew install whatever uh and it like doesn't work and so now i don't know if it's homebrew's fault or
- 11:11 the package's fault like the the thing i'm trying to install so i rush over to you know github.com
- 11:16 uh to to leave you an issue comment uh saying you know this is broken it's horrible and so i'm curious like
- 11:25 loaded question but what is it like running this as an open source project
- 11:29 yeah i mean it's i mean from that perspective it's actually not too bad like people generally
- 11:35 understand that like we and we as homebrew are quite good at quite quickly figuring out whether
- 11:43 stuff is our fault or someone else's fault and if it's someone else's fault then often we'll just flat
- 11:48 out close the issue and just be like you know like someone else needs to figure this out because yeah
- 11:52 we can't figure this out um but yeah so it's kind of tricky because obviously you could in theory pour
- 12:00 an almost infinite amount of time that every time your user reports a bug you could go and be like oh
- 12:05 okay it's my responsibility to go and fix that in the upstream project but that just doesn't scale at
- 12:11 all we have i think i can't remember how many off the top of my head 12 to 14 maintainers now and on a
- 12:16 given day there's probably sub five that are active um so yeah i mean it doesn't scale to try and have
- 12:23 that many people managing you know thousands of packages we have like i think over three thousand
- 12:28 um and yeah if every time any one of those broke we had to go and like manually submit
- 12:34 fixes then it doesn't really work so what we tend to do is we
- 12:38 we kind of lean on people's ability to care about stuff like one of the one of the things dangerous
- 12:45 yeah it works reasonably well actually because so i heard a terrible but sadly true uh relationship
- 12:53 um i was gonna say advice but it's definitely not advice i guess relationship anecdote which is that
- 12:59 the person who cares the least wins the relationship i like if you and your partner it's it's it's awful but
- 13:06 in this i'll segue into why it works in this case but so i guess in the anecdote it's almost stuff like
- 13:12 if both of you are like neither of you want to do the washing up the person who like gets bothered
- 13:19 first by the amount of washing up piled up by the sink or the smell or the animals living in the washing
- 13:24 up like that person will eventually cave and then do the washing up and then the other person like wins
- 13:30 and obviously that's not a recipe for a good marriage um but in this but it is for an open
- 13:36 source project apparently yes exactly no so so the the way that kind of ends up working with something
- 13:43 like homebrew is that um because we have so many people we rely more on others to kind of say you
- 13:50 know there's some bug in my sequel i mean if it's a really popular package like my sequel and it's broken
- 13:54 for like everyone and the fix is like relatively trivial for homebrew maintainers like say something
- 13:59 in the build system or whatever but relatively hard for like random people then yeah we'll jump
- 14:04 on it and fix it but say it's a relatively obscure package that doesn't get installed by a lot of
- 14:07 people and you and your company or whatever really really need this package then generally we'll be
- 14:13 like okay we'll give you help along the way to kind of fix this we'll point you to the right place
- 14:17 and what to do and give you the benefits of our experience but like you are the person if you care
- 14:22 about this package working and it's broken and it's like broken your workflow you need to be
- 14:26 like responsible for getting involved and actually trying to at least work on getting it fixed rather
- 14:33 than just like filing an issue and be like right broken you need to fix it now because again like that
- 14:38 that works if you're my boss and you're paying me money and it's like broken need to be fixed or
- 14:44 implication get a new job and i'm like okay yeah that's fine i like my job and i like money in a
- 14:49 house and things like that more than i like you know having to suffer through this crappy bug but
- 14:56 if that's like an open source project as i said it doesn't really scale to just be like oh okay yeah
- 15:01 no i'm gonna go off and altruistically help every single person because then i have like no one has any
- 15:06 time to actually work on things that are maybe more important and higher priority so i'm curious about
- 15:11 this because i was talking in i forget what episode it was but another episode around money and open
- 15:17 source i'm curious how what you think about that so i mean like so just at github for example right
- 15:25 i mean we rely on homebrew basically to to bootstrap computers and when you start a project
- 15:30 uh well we rely on the resource of homebrew to you know install the packages we need and everything else
- 15:36 like that and so and i know you do have hard costs i mean you i believe right yeah so i mean our funny
- 15:43 thing is we have again i try and run homebrew's finances relatively like my own personal finances
- 15:49 in the poor layer yeah exactly and i just spend all the money on cars yeah cars of beer yeah um that's
- 15:58 why it's called homebrew exactly like you're you're mainly just pure paying for my beer tab
- 16:03 but yeah no so i tend to try and basically try and emphasize fixed costs over like variable costs um
- 16:14 i i would rather pay like whatever a hundred bucks for something and then it's a one-off purchase rather
- 16:21 than like subscribe to something that's going to cost me like 10 bucks a month because the problem is homebrew
- 16:26 we the only money we've ever got basically has been either out of the pockets of maintainers or we ran
- 16:30 a kickstarter a couple years ago where we got i think uh fifteen thousand dollars or something
- 16:37 something in pounds i can't remember what it was in dollars um so yeah so basically since then we spent
- 16:42 like immediately basically three quarters of that money on mac minis because at the time we had no
- 16:47 hardware for ci so we we bought a bunch of mac minis and then we had like some money in the bank just
- 16:53 for stuff like vmware upgrades and stuff like that but our our monthly recurring revenue is zero so i'm
- 17:00 unwilling to sign up for anything which requires monthly recurring revenue of more than zero i almost
- 17:06 everything so that ends up being a massive pain and thankfully our size is big enough that we have a
- 17:14 a couple of nice sponsors and you know shout out to positive internet to one password to you see i've
- 17:21 got my own sponsors i'm on this wait a minute i've got got my own uh stop this man
- 17:27 yeah so we've got we've got a few people who basically i've just gone to them and be like hey
- 17:33 like can we use your stuff and they're like sure how much are you going to pay us and i'm like
- 17:37 nothing but we'll put something on our readme on on github uh and yeah and sometimes well more often
- 17:44 than not they go haha no uh but then yeah we we've got like the the stuff that we do have are kind of
- 17:50 fixed sorry our regular outgoing costs are basically paid for by those people and so that's something
- 17:58 that's not going to work forever like i i personally want to go on kind of a better fundraising drive
- 18:02 uh now that we've released kind of 1.0 and things are a bit more kind of stable um but yeah but
- 18:09 basically the money side of things is hard there's a lot of people talking and thinking about this stuff
- 18:13 right now but it it certainly doesn't solve itself and it's i think particularly hard if you're a
- 18:20 open source project that's used by a lot of places but you're not anyone's core infrastructure and you
- 18:25 don't have any of your maintainers who are like wanting to make it their full-time job like it like i've
- 18:31 worked on open source projects in the past where there's a kind of fairly natural solution to this
- 18:35 problem which is that one or more of the maintainers are like okay well i'll make my full-time or at
- 18:40 least part-time gig like doing consulting on homebrew and then like we can kind of the project can make
- 18:45 money through like building this kind of commercial ecosystem around it whereas with homebrew because
- 18:51 it's like a mac package manager and we are used by some pretty big companies and stuff like that but
- 18:56 it's kind of harder to extract revenue in that way and so yeah so it we just shoot ads down just
- 19:05 when i go brew install you know ruby or whatever just have it be like hey have you heard of casper
- 19:11 casper is the number one that sounds like a brain tree you know brain tree is the easiest way to
- 19:16 do billing on your website just boom i don't think anyone would mind no i'm sure people wouldn't at all
- 19:22 like and it would also start a whole new market in terminal based ads you would be you would be the
- 19:29 beginning oh man that's funny so you mentioned uh 1.0 uh tell me a little bit about it and why
- 19:37 why does it matter like why does i'm curious from an open source project perspective like why is 1.0
- 19:43 important to you yeah it's funny i can't remember what the mathematical term is but like that's where we
- 19:48 were getting with our version numbers where you know when you go from like 0.9 to 0.99 to 0.9999
- 19:54 you know and never quite and it feels like that's what we've been like with version numbers and that
- 19:59 in the past they've been fairly haphazard and we've just kind of bumped them fairly randomly to try and
- 20:04 be like okay yeah we've added some stuff that seems kind of important and it's not broken so
- 20:09 let's kind of bump the version number um so with 1.0 i guess i maybe started thinking about it
- 20:17 i'm not sure how long ago maybe like three to six months ago i just thought like okay well we've
- 20:21 been kind of doing this for a while and we've got we've pushed we wanted to push through a few kind
- 20:26 of relatively big architectural changes but also signify to people like okay we're pushing these
- 20:32 changes through we realize this may kind of break some of your stuff to be fair if you just run brew
- 20:37 install and stuff like that it's not going to break your stuff it's more like scripts maybe around the
- 20:41 kind of ecosystem so i kind of thought okay well what's the best way of doing that well one of them
- 20:47 is we kind of move to semantic versioning and we actually start trying to commit to having a more
- 20:54 stable base so i guess that the very early beginnings of that were we've kind of felt pain for quite a
- 21:00 while in that the package management and the kind of formulae what we call like the package definitions
- 21:06 we're always in the same repository so if you wanted like the latest version of mysql whatever
- 21:11 you unbrew update and you get an updated package manager and updated like package repository but
- 21:17 the problem is is if we break something in the package manager for you then like you need to
- 21:22 basically pick between into having the latest mysql and having a broken package manager or like having
- 21:28 a working package manager and like the latest mysql and to be fair like we didn't break it that often
- 21:33 enough for that to be a really massive problem but it's still like it's still annoying kind of having
- 21:39 those two things tied together so the first thing we did is we kind of split that into two repositories
- 21:45 like we've got like homebrew slash brew and homebrews like home that being the homebrew organization on
- 21:50 githubs and brew being the name of the repository and then like homebrew core which is like where all the
- 21:55 packages are so like that that kind of helped to be able to start doing these things in separate
- 22:03 repositories one of the big casualties of that unfortunately was we've like our star count dropped
- 22:08 down and really like oh no why even do open source exactly why why bother if you don't have the stars
- 22:16 so but you know it's been creeping up again so that's okay um but yeah so like that that was a
- 22:22 pretty big deal like being able to split them and then eventually kind of for 1.0 we now have like tags
- 22:28 and where when you run brew update and you're kind of a what we have like defined by code as being like a
- 22:34 normal user using our kind of secret metrics and then you get updated to kind of just the latest tag
- 22:41 for the package manager instead of like whatever the last commit was so we basically have like a subset
- 22:47 of people who are kind of on the rolling release like certainly all the homebrew maintainers and like
- 22:51 regular contributors to homebrew who are kind of getting like every change as it gets pushed out
- 22:56 but then now other people are on kind of a stable release path and then that's made it a lot easier
- 23:00 for us if we kind of introduce bugs or whatever that we catch them a lot quicker um and it stops
- 23:06 most of these bugs from kind of hitting people on who are on the tag releases so previously there
- 23:12 weren't uh release channels everything was just yeah mainline or whatever exactly everything was just
- 23:17 the master branch interesting all right well that makes sense then i mean it normally when we're
- 23:22 talking about web stuff here um everyone basically has a staging environment or something where that
- 23:28 they can give a give a go to before they bring the entire site down and so has it been working well
- 23:33 for you since you uh shipped yeah i think so i mean one of the toughest things obviously inevitably
- 23:38 the bugs when you want to release 1.0 and tag it and start updating people to tags at the same time
- 23:45 what are the most obvious bugs you're going to have to start with well there's going to be bugs with how you
- 23:49 update people to tags because that's like code that's completely untested before you like have the tag
- 23:54 commit so yeah so there was a few bugs around that and there's we've been kind of our our release
- 24:00 iterations have been kind of getting like i think we had a couple of release like a couple of point
- 24:04 releases in the first you know week or so and then now we're more about a week apart and we could
- 24:09 probably get further apart still um so yeah so i think it's been working pretty well for us it's been
- 24:15 it's been a nice change and i think it it just allows us to have you know to in some ways be a
- 24:20 little bit more haphazard on the master branch and a little bit more careful with how and when we're
- 24:25 doing tags which is kind of nice well it's it's how it kind of should be really
- 24:29 so all right so you have your 1.0 this project's been going around for a while now
- 24:37 what's like what is the hardest part of this i mean it's like for example some things that i've seen
- 24:44 over the over the the years of watching uh this project and recently you working uh on it like
- 24:52 getting analytics in was like a big thing for the community like there's got to be a bunch of times
- 24:58 where you all do something and the community just kind of explodes either rightfully so or not but
- 25:03 is that one of the most like taxing difficult parts of this project or or what is yeah i think so
- 25:10 i think it's you know we have a user base probably more well no i i guess to be fair most large widely
- 25:17 used open source projects have this um not unusual problem and i i mean to be honest most software where
- 25:23 if you're if you're doing a good job you don't hear from the vast majority of your users the vast
- 25:28 majority of the time so if even like 0.1 of your users decide that they're really furious about
- 25:35 something then all of a sudden it seems like the sky is falling and everyone hates you and everyone
- 25:40 thinks you're terrible and stuff like that so that that's kind of a hard thing to do you have to have
- 25:46 a certain amount of a thick skin at least at the moment i think hopefully we will look back at open
- 25:51 source and kind of you know 10 years if not less than that and say that that's more of a solved
- 25:57 problem that we don't we figured out a way to just stop people just like exploding about things
- 26:04 um but i think i think that's the thing is that you need to the analytics was a good example i think you
- 26:11 were like there firsthand and i kind of showed you some of the conversation well i mean because the
- 26:17 funny thing the analytics was on it uh so if people don't know if people don't know what we're talking
- 26:23 about can you give a quick uh yeah sure so in i guess march or so uh we added analytics that again
- 26:30 was something we've been kind of talking about for a little while um and it's basically came down to
- 26:36 being we had fairly big problems with prioritization so again as i mentioned earlier you have like almost
- 26:42 an infinite amount of time you can spend on homebrew kind of work on packages and i i mentioned earlier
- 26:46 like you know picking an important package and not important package and stuff like that but if you
- 26:51 have no installation numbers which we didn't because it's all on on your local desk then how do you
- 26:58 know to prioritize say my sql and postgres break on the same day how do i know which has more users and
- 27:04 which i should prioritize i mean well we both work with github right so this is we're legally obligated
- 27:12 to answer my sql exactly um but yeah so like that that's a slightly silly example but particularly
- 27:20 when it's slightly more niche software it's kind of it's really hard to get a sense of how many people
- 27:24 use this like there's a lot of software my sql open ssl lib xml that you kind of see on everyone's
- 27:30 machines and you know like okay that's really widely used but then there's a bunch of other stuff that
- 27:35 particularly you know if you're in the ruby community or the node community or whatever like i
- 27:39 i'm in the ruby community mainly and i'm mainly living in the ruby ecosystem there's not a lot of
- 27:44 kind of node.js stuff that goes on at github so it would be very easy for me to draw the conclusion
- 27:49 that some of this some of the kind of related node packages are not that valuable just because i don't
- 27:54 see people using that whereas i do see people using the ruby stuff so basically we wanted a more
- 27:59 objective measure than just oh i've you know this feels popular this feels not or equally like
- 28:04 more people complain about this less people complain about that so we we introduced analytics and there
- 28:10 are as anonymized as we can possibly make them you know there's a uuid which is generated just randomly
- 28:17 on your machine kind of just so we can get like user accounts um but yeah basically we we kind of
- 28:23 shipped this and there was some you know other maintainers were a little bit more realistic that
- 28:30 there were going to be a bit more fallout than i was i was like you know nah it's going to be fine
- 28:35 and then we shipped it and it blew up on hacker news while i was on a transatlantic flight uh like
- 28:43 which was helpful um and yeah so i you know basically as kind of happens a few times and stuff like that
- 28:51 and homebrew i you know i was the main driver of the the change so i i kind of you know basically
- 28:57 pretty much got back into my hotel room and then like binge worked on a bunch of features and stuff
- 29:02 like that to try and make it more amenable to people and more obvious with what was going on and
- 29:06 all this type of thing um but yeah and that's mostly died down now like i i mean we still get periodic
- 29:12 kind of haters around this stuff but i think the thing is is that most people understand
- 29:18 who have used analytics through you know their workplace that it's really really useful and it
- 29:23 tells you a lot about your users and it helps you to make the software better you know we're not we're
- 29:29 not as some emailers have said trying to spy on you like the nsa like they already have that taken
- 29:35 care of exactly no exactly like and we don't you know even if we wanted to sell all the data like i
- 29:44 we've designed it in such a way that it would be useless and we couldn't sell it because you can't
- 29:48 take anything from it or know anything about the individual other than they installed these three
- 29:52 packages so like it's is that kyle yeah i i well i mean the one exception is kyle specifically we have
- 30:02 like the only the only installer of this really obscure pokemon library yeah kyle is that you
- 30:09 yeah pokemon go cheats for for free oh man stories to tell my friends stories to tell
- 30:15 so yeah i mean is that it is it is it just a community that like you know i mean it's so i i
- 30:22 would ask you like why do you keep working on it but that kind of seems like mildly self-answering
- 30:27 and so i i kind of want to poke it just like you know oh no that's it's a valid question because
- 30:31 i i do ask myself that periodically i think part of it is so i'm the you know there's been various
- 30:38 other maintainers including the creator max who've kind of come and gone to homebrew over the years
- 30:42 and i'm the person who's been working on the longest and i do ask myself like why that is
- 30:47 um and i think part of it is just i'm an incredibly stubborn person and particularly when i can confirm
- 30:54 yeah exactly kyle knows um yeah and particularly around like it's funny the times i would be the
- 31:00 most tempted to quit around stuff like you know when the analytics things like that blew up then
- 31:05 like the stubborn part of me is like no i will not let them win like i will not let them i'm gonna
- 31:11 analytic harder yeah exactly um but yeah i think that's part of it and part of it is just you know it's
- 31:18 really widely used software um it's a thing that solves a bunch of problems for a bunch of people
- 31:24 and makes their lives easier and it's something that i have a tremendous amount of domain knowledge
- 31:30 over the years which is just really satisfying you know it's my day job at github is satisfying but
- 31:36 the nature of github and the business that it's in is that we're having to solve a bunch of problems in
- 31:41 some cases that you know certainly we as individuals have never solved before and sometimes solve certain
- 31:46 problems that no one's tried to solve before and because of homebrew we have to solve all these
- 31:51 problems exactly like so i i need to make keep homer going to keep my co-workers at github working hard
- 31:57 employed yeah yeah um so yeah and i think that's the thing is that it's really satisfying with homebrew
- 32:04 with the number of users we have and with the kind of relatively small team we have and like
- 32:11 the kind of influence i have on the project that i can go in and in like 15 20 minutes make something
- 32:15 which like saves a lot of people a lot of time and that that level of kind of effort to reward is i
- 32:23 think what's most satisfying when you've worked on something this long is that it is just really cool
- 32:28 to have someone submit an issue and have them be like oh this seems like a long shot and a lot of
- 32:33 work or whatever and you can look at it and be like oh that's actually pretty easy and bang it out in
- 32:37 like half an hour and then like have that on the user's machine in like under a day and then like
- 32:44 just the the kind of joy that results from people when you're able to do stuff like that is just really
- 32:48 satisfying was homebrew your first like big open source project that you were a part of
- 32:54 uh it's it's certainly been the it's been the first one i've been a really like major driver in i guess
- 33:02 like i previously worked on kde in a past life and that's a a linux desktop environment and like all
- 33:10 the kind of gooey look and feel stuff and the future yeah exactly that it's you know 2017 this year
- 33:18 the year of linux on the desktop um and uh yeah no i worked on that for a while like i used to be a
- 33:24 big hardcore uh desktop linux guy um in fact funnily enough yesterday i i've got my email going back
- 33:29 i think about 11 years and i i thought yesterday would be fun to read through some of my oldest emails
- 33:35 and then some of them were uh bug reports i'd filed to like a linux package manager
- 33:40 like 11 years ago and i was like oh this is going to be interesting reading because i will see like
- 33:46 how how annoyed would i be at like me as a user now and thankfully like i was great so everything was
- 33:53 fine um but yeah i i was kind of involved with katie kind of involved with a couple of like random
- 33:59 open source projects here and there one of the nice things about doing stuff like homebrew and having
- 34:04 a suitably lower attention span is that i've kind of contributed like a couple of
- 34:09 to commit to like loads of projects like maybe kind of 20 or 30 different projects over the years
- 34:14 sometimes you know randomly just fixing readmes and sometimes you know just fixing little little
- 34:20 things that have bothered me and stuff like that and i think that's one of the reasons why i've been
- 34:25 you know before i worked at github such a big fan of github because you know i worked on kde back in
- 34:31 the day when what you would do is you had a mailing list and it was all in subversion so what you would
- 34:36 do is you'd make your commit locally and you couldn't commit it obviously because this is subversion
- 34:42 and i don't have access to the subversion repository it's just read only so i make my commit i do my work
- 34:47 locally i run svndiff and then i email that to a mailing list and then by the time someone else is like
- 34:52 oh yeah like there's a merge conflict now then i need to then go and like svn up and then like fix
- 34:59 my commit locally and send that again and hope that it gets merged by someone else before there's
- 35:04 another merge conflict and yeah and just that whole experience like it was kind of state of the art at
- 35:09 the time but like in comparison now it's just so unbelievably painful um and the other big thing
- 35:15 was that every single project back then had a slightly different way of doing things it might
- 35:20 be a mailing list on this one it might be a bug tracker on that one and it might be cvs or subversion
- 35:25 or power force or whatever and it's yeah it's it's so great now that we're we have me i think bizarrely
- 35:34 there's a lot of things people would credit github for but for me the biggest thing i would credit them
- 35:38 for is um it's for standardizing the process of submitting a change to an open source project i
- 35:45 think that's what has made it much much easier for a random person to submit to open source when like
- 35:52 10 years ago they would have given up at the first or second or fifth hurdle and so then this begs the
- 36:00 final question if i was a schmo and i was interested in helping out with homebrew or adding my package
- 36:07 to homebrew what's the easiest way to to do that you see this this shows your lack of preparation kyle
- 36:14 because actually homebrew is at several steps ahead of you here because in our readme we actually have
- 36:20 that it's basically like a thing you can do straight away having commands that you already have installed
- 36:26 on your machine and stuff like that so we have a thing called brew audit and that's basically our
- 36:30 kind of style checker thing it's a little bit like rubocop and we're trying to we're going to actually
- 36:35 try and move some of those checks to be a rubocop plugin at some point that's on my to-do list
- 36:40 um but yeah basically you can run this and it goes and runs through all the kind of stuff you've got
- 36:45 installed and stuff you don't have installed and kind of checks for little style violations
- 36:50 and there's always like a few because we're whenever we add a new rule we we don't go through
- 36:54 and like fix every occurrence because it's an almost like a nice entry-level kind of task for people and also
- 37:00 like it's like not always the most interesting thing to do uh so but it's called crowdsourcing
- 37:09 exactly so we we crowdsource our style violations uh getting fixed but no i and i found like that's a
- 37:14 really good way to kind of get used to the homebrew contribution process because often these things
- 37:19 you can go and make like a one-line change sometimes like a you know a couple of characters change and then
- 37:24 submit that up and then you can see kind of how our process works and then when you've done that a couple of
- 37:28 times you can go and get used to the flow and then kind of maybe start making some more advanced changes
- 37:34 and things like that and another really common thing people do is just submitting updates to
- 37:39 packages we have again another command called i think brew bump formula pr which is like okay
- 37:44 i've got my sql 5.7.0 and 5.7.2 got released um so i'm going to submit a pull request that just like
- 37:52 changes the version assuming everything else stays the same so that is basically a little tool that
- 37:57 lets you kind of do that and actually submits the pull request for you although i would say i need
- 38:01 to add the caveat that if that's my sql then probably 10 people have already submitted that pull request
- 38:06 so like is it like uh is it like uh you know an internet forum thing where everyone's like i'm
- 38:11 the first one i did it first post yeah yeah we do have a little bit of that um in that you know it's
- 38:18 i think people well and it's good i mean i i don't actually begrudge that because often if it's something
- 38:23 like my sql you know several people notice kind of around the same time and they check for prs at the
- 38:28 same time and submit prs at the same time and you know it's like one button press to close that
- 38:33 and i would far rather we got duplicates than people didn't submit at all um but yeah but i think there
- 38:38 is a certain amount of satisfaction in in you know like knowing that's the cool thing about a project
- 38:43 like homebrew right we've had i think over 6 000 different contributors over the years like we used
- 38:48 to be i'm not sure we are anymore but we used to be kind of up there as kind of one of the most um
- 38:53 contributed to projects and it's kind of nice knowing that like oh okay like everyone got my sql
- 38:58 5.7.1 like due to me like i submitted that upgrade and you know there was some stuff under the hood
- 39:03 that kind of all happened but that happened as a result of my work uh so yeah like it's i think it's
- 39:09 a cool project to kind of contribute to obviously i'm biased but yeah i would recommend getting involved
- 39:14 and and you can always as well if you if you hit anything that's confusing you can always reach out to
- 39:19 me personally and i try and always help people who are kind of struggling with this stuff and on like
- 39:24 twitter or email or whatever i'm sure kyle will link that awesome yeah so how do people get in
- 39:29 touch with you how do they follow along if they were like wow this is this mike mcquade he's pretty
- 39:34 he's pretty cool i want to i want to hear more from him i laugh because i don't know if that's
- 39:41 what happens but if it were if it were true uh yeah no so i i guess i'm on twitter at mike mcquade
- 39:49 um no one will know how to spell that but it will be linked somewhere i will link it yeah yeah you will
- 39:54 link it and make sure to get the the q capitalized and that's a very important thing for me in my life
- 40:00 and it's funny that's actually as an aside that's my way of trolling like not necessarily even
- 40:07 programmers but their managers or whatever it's like literally every single time i receive a letter that
- 40:14 has mike mcquade and like it's like the q is lowercase i i know being a programmer you know i
- 40:21 know almost invariably that's probably because their record stores like surnames as all in lowercase or
- 40:28 whatever or all uppercase and then just like run some capitalization thing afterwards but i will
- 40:33 always complain like i even though i know like 99.9 of the time that complaint is utterly futile and
- 40:40 pointless i just do it anyway because that's the type of individual i am
- 40:44 so if you want more of that i will link to it yeah if you want that that level of
- 40:51 pointless pedantry in your life then yeah then you can follow me on twitter and i will not do that and
- 40:58 just occasionally post interesting links oh that's that's awesome okay well mike you've made it to the
- 41:05 end of uh round one and i didn't i really don't think you bring or you didn't bring your a game
- 41:09 of uh your usual sass for me yeah well i mean i i try the thing is with the sass is you know
- 41:17 kyle's a very delicate individual and i constantly worry that me having to constantly correct his
- 41:25 spelling and grammar yeah at some point push him over the edge and you know and at that point you know
- 41:32 i'm just i'm concerned about github's future graph ql interface if that happens and you know if that
- 41:37 means that on a day-to-day basis i need to you know read messages and slack that look like they're
- 41:43 written by a a five-year-old then so be it that's that's the sacrifice that i i bear well awesome i was
- 41:52 worried when sean left that no one was going to give me a hard time but i i have no doubt that i'll be able to
- 41:56 find enough co-hosts to come on for a week and just keep me honest slap you around the face with a fish
- 42:04 or something exactly oh man no no more fish we're good all right thanks mike
- 42:19 one down one episode in the can uh very excited uh that was great that was a great conversation with
- 42:26 mike uh if you don't use homebrew yet definitely give it a shot if you're new to software development
- 42:31 you might not have a reason quite yet to use it but go to go google homebrew and you'll see it right
- 42:36 there you can install packages way easier and if you install all of your packages through homebrew it's a
- 42:41 a lot easier to get everything set up um thanks again to mike for joining me on the podcast this
- 42:50 week uh we'll see you all next week with another episode of the ruby on rails podcast you can find
- 42:56 me on twitter and github at k daigle until next week see ya
- 43:11 you