Homebrew with Mike McQuaid

Interviewed by The Developers' Bakery

Into the most popular package manager for macOS with Homebrew and Mike McQuaid.

Show transcript
  • 0:00 I don't swear too much but like is this podcast no swearing some swearing like would you I can
  • 0:06 keep it completely clean if you want to I've got kids so I'm good at practicing that okay I will see
  • 0:12 hi everyone and welcome to the developers bakery a podcast about open source projects
  • 0:28 tools and libraries for software developers my name is Nicola Corti and I'll be your host for the show
  • 0:34 make sure you subscribe to the podcast on either spotify apple podcast google podcast
  • 0:40 or directly on the website the bakery.dev thank you for listening and enjoy the show
  • 0:57 hi everyone and welcome to another episode of the developers bakery today I have another amazing
  • 1:04 guest on stage so please welcome Mike McQuaid homebrew project leader hi thanks for having me
  • 1:13 everyone and thanks for having me Nicola thank you for being on show with us Mike I'm I'm sure a lot
  • 1:20 of people in the audience use this software you maintain but before we deep dive into that I want
  • 1:27 to give you a little bit of time to introduce yourself so what's your background where you base
  • 1:31 and what do you do sure so other than being an open source maintainer I am a software engineer for a
  • 1:39 living so I live in Edinburgh in Scotland I've relatively recently finished a decade where I worked
  • 1:45 at GitHub and before that I've been at kind of various other companies and startups and things like that
  • 1:49 I'm had a fairly boring traditional uh introduction into software and that I did a computer science and
  • 1:55 business degree back in graduated in like 2007 and since then I've been working in the industry ever
  • 2:01 since and yeah nowadays I'm a CTO although we don't have any other employees yet so I'm also the
  • 2:06 primary code monkey at a startup called raise.dev with two former co-workers from GitHub
  • 2:12 awesome uh but today we're not here to talk about raise.dev but talk about homebrew so now I want to give
  • 2:21 you the honor to introduce this project to the audience which I'm sure folks already know but for the
  • 2:26 people in the audience who might not know it now is the time to to know about it sure so homebrew I guess
  • 2:32 my my simplest one-line summary for kind of non-technical people particularly is that homebrew
  • 2:38 is kind of like a app store for your terminal so if you want to install particularly like open source
  • 2:44 apps on your mac particularly those that run in your terminal but we also allow you to support
  • 2:49 and install things like google chrome and things through casks we can come up to them later then
  • 2:54 homebrew is basically the best way of installing any software really on your mac awesome so I I think
  • 3:01 it's fair to say that homebrew is probably one of the most popular and successful projects on GitHub
  • 3:06 and I'm actually curious to know if you can talk a little bit about the history of this project like
  • 3:12 how did it became so popular and and famous sure and I feel like I need to add to my existing uh
  • 3:20 description of homebrew as well and I forgot to mention that homebrew does and has for quite a while
  • 3:25 now run on linux as well so it's our package manager for mac and linux the use case on linux is maybe a
  • 3:30 little bit different but I don't want to let my penguin brothers and sisters miss out on uh being
  • 3:36 included in part of the the story but let's go back in time to talk about the history of homebrew so
  • 3:41 homebrew started in 2009 it was created by a guy called max howell who basically was just I think
  • 3:48 using other package management options on his mac wasn't really happy with them and thought he could
  • 3:53 make something better so one day after having some beer he went home and wrote a kind of description
  • 4:00 of what the package manager that he thought should be created would look like and because he'd been
  • 4:06 consuming beer earlier that evening it had a beer theme and you can see that remains to this day with
  • 4:12 our kind of icons and naming and various other bits and pieces like that
  • 4:15 so he made this package manager that was kind of quite different to the approaches that others have
  • 4:23 had in the past it's one of the big things github had been out for a few years and he decided he was
  • 4:29 kind of going to go all in on github so homebrew was built in ruby and because the ruby community had
  • 4:35 been an early adopter of github and max himself liked using ruby and he built it in such a way that
  • 4:42 the expectation was that it wasn't going to be that max would build all of homebrew and maintain
  • 4:47 everything that's in homebrew or equally that he was going to appoint all these kind of maintainers
  • 4:52 and be like you maintain this you maintain that but instead he would kind of crowdsource kind of
  • 4:56 the community on github to get more and more people involved and to get a sense of how early this was
  • 5:02 in kind of github's history when homebrew was first created homebrew didn't actually sorry github didn't
  • 5:06 even have pull requests at this time back then it would be you create an issue with a link to a
  • 5:11 commit in your fork and then max would pull it into homebrew itself so fast forward a little while
  • 5:17 homebrew is kind of picking up a bit of adoption and i had played with again some package managers on
  • 5:22 mac i was a relatively early adopter to mac at this point i'd come from the desktop linux land where i'd
  • 5:29 been doing some open source stuff over there and was wooed over to uh apple land by having to do a
  • 5:36 bunch of cross-platform dev and i kind of had tried to create a project that was sort of hacked an
  • 5:42 existing package manager into looking a bit more like homebrew and then i came across homebrew and i
  • 5:46 thought this is a great idea this is a good fit and i started to kind of submit some changes and get some
  • 5:51 commits in there that kind of made my life a little bit easier and then relatively quickly i was asked to
  • 5:56 be a maintainer on homebrew i think i was the third one who kind of joined and maybe about six months
  • 6:02 after homebrew was created in 2009 so from 2009 onwards i've been maintaining homebrew and from
  • 6:11 i can't remember what year onwards i've been the project leader and i guess since homebrew was created
  • 6:17 i've been fairly regularly and actively involved with both the code side of homebrew and the community
  • 6:23 side and also kind of i guess almost i think of myself as kind of the honorary unnamed project
  • 6:30 a product manager for homebrew where i'm trying to figure out like what features make sense to
  • 6:35 have and not have and what defaults are better for more of our users and all this type of stuff
  • 6:40 so that's really glorious and actually i want to thank you like as part of the broader open source
  • 6:47 community the the software you're maintaining is like key to the daily workflow of a lot of people
  • 6:53 and i'm actually wondering like like since 2009 that's that's really impressive uh have you ever
  • 7:00 felt like uh i'm close to burnout or like i don't want to deal with homebrew anymore like i had enough
  • 7:07 of it i'm curious to to know how you handle this yeah i've definitely had moments where i felt that you
  • 7:15 maybe i might step away from homebrew um but in most of those cases that has had a resolution in a
  • 7:22 different way so it's meant that i have you know for example done stuff like remove the homebrew slack
  • 7:29 from my phone right don't get homebrew emails sent to my personal email account i have a dedicated email
  • 7:34 account just for homebrew related stuff and various things like this to kind of enforce boundaries
  • 7:38 and that's always helped and also over the years there's been various kind of problematic members of
  • 7:43 homebrew's maintainers and also homebrew's kind of community and i think also like managing to
  • 7:50 resolve conflicts with those people and sometimes those people stepping away from homebrew has made
  • 7:56 things a lot better um but i think for me the biggest thing it comes down to there's a thing i guess
  • 8:01 we put it in the show notes i wrote a post a few years ago that lots of non-maintainers hate and
  • 8:06 lots of maintainers still regularly tell me that they love uh called why open source maintainers are
  • 8:11 you nothing that basically goes into the licensing terms about you know legally pretty much all open
  • 8:19 source software states in the license that you know even if i were to deliberately which to be very
  • 8:24 clear i have not will not etc even though to deliberately break homebrew such that it deliberately
  • 8:31 destroys data on your machine the license says tough luck right the license disclaims me of all
  • 8:37 responsibility and warranties and the license says look i'm not even saying this this code works right
  • 8:42 so use this completely your own risk right and obviously in the open source community there's a little
  • 8:46 bit more of a kind of expectation of you know slightly higher expectations than just deliberately breaking
  • 8:53 people's things but i guess personally i've adopted that and i think that's one of the things that's
  • 8:58 helped me stick around for so long is that if someone is rude to me or unkind to me or other maintainers
  • 9:05 if they make a legitimate feature request or a legitimate bug report and they're being
  • 9:11 really unkind about it and i guess we would say in scotland an ar**hole you can believe that if you'd like
  • 9:18 then my response is i close the issue and i ignore it and i walk away because i don't spend my time
  • 9:24 pandering to those types of peoples and the other thing that is nice about this stuff is that over time
  • 9:30 you start to get better and better at seeing the patterns for when things will go well and when
  • 9:35 things will not go well in general i guess my advice i would give to the wider community and perhaps even
  • 9:40 outside of software perhaps in your personal life is if someone does something that is hurtful to you
  • 9:46 and you express to them this is hurtful please do not do that again if that person or ask them for an
  • 9:54 apology if that person is unwilling to apologize that's a red flag if that person then gets really
  • 10:00 mad and starts being even more rude and unkind then that's even more of a red flag and equally if
  • 10:07 that person says look i'm really sorry i didn't mean to do that i i it was not at all my intent to
  • 10:11 upset you or whatever like please accept my apology then that's a good sign and generally the people who
  • 10:18 will when put in that situation double down on bad behavior it's not trying it's not worth trying to
  • 10:24 fix those people or have a rational conversation with people my attitude on github as it is on twitter
  • 10:30 mastodon personal email whatever is just block ignore move on life is too short the world is too short
  • 10:36 and and yeah whereas people i have good friends family members homebrew maintainers and myself many
  • 10:45 times have done stuff where i've upset someone else and we've had an apology we've had a good
  • 10:50 conversation and we move on right and i think that's the flip side of this stuff as well that's that's
  • 10:56 really inspiring mike thanks thanks for sharing i actually now want to deep dive a little bit on the on the
  • 11:02 technical side like discovering how uh homebrew works under the hood especially when you do brew install
  • 11:08 command which i'm sure a lot of people do daily what is actually happening under the hood how does
  • 11:14 a formula works and so on who better than you can can tell us about it sure well happy to help and if i
  • 11:20 go too deep then feel free to um pull me out of the the hole that i've dug myself into totally so i guess
  • 11:28 at a high level homebrew is written in ruby so if you're writing brew running brew commands like the
  • 11:34 first thing that happens is like well i say we're written in ruby we're in a sort of weird combination
  • 11:38 of ruby and bash so the actual brew command itself when you run that that's running some bash to go and
  • 11:45 fiddle with various things in your environment bash is good in that it's ubiquitous we make it a hard
  • 11:51 requirement basically for anywhere that can or will run homebrew it's available on all macs and on the
  • 11:57 vast vast majority of linux machines so we use that to do things like if your machine doesn't have a
  • 12:03 ruby then it will set up download and install ruby and all that type of thing that we provide
  • 12:07 so almost from there you we have a repository it's homebrew slash brew in the homebrew github
  • 12:15 organization the brew repository that's kind of the package manager itself so that goes and then
  • 12:20 parses what you've requested figures out what the come up various commands are and i guess the most
  • 12:24 common command that people would run would be brew install when you would want to install something
  • 12:28 new so at that point it figures out okay like what you want to install what are the dependencies
  • 12:32 everything like that what state is your system in make sure everything is in a good enough state that
  • 12:37 we expect things to work rather than immediately blow up do you have all the dependencies you need like
  • 12:42 if the formula needs x code itself so i guess i'll take a brief side tour into the word formula so
  • 12:50 that's again the kind of beer metaphor if you think of a formula maybe for the description for a type of
  • 12:55 beer like we use it as a package description so originally when homebrew was first created a formula
  • 13:01 just were the steps that your machine would run to build this from source so it would download the
  • 13:06 source code from say wget to website build it all install it all stick it there but i guess a few
  • 13:12 years into the existence of homebrew we wanted something like we wanted binary packages basically
  • 13:17 so a way that you could have that stuff pre-compiled so not everyone's machine is having to do the same
  • 13:22 work we call those bottles that was something i created in again i can't remember the year now
  • 13:26 um and those are basically used most of the time for most supported configurations
  • 13:31 because they're much faster they're much more reliable so
  • 13:35 if you run brew install
  • 13:37 it will go and say okay so what is the package that we're installing like what are the prerequisites
  • 13:43 for this package dependencies we would call them we install the dependencies first
  • 13:47 we fetch them we download them fetch and download the package we want to install
  • 13:50 and then we basically like churn through fetch them install them install the dependencies
  • 13:55 install the package itself print out the various messages of what we're doing along the way
  • 14:00 clean things up as we may need to do or whatever and then just output the various messages to the user
  • 14:07 and at the end of this point you know we may have gone to the network and github for updates
  • 14:13 or the software itself or the binary packages and all this type of stuff
  • 14:17 and then when it's all concluded you should have a package on your machine that is installed and working
  • 14:22 now i guess to take a very brief side tangent as well like a thing that often annoys people with homebrew
  • 14:28 is they say well i just ran brew install and it upgraded all this other stuff and it installed all
  • 14:34 this other stuff that i didn't want it to this is really annoying why didn't do that homebrew didn't
  • 14:38 used to do that but the alternative was there's cases where to give you a little example if a formula
  • 14:45 depends on another formula that is a newer version then we have a choice there that either we upgrade
  • 14:52 that formula once we've done that which we have to do to install the package that you've asked us to
  • 14:57 if we just upgrade that and do nothing else we then break everything else that depends on that
  • 15:02 thing so what we have to then do is upgrade everything else that depends on it as well
  • 15:06 which is i understand why that can be irritating and confusing for people but i guess my personal
  • 15:11 view on software is that it's better that at least by default or like a lot of the almost all the
  • 15:17 annoying behavior in homebrew is customizable so check homebrews uh it run man brew to see if you can
  • 15:24 fiddle with your settings before complaining to us about them but yeah so in my opinion the defaults
  • 15:30 should just do the right thing without requiring user intervention and it should not break things
  • 15:36 and should be relatively conservative in that if we're like it's 50 50 whether if we upgrade this
  • 15:42 whether it's necessary to kind of stop things being broken or not we would rather upgrade something
  • 15:48 unnecessarily which then makes things less likely to break than the other way around and and i guess
  • 15:56 as a final note like with homebrew as a package manager some people may be familiar with these terms
  • 16:00 and not homebrew is what we would call a rolling release package manager as opposed to something
  • 16:04 like debian which is i guess a stable or not rolling release package manager what that means
  • 16:09 is that as soon as we have the newest version homebrew that works within everything else with
  • 16:13 homebrew we will upgrade that software if the upstream package go wget whoever says this software is
  • 16:21 stable and ready to go then we will ship it in homebrew and that does sometimes mean that if you're
  • 16:26 relying on that being always stable at all times things may break so similarly you can disable homebrew
  • 16:32 upgrading things you can just not upgrade things in homebrew you can disable auto updates all these
  • 16:37 type of things if you want to do that you start to tread a little bit off the beaten path if you do that
  • 16:42 or alternatively if you're say on linux if you need something that is just really really stable and
  • 16:49 things don't upgrade beneath you at the time stuff like debian is a much better fit for you than homebrew
  • 16:53 totally i actually have to mention that personally i've been using homebrew for so long and i haven't
  • 16:58 had so many stability issues also with this auto upgrade feature and i'm quite happy with it one thing
  • 17:04 that you haven't that you actually briefly super shortly mentioned in the beginning is about casks
  • 17:10 and i have a lot of friends and colleagues which don't know about it so uh maybe you can also briefly
  • 17:16 touch on that sure so casks are interesting because again they kind of like our linux support they started
  • 17:23 off as like a little side project that had sort of like relationships with homebrew but was a very
  • 17:28 separate project was not included in homebrew's installation by default and we had a google
  • 17:33 summer code student uh anastasia a few years ago who basically kind of brought a lot of casks into
  • 17:39 homebrew itself and helped kind of the beginnings of kind of unifying these two projects but essentially
  • 17:44 the difference between a formula and a cask a formula is something where there isn't software upstream
  • 17:50 and say something like wget and we take the source code for that we build it ourselves in homebrew
  • 17:57 we build binary packages ourselves and we upload those obviously if something is open source we
  • 18:03 should always be able to get hold of the source code and we should always be able to do that
  • 18:05 so the homebrew the main repository for formula we call homebrew core that is basically all the
  • 18:11 stuff everything is there has to be open source everything there has to be built by us
  • 18:15 in comparison our casks live in a repository called homebrew cask so that that can include some open
  • 18:23 source software but the difference is we don't build the binaries for any of those those are built by the
  • 18:27 upstream projects so you might have something like uh just looking on my task bar to see if i can find
  • 18:33 a good example so i guess vs code would maybe be an example or or i think spotify files chromium or i
  • 18:41 guess i'm thinking for open source examples to begin with like there's various things like that where
  • 18:45 you could build them for source and you could make a formula from those but generally the upstream
  • 18:52 project does a better job of that and they publish binaries for mac anyway so it makes more sense to
  • 18:57 rely on their stuff and i guess there's also a slight you know there's some blurred lines in
  • 19:02 the middle here but also generally a formula is better when it is something like a server or cli application
  • 19:08 or a library or whatever and generally a cask is better when it's something like a
  • 19:12 a gui application right again the examples like vs code spotify chrome whatever these are all things you can
  • 19:19 install through homebrew cask that are again in some cases possible that someone can make a formula but
  • 19:26 generally it's a pain and people don't want to do that so we kind of provide these different
  • 19:32 mechanisms for doing things again perhaps the difference with casks is that basically all of
  • 19:37 those things those installers are things that you could just download install yourself manually but
  • 19:43 if you're like me and you like automating everything whenever possible it's pretty nice to be able to do
  • 19:48 brew install google chrome rather than having to like go to the chrome website download a thing click
  • 19:55 a thing down next next next blah blah blah all this type of stuff it's nice to just have an automatic
  • 20:00 way of doing that and i guess to step one level higher we also have a project called brew bundle
  • 20:05 which is if any of you are familiar in the ruby ecosystem of something like a brew file
  • 20:09 i'm not very adept in various other language specific packaging ecosystems but effectively a way of
  • 20:18 installing the dependencies for your project this kind of looks a little bit like that and you can also use
  • 20:23 it as i do when you change your job you might get a new laptop or whatever and you want to install
  • 20:28 everything if you have all of your dependencies that are installed from homebrew and homebrew cask and
  • 20:36 you can also pull stuff from the mac app store in there as well then you can basically just have
  • 20:40 it on a new machine and go have it go chug chug chug chug chug install the software and then before
  • 20:44 you know it you're up where you used to be and as a brief personal plug i also have a little very
  • 20:49 minimal open source project called strap which is basically the only thing i've been able to make
  • 20:54 by myself which has got any traction which effectively does that so it's on a new mac
  • 20:58 it basically sets up pulls down your dot files from github if there's a brew file in there
  • 21:02 installs all that stuff to basically just make the process of setting up strapping bootstrapping
  • 21:07 a new mac laptop much quicker and easier and stuff so if that's of interest to you and if you like me
  • 21:13 like spending absurd amounts of time automating things that you will have to do every two to four
  • 21:18 years then you too could waste your time and do this that's that's awesome i thought i was smart
  • 21:23 because i was just like extracting the the list of brew cask that i've installed when
  • 21:28 i was changing computer i was not aware of the of the brew bundle feature so now i need to i need to look
  • 21:33 into it now actually want to jump on you mentioned the concept of bottles so you have pre-built with
  • 21:41 such a big ecosystem i'm wondering like where are they stored like it should be a lot of data right and a
  • 21:48 lot of traffic specifically so can you please tell us where the files live and what are the complexities of
  • 21:55 handling those sure so the first place they ever lived was sourceforge because they would give us
  • 21:59 lots of free bandwidth but they had lots of down time and then there was some kind of potential spyware
  • 22:05 allegations and issues and things like that so we moved away from sourceforge to another house called
  • 22:11 bin tray which was hosted by j frog who kind of make artifactory and then they sunset that a couple years ago
  • 22:18 so at relatively short notice we had to sort of scramble to find a replacement and we evaluated a
  • 22:23 few options but then we decided in the end to use github packages and partly because i was the person
  • 22:29 implementing it and i thought that that was the best solution and partly because we had kind of at the
  • 22:34 time with me working at github internal access to be able to like make sure that various features on
  • 22:40 the roadmap that would have been useful to us could get met so github packages is basically a docker
  • 22:46 registry essentially but there's a thing called i think it's like oci open container image or something
  • 22:53 that basically lets you just chuck arbitrary tarballs into github packages and other stores like that so
  • 22:59 effectively we do that we have a way that we um binary packages bottles are basically just tarballs
  • 23:05 anyway so we chucked our tarballs into github packages and then we download them from there
  • 23:10 along with like a manifest file and stuff like that and yeah there is a lot of data in there
  • 23:15 i can't remember what it was when we did the migration but certainly in the order of um
  • 23:19 i think we've got terabytes of packages and then on a year we do probably petabytes of downloads so
  • 23:28 that's impressive and with so much data i'm actually i'm actually curious from what you're
  • 23:33 saying on like how your repository is structured i feel there is a lot of scrutiny on what goes inside
  • 23:40 the registry uh but i'm still curious like how do you protect yourselves against malicious actors
  • 23:47 people that wants to add let's say instead of having a open jdk with the n they try to submit a
  • 23:54 open with the m jdk so it's like someone typos that and download some malicious package yep
  • 23:59 so we have a very different trust model to say npm pi pi ruby gems and partly because the system
  • 24:08 software partly that's because that's how we used to do things and partly uh just personal opinions of
  • 24:15 the maintainers on the project about how we should run in the in something like npm i could sign up
  • 24:22 today and i can sign up and just upload basically any package right and anyone can do that at any
  • 24:28 point and if someone gets my credentials then they can start uploading new versions as me and all this
  • 24:34 type of stuff there's obviously been you know i'd be remiss if i didn't announce there's various
  • 24:38 movements across the ecosystem in places like npm to use 2fa to improve this situation but the
  • 24:44 difference in homebrew is because our package registry is effectively a git repository so that gets you a
  • 24:52 bunch of things so one of the things that gets you is the fact that there is a global log of
  • 24:58 everything that is made and all the changes that are made there and the second is you know using
  • 25:03 github's permission system we have a relatively small number of people there's i think 29 homebrew
  • 25:09 maintainers account today that could be wrong but around that sort of number and those maintainers are
  • 25:16 audited every year to make sure that they actually need the access they have so we have a bunch of
  • 25:20 people who are incredibly prolific contributors to homebrew in the past still contribute occasionally but
  • 25:25 are deemed to not need their right access anymore so we keep it pretty locked down and if you want to
  • 25:32 if you want to submit opem jdk with opem say then what you would have to do is you'd have to submit
  • 25:38 a pull request a maintainer would have to look at that review it say this is okay your pull request
  • 25:44 would have to pass various automated checks that we have as well and if there's any doubt again similarly
  • 25:49 we would have some would be pulled in there and then you would have to hope that no one in the community
  • 25:54 noticed what you've done even if you managed to somehow fool the maintainers there because there would be a log
  • 25:59 about who included it when why pull request etc so in reality this you know there's a lot of
  • 26:08 conversation about this sort of supply side security stuff i wouldn't pretend that we don't have security
  • 26:13 challenges and we haven't had security problems in the past but for us at least like the trust model is
  • 26:18 very very different because essentially particularly for formula where the criteria is a little bit
  • 26:24 stricter still it's we are basically packaging upstream software not and similarly we don't we really don't
  • 26:32 like people unless it's really really popular even submitting their own software into homebrew so we
  • 26:36 basically want third parties to say i trust this upstream repository i would like this to be included into
  • 26:42 homebrew and then a maintainer needs to say yes this seems okay and we have some projects where you may notice
  • 26:49 that there is a bot that will automatically update things but again we've had a security issue in the
  • 26:55 past with casks in this case and we addressed it there but we are basically very stringent about what
  • 27:01 situations and criteria things can be automatically updated in that fashion and essentially if you were to
  • 27:07 radically change the way the software worked or anything like that or the way it had to be installed you
  • 27:11 couldn't do that automatically that would basically just be a situation where the upstream project
  • 27:16 has said this is okay and then we would have a situation where we can kind of automatically bump that
  • 27:21 but if there was any malicious activity we would notice that we would push change we revert it
  • 27:25 and again that's all publicly logged and public information that's that's really interesting actually i think
  • 27:32 that effectively building in the open it brings brings a lot of benefit here i i had so many issues
  • 27:38 in the past with jcenter i think there was like name shadowing attacks uh for one really popular android
  • 27:44 android developer someone like used their package name with a typo and they ended up distributing malicious
  • 27:50 code all over the places there was like tracking network calls and so on so yeah definitely having
  • 27:55 everything open helps helps a lot here i'm actually curious to know like since we're talking about
  • 28:00 formulas let's go a little bit practical what what do you know by any chance which one is the most
  • 28:05 downloaded one yeah so we have a few ways of i could tell you the most used in the last year
  • 28:12 on mac os is a really boring formula that's basically just used for installing um certificates for open
  • 28:21 ssl and then the second most popular one is open ssl itself so that's we actually have two different
  • 28:27 types of events so we have we track install events and on request events and the on request events
  • 28:33 is someone actually request someone typed brew install whatever and the install events are it could
  • 28:41 be pulled in by something else and everything depends on open a cell so that's why it ends up
  • 28:44 the top of the list the in the last year the install and request events the thing the top package that
  • 28:49 someone's actually requested was node followed by python followed by git followed by aws cli
  • 28:55 so you can probably guess this stuff but yeah i guess the interesting fact is how do we know this
  • 29:00 stuff um and yeah the way we know this information and it's all public we've got a website where you
  • 29:07 can go and look at this analytics data but we yeah we track analytics for users unless they've opted out
  • 29:13 and we notify them before any analytics are sent with the instructions of how to opt out and documentation of
  • 29:18 what we do and obviously again because we're an open source project you can see exactly how and when
  • 29:23 the data is sent and where so let's let's deep dive a little bit more on this telemetry problem because
  • 29:30 i know recently there was a discussion in the in the golang space about adding telemetry inside a go compiler
  • 29:36 and things kind of blew up over there like a lot of negative comments like hey you should not do that
  • 29:41 but now we see the value of telemetry in open source because we can say like hey which package is
  • 29:46 the most downloaded it's not just about knowing which package is most downloaded i'm sure you have
  • 29:51 like you can do further analysis on how users are using homebrew thanks to that data so maybe can
  • 29:57 can you tell us a little bit like how do you feel about this telemetry where where do you store the
  • 30:02 data even how complicated it is to even like from the legal point of view to have telemetry around
  • 30:07 an open source tool like this one sure so i guess a little bit history so we didn't always used to have
  • 30:13 telemetry here uh we used to be able to only for binary packages infer like manually see how many
  • 30:22 downloads an individual binary package would have and again that was very variable depending on the
  • 30:27 binary package host that we were using at the time like in what format we could get that information
  • 30:32 it wasn't really automatable and it was again not accessible at all for things that we didn't have
  • 30:39 binary packages for which at the time was quite a significant amount to our software so we looked
  • 30:46 i can't remember how many years ago it was now like quite a long time ago at various options for
  • 30:51 storing analytics and recording them and things like that and at the time the only thing that looked
  • 30:55 like it was going to meet our scale and be free because at the time we had no recurring income
  • 30:59 was google analytics we investigated various people suggested we investigate self-hosted options and
  • 31:05 things like that but it became pretty clear pretty quickly that self-hosted options without major corporate
  • 31:10 backing we're going to just a fall over and be uh be prohibitively expensive for us to run
  • 31:16 so we've used google analytics for quite a while and we send them the absolute minimum information
  • 31:22 that we can to basically get what we need and as of fairly recently and various points in the past when
  • 31:29 we have sent information that we're like we don't need this anymore then we stop sending that information
  • 31:34 so we have kind of gathered information that kind of tracks users by a uuid that's just randomly
  • 31:43 generated on their machine and you can reset that tracking information at any time and before we send any
  • 31:49 analytics to any users we pop up a little message which should also make a ping in your terminal
  • 31:54 be it on a new installation or if you want some ancient homebrew version before analytics
  • 31:58 were addressed then it would now you know ping you and say hey we've enabled analytics we haven't said
  • 32:03 anything yet but we're going to uh and yeah like i guess as you mentioned with go like when we first
  • 32:10 introduced them and still regularly now there was a tremendous amount of negativity towards analytics i think
  • 32:16 some of that in our case is related to our decision to use google analytics which is why we're now in
  • 32:22 the process of kind of migrating away we have an influx db host in which we are sending dual sending
  • 32:29 analytics to google analytics and influx db but you can choose to opt out for just google analytics or both
  • 32:35 if you choose um but yeah the expectation is in probably 90 days or something from now probably
  • 32:42 less by the time this recording goes up then we are planning on removing the analytics entirely in
  • 32:49 favor of influx db that's awesome thank you very much for sharing and i'm actually curious to know a
  • 32:54 little bit more about the old opt-in versus opt-out thing because in the golang space it created a lot
  • 33:00 of controversy so maybe you can tell us a little bit more how on real managed to have telemetry as an
  • 33:08 opt-out i think this is what i see with a lot of stuff in homebrew having been involved for a long time
  • 33:16 i saw with the go telemetry thing and from what it's worth they have switched from opt out uh like
  • 33:22 we have to uh opt-in and i think that's a mistake because what happens is when you use opt-in analytics
  • 33:30 you are going to not gather a representative sample of the people who use your software you're
  • 33:36 going to rather a representative sample of the people who decide to enable analytics on your software
  • 33:41 which i i'm not convinced that those two groups are uh aligned yeah and similarly i guess perhaps
  • 33:48 not surprisingly being a mac person because this is quite a an apple ecosystem viewpoint i think
  • 33:53 defaults are really important and i think opt-in versus opt-out you basically massively reduce the
  • 33:58 discoverability of analytics at all there's a i've learned over the years with stuff that homebrew
  • 34:03 there's a very small proportion of our users who change anything from the defaults ever and are even
  • 34:08 aware that there are configuration options in homebrew full stop right most people just don't use homebrew
  • 34:14 and and also like even most software that way you know so as a result i just think it would give us
  • 34:20 essentially worthless data which would be almost impossible to make accurate decisions on i guess
  • 34:25 you touched on that earlier you you alluded to you know we're able to make decisions like a good
  • 34:29 example for us is if we have some software that's broken on the new mac os or a new version of go if it
  • 34:36 depends on go or whatever it may be like that the analytics help us to make the decision okay how
  • 34:41 many people actually use this right like how many how much time is this worth us investing to get
  • 34:46 this fixed and before analytics we had to basically have the assumption that well everything is used
  • 34:52 right so we have to go and fix this stuff whereas now it means that when you know if you have a new
  • 34:58 version of go that is blocked on being upgraded because of some software we now have the ability to say well
  • 35:04 the software that's blocking go go has got whatever millions of people installing it and this other
  • 35:10 software has you know 100 people installing in the last year or less maybe no one in some cases so as
  • 35:17 a result it's not worth keeping the software around or blocking it based on that and it's also in some
  • 35:22 cases if it's going to be very involved if the software is broken then in some cases it's like well
  • 35:27 if if enough people we discover stuff that has been broken for six months a year no one's noticed no
  • 35:33 one's reported an issue you go and look at the analytics oh 10 people installed that in the last
  • 35:37 year so it's not worth us spending our time and effort to kind of fix that stuff and from my perspective
  • 35:42 it's been tremendously valuable uh to in order to help us prioritize i also think there's a kind of
  • 35:48 fairly hilarious side note here which is that for those of us who have worked in industry i'm sure
  • 35:54 you're the same nicola every software company does some degree of measuring what users do right and
  • 36:02 some software companies for example google i guess one of the reasons people don't like google analytics
  • 36:09 one of the reasons people may have been upset about some of the proposals coming out of google or
  • 36:14 the information being sent to them for the go stuff google obviously is part of their business model
  • 36:19 not homebrew's analytics specifically but it's part of their business model to use information about
  • 36:24 users of their software in order to sell ads right and you can i'm not even going to get into a debate
  • 36:31 about you know whether that's good bad whatever but it's a i think a very reasonable thing to say
  • 36:37 i don't like that business model i do not approve of that i think the problem is is that when that gets
  • 36:43 moved to open source software and you have people saying that google but the homebrews analytics or
  • 36:47 spyware or whatever i guess you have to really ask yourself about what information like how we could
  • 36:53 possibly financially benefit from this information particularly when it's financially benefit from
  • 36:58 information which we make publicly available to you and our maintainers do not have any more access
  • 37:04 other than the few ones who have to be admins or google analytics and when we move to influx db it's going to be
  • 37:10 even even effectively more restricted and we gather less information or whatever like our maintainers don't
  • 37:16 have access to stuff that you don't have access to so i find it very hard to see how homebrew could be
  • 37:22 maliciously or unintentionally using this information to spy on you or yada yada yada what it is is that
  • 37:28 information helps you to make the software better and another irony i've seen is that there is a lot of
  • 37:34 people for whom they claim to subscribe to the scientific methods and think that stuff like
  • 37:39 making a decision based on data is generally a good thing to do but yet they will insist that all of the
  • 37:47 software they use or at least all of the open source software they use because with most proprietary
  • 37:51 software they have no way of even knowing what data has been gathered and how and web software even more
  • 37:57 so every web request you make to any server you have no idea what is being stored and what not stored
  • 38:02 and that's completely opaque to you but that's inside i think it's funny to me that a lot of these folks
  • 38:08 who would say that they subscribe to scientific empiricism at the same time don't want to let open source
  • 38:15 projects where you can see all the data being sent and received and stored don't want open source
  • 38:20 projects to get any of that data in order to make the software better and i think frankly that just reveals a
  • 38:27 astonishing naivety amongst the loudest voices here and then i guess as a as a final note on this i think
  • 38:34 the other thing that this stuff reveals which i've learned from homebrew over the years is that sometimes
  • 38:39 open source projects will make unpopular decisions in our cases there's been various changes to the defaults
  • 38:44 over the years that people have really not liked and you can get a lot of people what feels like an awful
  • 38:51 lot of people if a hundred people turn up and make comments across various issues or in a discussion
  • 38:57 forum or whatever that feels like a lot whereas as far as we can tell homebrew has millions of users
  • 39:04 um you know i'm not sure how many millions it's hard to kind of exactly um gather that data accurately
  • 39:10 but based on our our installation events and analytics that we have millions of users as a
  • 39:15 result a hundred people being really angry about something is ultimately insignificant but when
  • 39:21 those people are getting angry and to maybe go back to what we said much earlier about people being rude
  • 39:26 often those people cross a line into not just being frustrated about a technical decision but being
  • 39:32 rude abusive sending abusive emails to maintainers sending abusive emails to their employers
  • 39:37 demanding they be fired starting twitter campaigns all this type of stuff for software that they get for
  • 39:42 free often made by people in their spare time i also you know perhaps the stubborn person that i am
  • 39:49 i also even less want to validate the concerns of people who cannot do so in a polite constructive and
  • 39:56 professional manner and so that's that's my take on the the analytics debate as is and hopefully that
  • 40:04 will embolden some other maintainers to be willing to kind of make this sort of these sort of
  • 40:08 changes um and also i guess to gather the information they feel they need to run their projects and if
  • 40:14 you're just gathering information because you think it could be interesting at some point in the future
  • 40:18 that's maybe a good time to not gather that information but if you have a concrete need
  • 40:21 as we do in homebrew's case with a concrete use case that you can see being informed by or enabled
  • 40:27 by this data go gather that data let people opt out who want to opt out ignore the haters thank you
  • 40:34 very much for sharing your perspective that's extremely valuable and i think it's spotlights the amount
  • 40:39 of entitlement that at times i i also see in the open source community uh like i gladly i never add like
  • 40:45 negative emails being sent directly to me or to my employer at least that i'm aware of uh but i had
  • 40:51 some some issues in the past where people were like taking a picture with the photo like with with their
  • 40:58 phone they take a picture of their code uh and they put it that that's the only content on the github issue
  • 41:05 like your thing is broken please fix it now and it's like uh do a little bit of effort you know
  • 41:12 like i i'm happy to support you but you know uh i don't get paid for that like in the open source
  • 41:19 space so so yeah entitlement is is everywhere and when people cross the line is is really terrible
  • 41:24 so yeah i guess this is like one of the one of the major problem of the open source space
  • 41:31 yeah and i guess that's another thing where i would say that i i strongly agree with you like that
  • 41:38 entitlement is everywhere but again that's to me where a way to avoid burnout is setting your boundaries
  • 41:45 and thinking to yourself what you know it's maybe a little bit more nuanced if you're being paid to
  • 41:50 work on open source or paid to maintain a project uh by a company who is employing you explicitly for
  • 41:57 that purpose but if you like a lot of people are doing most of your open source work either
  • 42:01 unofficially during work time or in your spare time then you should only do what you want to do
  • 42:07 right like if someone makes an issue like that and you don't want to help close it right you don't
  • 42:11 have any obligation to help anyone right and also i guess again maybe a a good principle for life
  • 42:18 right is i am willing to help the most the people who are willing to put the most effort into
  • 42:24 asking for help right when someone says here's all the stuff i've done here's all the stuff i've tried
  • 42:29 i read your docs i followed your issue template all this type of stuff this thing isn't working please help
  • 42:35 i i may still depending what the issue is i might not be able to help them but i'm a lot more willing
  • 42:41 to do that for people who've done that and asked in a very nice and kind way than someone who just as
  • 42:45 you say takes a photo of some code dumps it in issue and puts please fix like those type of things
  • 42:51 nowadays i don't even respond i literally just close the issue and ignore it because i just think it's
  • 42:57 not worth my time as a maintainer working on that stuff because if i answer a hundred or a thousand of those
  • 43:04 issues i then don't do any work on the project right and the project doesn't get that new feature
  • 43:10 that you all wanted and you've been asking for months because instead i helped a hundred people
  • 43:14 who aren't willing to put the effort into even asking a good question that's so true that's so true
  • 43:20 so uh still on analytics you mentioned influx db so now i want to ask you another question which is
  • 43:27 like who is paying that db and this brings me to the topic of uh funding like who is effectively like
  • 43:35 where is the money model behind this is it like it's just open source it seems like not there is
  • 43:39 someone sponsoring supporting uh homebrew in which form and in which capacity sure so again let's take a
  • 43:47 little trip through memory lane so when homebrew was first created by max howell it neither had any
  • 43:53 money nor needed any money right everything was on github people would just install stuff that's all kind
  • 43:59 of unneeded right and then i guess our next step after that was stuff like source forge or bin trade
  • 44:05 or whatever where we had needs from other organizations beyond just github although i guess
  • 44:11 in some ways you could include github in this category as well and they gave us some stuff that
  • 44:15 we needed for free and this is a nice pattern that you see a decent number of organizations will do
  • 44:21 they will say okay well stuff's for free for public repos or open source or whatever it may be and if
  • 44:26 you want to do private repos or um commercial stuff or whatever you have to pay money so that got us
  • 44:32 quite far for a little while and then eventually we got to the point that we actually needed some stuff
  • 44:38 right so the first time we did that i think it was 2013 14 something like that we were like okay we
  • 44:44 want to do our own ci testing at this point there was no cloud providers offering like this type of
  • 44:49 or at least none that were offering kind of in the format that we felt that we could use ci hardware
  • 44:55 and also for me the um in the kind of earlier days particularly of homebrew when we didn't have any
  • 45:02 recurring revenue coming in i would have been reticent to sign up for a uh you know a cloud provider
  • 45:10 even if such thing existed in order to have mac hardware or whatever that if we stop being able
  • 45:16 to pay the bills then it would go away so we bought i think it was four physical mac minis
  • 45:22 class a friend of mine uh who ran an isp let me install them in the data center there you know i drove
  • 45:28 down for six hours and installed these like physical pieces of hardware into a physical data center
  • 45:33 um and then a few years later we were able to kind of transition from them to a company called max
  • 45:37 stadium that again gives us their stuff for free um and then more recently we have um we joined the
  • 45:45 software freedom conservancy which was what you call a fiscal host i essentially an organization that
  • 45:51 provides a bank account for your project to enable you to accept donations and things like that
  • 45:57 and then we were able to do things like set up a patreon get direct donations through them
  • 46:00 get some kind of commercial destinations all this type of stuff we were able to kind of build up some
  • 46:05 money that way and then start actually paying for some other services like um we were able to pay for
  • 46:10 say like google cloud and things like that and then more recently we transferred from software freedom
  • 46:15 conservancy as our fiscal host slash foundation to open collective and all our funds are there and now a
  • 46:22 a cool thing with open collective is you can actually see our balances how the money gets spent what money
  • 46:27 comes in what money goes out what reasons it goes for and when maintainers are given money um then
  • 46:34 you can see what that money was for like we just had our annual general meeting uh in brussels
  • 46:40 after fosdam we lasted that before the pandemic and yeah you can see various maintainers thankfully the
  • 46:48 the specifics of their receipts are not globally readable but you can see this maintainer requested
  • 46:54 this amount of money to be paid back for his or her flight over to this conference so that provides a
  • 47:02 little bit more transparency there and you can see i guess our income sources as well so we've got a
  • 47:06 bunch of existing income that is sitting there but our kind of new income comes from uh github sponsors
  • 47:14 and then patreon and then people through open collective kind of in that order and it comes from
  • 47:19 some organizations um github has given us money in the past as well and we have some kind of ongoing
  • 47:25 sponsors some one-off sponsors and we also have um one-off individuals who give us money and ongoing
  • 47:32 individuals who give us money if you want to see the full list you can see our kind of github
  • 47:36 sponsors page and our kind of sponsors that hit a certain tier are all included in our readme on the
  • 47:41 homebrew repository as well so as a result of all this i guess to go back to your original question
  • 47:46 that's what allows us to pay for things like a um influx db instance and we have like a slightly
  • 47:54 beefier than github's actions provides um google cloud like image that runs our docker images and
  • 48:01 stuff like that for ci and various other things like this like resources we need although we're still lucky to
  • 48:06 have you know great companies like um build pulse one password and various others who give us free stuff
  • 48:15 that we rely on use and like awesome uh now one question that came to my mind is like okay uh
  • 48:22 isn't open collective tools small for you folks shouldn't like have you ever thought about
  • 48:29 having like a proper homebrew foundation i couldn't find any reference about it in the um in the web so
  • 48:37 i was curious like um yeah like is there an entity behind homebrew or it's just like a gira project
  • 48:43 a gira borg no there's no there's no legal entity behind homebrew um we when we were part of software
  • 48:49 freedom of service and now part of open collective that's the closest thing we have to a legal entity for
  • 48:53 us i guess from our perspective we don't have any trademarks or anything like that so there's
  • 48:57 there's very little in the way of need that we would see for a legal entity i'm also a bit of a
  • 49:02 minimalist personally so i tend to have the attitude of if you're on the cusp of whether or not you
  • 49:08 could have a foundation or not uh then the admin overhead means that you probably about to not have
  • 49:14 one than have on um we do have kind of a governance structure and governance documents i mentioned kind
  • 49:21 of me being project leader and before that it was a bit more nebulous so you know a few years ago
  • 49:27 we kind of sort of solidified our our governance so that i'm now elected as project leader we have
  • 49:33 a project leadership committee committee who are elected and technical steering committee and all
  • 49:38 this type of stuff and yeah and this is basically all written down and we have various kind of members
  • 49:43 who are kind of more or less maintainers uh past and present and few other people who have kind of
  • 49:51 have extended periods of kind of involvement with the wider homebrew ecosystem who are kind of asked to
  • 49:56 kind of join us there and participate and stuff like that but even within that we try and continually
  • 50:03 sort of adapt our governance processes to try and keep them quite lightweight and try and keep them quite
  • 50:08 fast moving and responsive just because that feels like it uh it makes the project work better and as
  • 50:15 someone who's recently left a rather large organization the last thing i would like is for homebrew to turn
  • 50:21 into you know a huge bureaucratic organization where it takes a very long time to get anything done
  • 50:27 awesome so i'm curious like about this this governance structure and and maintainers like
  • 50:32 how can people effectively contribute to homebrew if if they want how do you become a maintainer if if you
  • 50:39 were to yeah so the the best way to contribute is to we have a little section or kind of read me of
  • 50:47 the homebrew reaper but there's a few different routes in there like i guess some of it is deciding
  • 50:52 whether you want to work in the package manager itself or the packages the packages are often kind of
  • 50:57 a place where you can jump in there and kind of fix some little style issues and stuff like that
  • 51:02 as a good way to get started in general like i want to be a maintainer is kind of how do i do that is a
  • 51:08 hard question to answer because it's very dependent on an individual by individual basis like often
  • 51:13 what happens is people just discover homebrew start what using it contributing to it whatever it may be
  • 51:20 and then we notice if you have a lot of high quality contributions and if generally i guess the general
  • 51:28 rule of thumb is you are saving more work than you're closing right if
  • 51:32 you make great pull requests often and i review the pull requests i read basically every pull
  • 51:38 request that goes into the homebrew brew repository for example and if the majority of your pull
  • 51:44 requests are trending towards i don't have anything in there to correct and they are non-controversial and
  • 51:51 seem kind of pretty good and you you've kind of been sensible about writing tests and code style and
  • 51:58 fixing issues without people needing to point them out to you then you may be asked to be a maintainer but
  • 52:02 there's people who have done kind of decent pull requests but they still need quite a lot of help kind of
  • 52:08 getting them over the line and that's something where we're kind of happy to have those people
  • 52:12 repeatedly contribute and we really appreciate those contributions but they may be not the best fit to
  • 52:16 be a maintainer because part of the expectation is when you're a maintainer is you don't just work on your own stuff
  • 52:21 right you're not if you have little like projects that you're interested in before you're not just
  • 52:25 doing purely continuing to do that stuff and now you can merge it yourself but instead being the idea
  • 52:31 of like you yourself are getting involved with shepherding community contributions reviewing other
  • 52:36 people's codes and stuff like that that's great it's actually uh i would have expected like a more
  • 52:41 structured and a more like uh a bureaucratic way to get involved while it seems like it's like any other
  • 52:49 open source project like who contributes is like like the debian uh duocracy kind of thing like if
  • 52:56 if you contribute and you're valuable then you have push rights and and so on yeah exactly and as i
  • 53:02 touched on before as well we don't see these things as permanent you know we have people who are very
  • 53:07 prolific contributors and in some cases the life situation may change they may have a child or start
  • 53:14 university leave university change jobs whatever it may be and then in some of those cases those people
  • 53:20 will uh go and say well it's time for us to me to step down and in some cases i review everyone's
  • 53:26 contributions kind of once a year and it might just be like well it doesn't look like you actually need
  • 53:32 commit access anymore so um we're going to remove that just because you know as i mentioned
  • 53:37 earlier like that's it's a kind of security thing that we potentially could have had i don't know how
  • 53:43 many we've had over the years but if we had never removed any maintainers we'd potentially have 100
  • 53:47 people with commit access rather than 20 something people with commit access totally i i'm curious to
  • 53:53 know like for people that want to engage with with ombrio other than using the the get up ripples are
  • 53:57 there any like official venue like being i don't know a slack discord or get up discussions that you
  • 54:03 will suggest for folks to to engage with the broader homebrew community yeah so we have a github
  • 54:09 discussions repo like that's basically our our main place for sort of just chatting about homebrew a bit
  • 54:14 more we don't have a slack or discord or anything like that right now and because i guess we don't
  • 54:19 really have the resources to kind of accurately moderate those and ensure that they're kind of nice safe
  • 54:25 spaces for people um but yeah but i i would say the kind of discussions forum is the best place to
  • 54:31 to be and in general as well there's on places like matadon and twitter people sort of chat about
  • 54:37 homebrew stuff every so often we can do our best to kind of um get involved there as long as your
  • 54:43 chat is not just homebrew sucks or i hate homebrew because of whatever awesome so as we slowly move
  • 54:50 towards the end of this episode i actually want to ask you what's next for brew like other than
  • 54:55 like i understand that a lot of your time is dedicated in maintaining uh the registry being
  • 55:00 healthy and so on but are there any features or anything that you foresee coming in the future
  • 55:06 of brew that you want to call it out yeah so there's there's no major features i see kind of on the
  • 55:12 somewhat imminent horizon so we just released relatively recently homebrew 4.0 and and yeah there was i guess
  • 55:19 the big features in that were pulling things from the api like we've got a kind of api um
  • 55:25 hack at least that's sort of on the github pages and yeah basically that has been a fairly major
  • 55:34 change we're still picking up some edge cases with that and similarly i mentioned earlier with kind of
  • 55:39 moving our analytics provider and that will enable us to um present our analytics perhaps in a slightly
  • 55:45 different way that's maybe more useful to people and also just remove a kind of google dependency
  • 55:49 um and yeah so basically like we're those things are both things that are sort of like
  • 55:55 released but not i guess as you might expect in a point zero release kind of released and working
  • 56:00 for most people most of the time but not like rock solid and perfect so at the moment like my
  • 56:06 main focus and i think the focus of a decent number of the maintainers beyond just the day-to-day
  • 56:10 keeping them running is improving those features and getting them to the point where they're completely
  • 56:15 done and then who knows what's next i mean we tend to not have long roadmaps because because
  • 56:22 everyone on the project is a volunteer essentially we don't really have a way of saying well okay like
  • 56:28 you have to deliver this thing in three months because people can just say no but yeah i guess if you're
  • 56:33 if you look at the kind of help wanted issues on our repos then that gives an an indication of stuff
  • 56:38 that we're trying to like invest more in but hasn't been done yet but no there's no there's no big
  • 56:45 changes that i expect to kind of happen imminently and another thing with humbrew i guess it's worth
  • 56:50 noting is that we although we've had a kind of v2 i used to joke that we will never have a humbrew v2
  • 56:55 because the idea of kind of i don't expect us to ever have a like well we broke all backwards
  • 57:01 compatibility and you have to rewrite all your formula and stuff like that from scratch because
  • 57:05 i think that would make humbrew dramatically less useful to a lot of people and would make everyone
  • 57:10 think about at least moving to another package manager where if they have to rewrite everything
  • 57:13 anyway so interesting thanks for sharing so now i want to give you the opportunity actually to to
  • 57:19 to share with with the audience if you have any blog posts uh other podcasts that talks or any content
  • 57:27 like you like the one you mentioned uh before when uh we were talking about maintenance burden if if
  • 57:34 people wants to like also understand better the culture around homebrew uh do you feel there is
  • 57:40 any any reading that is there is worth uh saving for them yeah so i've done a bunch of writing on my
  • 57:46 personal blog about related to i guess informed by my experiences in homebrew about homebrew and open source
  • 57:53 and uh even just kind of why your software development over the years so my blog at kind
  • 57:59 of mike mcquade.com is probably the best place if you want to kind of browse through that you can
  • 58:03 actually like i've written relatively few enough that it's all on a single page that you can just scroll
  • 58:09 up and down and see what takes your fancy but also i guess if you're interested in my sort of more
  • 58:14 short form thoughts than i'm on kind of mastodon nowadays i i'm technically still on twitter but
  • 58:19 like that's essentially writer only at this point um until i get fed up with even doing that but yeah
  • 58:25 so now feel free to kind of if i've said something that you find interesting and you want to talk to
  • 58:30 me send me an email or a whatever you call sending people stuff on mastodon i can't keep up with the
  • 58:37 verbiage and and yeah and i guess i mentioned earlier as well like my new employer raised.dev we
  • 58:44 don't have a product to announce yet but if you kind of follow me on mastodon or whatever but
  • 58:48 you will find out when we have something ready for you to use and we'd be interested in you trying
  • 58:52 that out as well awesome so my last question would have been where people can find you online which
  • 58:58 sort of you already answered but maybe you can share what's your twitter handle and mastodon handle
  • 59:02 so people can can search for you then follow sure so yeah on uh on twitter i'm at mike mcquade on
  • 59:09 mastodon i'm at mike at uh mastodon.mikemcquade.com i think um but yeah you could find that in my
  • 59:19 twitter bio and on my link to my website and stuff like that my website is mike mcquade.com which is
  • 59:24 just my name um and then yeah like i'm mike mcquade on github and most places on the internet where i can
  • 59:30 take that username awesome and with this uh this was an amazing episode really insightful at least
  • 59:37 for me it's a software i use really daily i want to thank you very much for being with us on show
  • 59:41 today yeah thanks for having me nicola and thanks for listening everyone and i also again want to
  • 59:46 thanks everyone for listening and i'll see you all in the next episode
  • 59:57 you