Homebrew 2.0.0
The major features and community changes in Homebrew 2.0.0.Presented at FOSDEM 2019.
Show transcript
- 0:00 Thank you.
- 0:30 Is that me?
- 0:32 There you go.
- 0:33 Right.
- 0:37 Can everyone hear me?
- 0:39 Is the mic working?
- 0:40 It's just for the recording.
- 0:41 Oh, just for the recording.
- 0:42 Gotcha.
- 0:43 Cool.
- 0:44 Thank you for coming, everyone.
- 0:45 I'm going to try and stand here mostly because my beeper is not working.
- 0:51 Unfortunately, I can't do anything except laser you with it.
- 0:54 So I'm going to talk today about Homebrew 2.0.
- 0:58 Starting point, who's heard of Homebrew?
- 1:00 Anyone in the room?
- 1:01 A few people.
- 1:02 Who uses Homebrew?
- 1:04 Again, probably the same.
- 1:06 Who here has submitted a pull request to Homebrew ever?
- 1:09 Nice.
- 1:10 Who here maintains Homebrew?
- 1:12 Hey, there's more than just me today.
- 1:15 Exciting.
- 1:17 And anyone submit a PR to Homebrew and had it rejected by me?
- 1:23 Hey, only maintainers.
- 1:28 That's fine.
- 1:29 That's fine.
- 1:30 Cool.
- 1:31 And then we also have, who likes our new logo?
- 1:33 In fact, no.
- 1:34 A tougher question.
- 1:35 Who can tell the difference between our new logo and our old logo?
- 1:38 It's basically the easy way to tell, in case you're wondering if you've got a vintage logo sticker on your laptop,
- 1:45 is the new logo has a straight beer glass sides instead of overly curved one.
- 1:51 We have one of the Homebrew cost maintainers' full-time job as a designer.
- 1:55 In fact, is Vitor in the room?
- 1:56 There.
- 1:58 Hello.
- 1:59 We've not met before.
- 2:00 Hello.
- 2:01 Yeah, so he sent me a list of corrections of why the old logo didn't meet standards.
- 2:06 So, like, now we have a nice new logo with more accurate beer glasses so you don't get confused
- 2:12 and think that you're drinking when you're homebrewing or vice versa or whatever.
- 2:15 Anyway, so, who am I?
- 2:17 My name is Mike McQuaid.
- 2:18 Thank you very much for having me here.
- 2:20 My worlds collide often because I both work at GitHub and work on Homebrew.
- 2:26 I'm not, my job at GitHub is not to work at Homebrew.
- 2:30 That's a kind of happy side effect.
- 2:32 And as a result, like, I'm often telling people, sometimes diplomatically, sometimes not,
- 2:37 in GitHub, everything that I kind of want GitHub to do better for open source.
- 2:41 And then vice versa, kind of sometimes defending stuff that GitHub has done
- 2:45 to kind of homebrew maintainers who are grumbling about it when it happens.
- 2:48 But, yeah, so if you want to talk to me about Homebrew or open source stuff or whatever,
- 2:51 you can get me on Twitter.
- 2:52 You can find my email address on my website and stuff like that.
- 2:55 And I'm always happy to talk more about this type of stuff.
- 2:58 I've been working on Homebrew for about 10 years.
- 3:02 This year, I guess, 10 calendar years at least.
- 3:04 I'm working for GitHub for about five.
- 3:07 So, yeah, I was a happy GitHub user before I worked there.
- 3:12 So I'm somewhat less biased than I might sound.
- 3:14 We released Homebrew 2.0 yesterday.
- 3:19 Like, I was sitting in the cafeteria, which was nice.
- 3:26 It was kind of felt satisfying to actually, like, you know, tag the commit and submit it, like,
- 3:32 whilst here.
- 3:34 So, yeah, I wasn't sure when we were going to release this.
- 3:37 So because I did it yesterday, I figured, like, we could do in this talk some of the things that my top 10 features, I guess,
- 3:44 that we've shipped in Homebrew 2.0.
- 3:47 Some of these things are not...
- 3:49 So the difference between 1.9 and 2.0 were relatively minimal.
- 3:52 But it was all...
- 3:54 Most of these things were all things that I kind of wanted to see us do before we would call ourselves 2.0.
- 3:59 It's kind of fun because, I guess, this time, two years ago, I was doing the same talk about Homebrew 1.0,
- 4:05 which had been released a few months before.
- 4:06 So it was a fun little game going back and comparing the notes from a few years ago
- 4:11 and seeing, like, what we've done in that time period and, like, what things we've changed and what we haven't
- 4:16 and all this type of thing.
- 4:17 To make it more of an adventure, what I'm going to do is I'm putting up pictures that are loosely related to the features
- 4:24 and then we're going to see if you can guess what the feature is.
- 4:28 Homebrew maintainers, you are not allowed to guess.
- 4:30 Right.
- 4:32 So the first one.
- 4:36 Anyone guess?
- 4:38 Support.
- 4:39 Yes.
- 4:40 So that is a picture of a...
- 4:43 I know it looks like it's an actual photograph, but I did modify that myself.
- 4:46 That is a picture of a mountain lion, which was RSX 10.8,
- 4:51 and it is crying because it is no longer able to run Homebrew.
- 4:54 So it's a little bit weird.
- 4:56 It's like a feature, but the main thing, I guess, many of you here work on software projects
- 5:01 or open source software projects yourselves,
- 5:03 and that allowed us to delete enormous amounts of legacy code
- 5:06 because the versions pre-mountain lion and below ship with, like, now really, really old compilers
- 5:13 that don't support C++11, don't support C++14, and stuff like that.
- 5:17 The Xcode shipped separately to the combine line tools, and sometimes the system came with X11.
- 5:24 TAR didn't come with LZMA support, and, yeah, basically all these things that mean that
- 5:30 you can remove a crap load of if statements all over the code, which makes me happy.
- 5:37 So the next one.
- 5:38 The options.
- 5:41 Yes.
- 5:42 So the options.
- 5:43 This has been a little bit contentious recently.
- 5:45 I don't know if you've noticed.
- 5:46 So in the Homebrew core repository, we now don't provide options on packages.
- 5:52 Again, this seems like a weird thing.
- 5:54 I'm starting with the, like, the horrible features that aren't really features for anyone except maintainers first,
- 5:59 and then we'll build into the nice stuff later.
- 6:01 But anyway, so with the options stuff, basically we've had a long-running battle with options.
- 6:08 Much like this dog here, the options did not want to behave.
- 6:11 So the way Homebrew started out, a little bit of history, if anyone hasn't been using it for a very long time or whatever,
- 6:20 Homebrew started out as being a from-source package manager for Mac that only shipped for, I think, OSX 10.5
- 6:27 was the version that we were at when it shipped.
- 6:31 So people were using it.
- 6:32 People were building stuff from source pretty much like the expectation was that everyone who worked on Homebrew
- 6:38 and was submitting stuff to Homebrew were the people using Homebrew and vice versa.
- 6:42 So there wasn't a long tail of users who didn't know how to kind of modify Homebrew.
- 6:47 It was pretty much like everyone who was using Homebrew was the ones contributing to it at the same time.
- 6:51 And obviously over time, the tool becomes more popular.
- 6:54 More and more people use it.
- 6:55 And what ends up happening eventually is we end up getting bigger.
- 7:00 We end up getting more support requests and we end up getting more bugs that people find with the software.
- 7:04 And one of the biggest causes of bugs, and you will sympathize if you run a from-source like Linux distribution as well,
- 7:12 is that weird things people have on their system, weird things they have set up in their .files or their editors or whatever,
- 7:19 can subtly break build processes really easily.
- 7:23 So we ended up having binary packages for more and more stuff, eventually binary packages for literally everything that is compiled.
- 7:30 And then we've got to a point where we noticed that effectively all our support issues are coming from a very small number of people who are doing from-source builds of things.
- 7:42 That made us want to use binaries more, and then the problem with the options is we have the way it was working until recently.
- 7:48 Well, it still works this way if you're running a third-party repository, but in the main repository, you would have a package and it would have, say, four or five different options in it.
- 7:58 And because we don't have the CI infrastructure, we couldn't test that all those options actually work correctly.
- 8:04 And also, for each option you add to a formula, you add, my math is not great, but if I've understood correctly, it's a factorial increase in the number of option combinations.
- 8:14 Someone who knows math is nodding at me, so I believe them.
- 8:17 Yeah, so basically, you have a dramatic number of combinations.
- 8:20 And some of the options didn't work, and then some of them only worked when in combination with other options.
- 8:25 So you end up in a situation where we're shipping a bunch of software that we know is going to break, we know people are going to file issues, and we don't feel very happy about just saying, you know, like, tough, this is broken, you can't do anything about it.
- 8:37 Particularly when you end up with more and more homebrew usage being stuff like, you know, guides on the internet saying, hey, you want to encode this YouTube video, just copy and paste this line to install homebrew, copy and paste this line to, you know, install FFmpeg with 40 different options, and then there you go.
- 8:53 So what we've done now is we've made homebrew core have no options in it, so the binary packages are always the same for everyone.
- 8:59 And what we're trying to do instead now is have, say, something like FFmpeg, we're trying to build it with a sensible default of things that people can use.
- 9:07 And when people ask for something, basically we're generally adding as much as we can to provide as much support.
- 9:15 So what we don't want to do is provide three different Open Jampeg encoders, but we can have a discussion about what's the best one, and then we can make that the default.
- 9:23 But, yeah, so basically this is, this may be, if you're, if you haven't bumped into this yet, this may be a couple of month hiccup, may be annoying for you, and I apologize for that.
- 9:33 But longer term, this is going to make it much easier for us to actually run the project and have it be sustainable.
- 9:38 So, next feature.
- 9:41 Oh, I forgot this isn't working.
- 9:42 Right.
- 9:44 So, this is some Counter-Strike reference.
- 9:47 I didn't really understand that.
- 9:48 I think it's about tapping the mouse or something, but this is, this is some loose Google image searching this morning, so I apologize.
- 9:56 So, this references, anyone want to guess?
- 9:59 Oh, sorry.
- 10:04 No, you started, and then I gave it away.
- 10:06 There was an idea, like, to move more things into taps?
- 10:10 So, we now have one main tap, which is Homebrew Core.
- 10:15 Previously, a couple of years ago, we would have, we had inside the Homebrew organization, a bunch of, like, third-party repositories, which was sort of official and sort of not.
- 10:24 Now, the issue came about with that, that, like, some of these taps were fairly well maintained, but would do things differently, and then some of them were, like, completely unmaintained, like, literally no one had committed to them for years at a time.
- 10:36 And the problem is, because they're all under the Homebrew umbrella, it looks like these are all official and these should all work.
- 10:42 So, what we've done now is we've tried to move as much stuff as possible that actually works and meets our requirements into the main tap, and then we're trying to make it as easy as possible for other people to create their own taps.
- 10:53 Sorry, I realize, who doesn't know what a tap is?
- 10:55 Anyone?
- 10:56 Yep.
- 10:57 At least one person stuck their hand up.
- 10:59 So, a tap is a third-party Homebrew repository, which effectively means if you're used to other package managers, it's just a way of having a collection of packages in one place.
- 11:09 And what you can do is you can use the brew tap command to add more and more of these so that you can install stuff maintained by other people other than the main Homebrew maintainers.
- 11:20 So, the default tap is on github.com slash homebrew slash homebrew core, and then any other tap is generally shortened to be, so for example, the Linux one, which I'll talk about later, would be Linux brew homebrew core.
- 11:32 And again, that's like a short version of describing where it is on GitHub.
- 11:36 You can also have taps that are not on GitHub or not using Git or whatever, but that's kind of a longer tail that's talked about in the man page.
- 11:44 Right, so the next thing, this is very niche, so this is literally probably no one cares about this except me, so I'm not even going to ask.
- 11:51 But Homebrew core now is all, or should be at least, all open source software.
- 11:56 So, this is something that's come up, I guess, in a few talks I've heard over this weekend, where we're having an interesting time in open source, where we have some companies, the one that kind of jumps to mind, but they're not the only company,
- 12:09 being like MongoDB, who are releasing open source software, which they claim to be open source software, and which other organizations, such as in MongoDB's case, I believe Fedora, Debian, and the OASI, currently claim to not be open source software.
- 12:24 So, this puts us in a tricky situation, because we are part of the Software Freedom Conservancy, and one of the agreements of our terms as being part of that is our default repository is all open source software.
- 12:36 So, basically, what we decided to do is punt the work onto someone else, which is the OSI, and we're basically saying, what the OSI says is open source is what we consider to be open source,
- 12:45 and everything in Homebrew core should be open source under that definition.
- 12:48 So, we'll see what happens with licenses for various things in future, but it has meant we've had to do stuff like raw MongoDB back to the last version, I can't remember what it is off the top of my head,
- 12:59 that was released under a OSI license, rather than their new SSPL thing.
- 13:06 But, yeah, this is going to be interesting to see what happens in the next few years, I think, because there's a lot of companies who are doing kind of open source as a business type thing,
- 13:15 who are moving in a direction which some might say is away from open source principles and putting additional restrictions, which are certainly not, certainly prohibit them being considered free software anymore and may or may not stop them being considered open source software.
- 13:32 So, we'll see what happens.
- 13:34 Right, the next thing is this, anyone recognize this where you might see a page like this?
- 13:40 No, but that's a good question, a good suggestion.
- 13:49 So, we have a site now which is formulae.brew.sh, which is a, like there was a site previously called Browmeister, did anyone use that?
- 14:00 So, yeah, so that was like a kind of package, online package browser for Homebrew and this was sort of like an import of that that then got kind of a bit of a rewrite and then it's now running on GitHub pages,
- 14:11 basically just because I'm cheap and don't want to pay for infrastructure, but I would recommend when you look at the GitHub pages source like you close one eye at a time because like,
- 14:22 because it's doing things like rendering a JSON API like static JSON files like using liquid and things like the syntax highlighter is like looks really looks like it's crying blood.
- 14:34 So, it's not happy times, but it is kind of cool like how it works and that gets updated on each push.
- 14:39 So, that also means that as well as all the information you can get about a given formula, that's wget there.
- 14:45 And this is all basically like JSON encoded information that we're then representing nicely.
- 14:50 There's also a wee document on the formula.brew.sh, which provides like an API doc.
- 14:57 So, you can now use that to kind of query JSON information about formula and about their analytics data as well.
- 15:04 If you look at the very bottom, you can see installs 30 days.
- 15:08 So, this is the nice thing that we've kind of got to through this as well.
- 15:12 But I'm going to talk about later.
- 15:14 So, in fact, talk about now.
- 15:17 So, I don't know if anyone has seen this output ever.
- 15:20 Again, this is relatively niche and a new command.
- 15:23 But this is the output of BrewInfo Analytics.
- 15:27 So, when we introduced Google Analytics a few years ago, one of the concerns that people had was they said it would be nice for the community to be able to access all the information the maintainers access.
- 15:38 And we're kind of uncomfortable with there being sort of an information imbalance.
- 15:41 And I can say, as of the last few days, there are only two homebrew maintainers who have access to anything more than what the rest of the public have.
- 15:50 And that's purely for just administrative reasons, because that's how the information is generated.
- 15:54 And the rest of it, you can get all the information on formula.brew.sh.
- 15:58 And then you can use this brewinfo-analytics, which does a JSON call and pulls that data off formula.brew.sh.
- 16:05 And basically, what that's giving you is like the install counts and the balances for each of these kind of formula here.
- 16:11 So, here you can see an example of what I was talking about before of like the option removal over time.
- 16:16 So, like the options are diminishing there.
- 16:19 So, such that you get to 99.9% at the top and 99.88% at the bottom.
- 16:24 And again, hopefully that illustrates the point that even back when a year ago when there was all these options,
- 16:29 these were being used by, what, 0.12% of the people who were installing WGAT.
- 16:36 But yeah, so this is a really nice tool, both for the maintainers, but then also if you want to kind of,
- 16:41 I find it interesting, it's got Cask Analytics up there now as well.
- 16:45 If you kind of almost just want to discover new software kind of based on popularity,
- 16:49 it's kind of interesting to just kind of click through and see what stuff is there and what it's being used for.
- 16:54 And you can kind of single click to the homepage and the formula and all this type of stuff.
- 16:59 Any guesses on this one?
- 17:01 Linux.
- 17:02 Linux support.
- 17:03 Hooray!
- 17:04 So, Homebrew and Linux, which is also known as Linuxbrew, is officially supported.
- 17:10 Now, I don't know how many of you are Linux people in here, but there is sometimes some confusion as to why one would want to run Homebrew on a system which has,
- 17:19 in my humble opinion, almost always a much better package manager than Homebrew installed on it.
- 17:24 And a common use case I've heard, or one of the best use cases I've heard, is there's quite a lot of people,
- 17:30 I believe some of the Linuxbrew maintainers, for example, have nice Linux machines,
- 17:36 like in high performance computing environments, for example, which they have access to the machine,
- 17:41 they have access to a compiler, say, but they do not have root access on that machine.
- 17:45 So, because Homebrew itself, you can actually technically install it anywhere, we recommend you install it in the default location,
- 17:51 because then you get all the binary packages.
- 17:53 But because you can install it anywhere, on Linuxbrew that means that you can basically have a fully working package manager,
- 17:58 just in your home directory, which you can use without anything other than just a compiler, basically.
- 18:04 So this has now been merged, the projects are still somewhat separate, in that we have our formula,
- 18:10 like the package descriptions are separate, but then the Linuxbrewbrew, like package manager repository,
- 18:17 the bits that are actually kind of running the code, rather than just the formula descriptions,
- 18:20 those repositories have now been merged, and we're kind of collaborating together as a team, more than we were.
- 18:25 Yeah, so the tap, there is a homebrew-homebrew-core tap, which is for all the macOS packages,
- 18:36 and then there's a Linux-Linuxbrew, sorry, Linux-homebrew-core, which is the Linuxbrew equivalent.
- 18:42 But you can, more and more third-party taps are providing support for both Mac and Linux.
- 18:48 And so the stuff you could install, for example, if you installed Linuxbrew on your own server,
- 18:53 on your own machine, in the home directory, you can, in theory, run any package that can be used with homebrew.
- 18:58 There's no underlying technical differences, it might just be that they don't work
- 19:02 because they need to specify more dependencies, or slightly tweak the install, or whatever.
- 19:06 But again, yeah, if you were working on Mac and Linux, it's relatively easy to create your own formula
- 19:10 that kind of can be in sync and work on both.
- 19:12 Sorry, I have a question. If you installed, say for example, in your home directory,
- 19:16 that would mean replicating much of the user that is already present in Linux system in your home directory?
- 19:22 Yes.
- 19:23 Okay, got it. Thanks.
- 19:24 Nice by design.
- 19:25 That's okay. I'm just asking.
- 19:27 Right. Again, you can see, you can definitely probably get a theme of the ones where I spent
- 19:34 longer on Google image search, trying to find something that was tenuously related.
- 19:38 So this is basically, homebrew previously had things called or later bottles.
- 19:45 So that was a way that we allowed people to declare a binary package.
- 19:50 By default, the binary packages on homebrew are just built for the macOS version that they're running on.
- 19:56 So if you're on the latest version of Mojave, previously that would have been, you only can get binary packages that are built on Mojave.
- 20:03 And because again, like Apple don't guarantee, they guarantee a reasonable amount of backwards compatibility, but certainly not forwards compatibility.
- 20:11 So we couldn't go and just build them on one version and assume they would work.
- 20:14 Now, after a fair bit of testing over the years and doing some tweaks to make sure this stuff works, we now do this by default, which will probably not be noticeable or make anyone particularly happy right now.
- 20:25 But when a new version of macOS is released, if you're running the betas, like we generally have a bit of a frantic run to try and bring on the new version.
- 20:32 So this won't be necessary now.
- 20:34 We will still rebuild them for the new version to get kind of more optimized binary packages.
- 20:37 But you will be able to use all the binary packages from the old versions on the newer version, which should make life a little bit nicer.
- 20:46 So this is another one.
- 20:47 The clue for this one is right at the bottom.
- 20:51 Any guesses?
- 20:53 Yeah, so we now actually verify if you're part.
- 20:59 So previously, if you passed an invalid option to like a homebrew command, you may have noticed we just silently ignored it because we just checked for, did you specify this particular option string?
- 21:08 But we now actually use a proper option parser, which validates the options for the formula, which validates the options for the command.
- 21:15 And the nice thing with this as well is it lets us all the manually curated previously like output for all the help commands and stuff like that is now generated from the options so that we know that the documentation and the options we actually check are one to one in sync.
- 21:29 So the next one, which is the last and the last change, which you should be aware of, is that now homebrew will run brew cleanup by default and automatically.
- 21:44 You can opt out of this behavior and some people may be inconvenienced by this and I apologize, but we've had basically years and years of people on Twitter and in person being like, oh, I never knew about brew cleanup.
- 21:56 And then I ran it and I saved like 20 gigs of space on my machine.
- 22:00 And to me, others may disagree to me, that strikes me as a really bad default when people need to go and search the man page to find something that they are expected to run periodically by themselves.
- 22:11 So now brew cleanup is run automatically every 30 days, like in full.
- 22:15 And then whenever you install or upgrade a package, it will basically like clean up the old versions behind itself as it does that.
- 22:22 So as I say, there's an opt out if you check the man page for that, but that's basically like a new thing, which will hopefully mean that it's a little bit easier for you to kind of keep your homebrew up to date.
- 22:30 So the goal with this now is that because I guess with 1.0 we had brew update would be run automatically.
- 22:36 So now you should be able to run, for example, just like brew install, brew upgrade and never actually need to worry about running other commands.
- 22:43 So that is a fine workflow. Basically, if the only command you ever run are install and upgrade, then you can still use homebrew quite well now,
- 22:51 which is hopefully getting us down to a nice minimal subset of commands that you need to know about in order to kind of have homebrew work nicely for you.
- 22:58 So that's the last of the features I wanted to run through and I have time for a couple of quick questions.
- 23:05 Seven minutes.
- 23:06 Seven minutes. So, yes.
- 23:08 Can you open this insight into what's the kind of status of homebrew cask upgrades?
- 23:14 Because I know there's been a challenge in the past.
- 23:16 Yeah.
- 23:17 Yeah.
- 23:18 So homebrew cask for anyone who's not.
- 23:20 Oh, sorry.
- 23:21 Repeat the question, says the thing on the bit of paper.
- 23:24 So the question was about what is the status of homebrew cask upgrades?
- 23:29 So homebrew cask for anyone who's not aware, that's a way of installing basically like binary and proprietary software,
- 23:35 such as say something like Google Chrome, that you want an automated and repeatable way of installing that
- 23:40 rather than going to the website and manually downloading it and click, click, click.
- 23:43 And it allows you to use a homebrew, basically more or less identical interface to homebrew as part of homebrew itself now to install that software.
- 23:52 So the question was about upgrading brew casks and what's the status with that?
- 23:56 Now you can basically, I'm looking at brew cask maintenance when I say this to make sure I'm not saying anything wrong.
- 24:02 But my understanding is you can now upgrade brew casks, but that some of them that have kind of weird versioning semantics
- 24:09 or don't provide upstream versions like may behave slightly differently.
- 24:13 Is that a fair description?
- 24:14 The latest casks will have to be forced to upgrade.
- 24:20 Yeah.
- 24:21 So some casks, the latest ones may need to have a forced upgrade, but otherwise that's how they work now.
- 24:26 Cool.
- 24:27 Next question.
- 24:28 Sorry, what's next?
- 24:30 Oh, what's next?
- 24:31 What for homebrew?
- 24:32 Yeah.
- 24:33 I don't know.
- 24:34 So, yeah, yeah.
- 24:35 So, I mean, that's one of the fun things that we're doing, which is why there's a bunch of maintainers in the room.
- 24:40 So we've been kind of building up our kind of funds and donations over the last few years,
- 24:44 and we're actually spending some money now.
- 24:46 So we have, I think, 14 homebrew maintainers who are going to be at a meeting in Brussels tomorrow
- 24:51 in which we're kind of going to plan some of the kind of future roadmap for the project,
- 24:54 both on the organizational side and kind of maybe talk about some features we want to build and stuff like that.
- 25:00 So, yeah, basically, so from my personal viewpoint, I guess in terms of the features that I build,
- 25:05 like there's nothing really big that I'm like, I feel like homebrew kind of needs now.
- 25:11 Like most of the really big things I feel like we've addressed in the last few years.
- 25:15 So my personal priorities are more around stuff like our CI system is like something that is a bit of a bus factor of one situation.
- 25:25 And I want to stop that being the case anymore.
- 25:28 And so that I, in case I get hit by a bus.
- 25:30 So, yeah, like no big things on the horizon, but just trying to make things better and make the community work better.
- 25:39 Any other questions?
- 25:42 Yes.
- 25:47 How do you get involved with homebrew?
- 25:49 So, yeah, if you go to the GitHub repository, that's the best bet and that's linked from the homepage as well.
- 25:54 That can describe basically some easy ways to get stuck in.
- 25:57 I would say, I mean, homebrew has 7,000 plus contributors at this point.
- 26:02 I would say it's probably one of the easiest projects to get involved with, certainly if you use it,
- 26:08 because there's loads of stuff which kind of works fine, but needs slightly tweaked or cleaned up.
- 26:13 And we have quite strict kind of linting tools.
- 26:15 There's one called brew audit, which will go and basically like complain about various minutiae and packages that aren't quite how we want them.
- 26:22 So that is a really good way to get started.
- 26:25 If you can run brew audit on packages that you already have installed and you already use,
- 26:29 and then you have a bit of a scratch or an itch type situation going on, then you can submit a pull request to do that.
- 26:34 Another command that's useful for that is there's a brew bump formula PR command,
- 26:39 which literally lets you upgrade a homebrew formula to a new version in a single commit and then will create the pull request for you.
- 26:48 So that's like literally the easiest way to get started with homebrew development.
- 26:51 And then you can kind of see how that goes and then you can get a first commit in homebrew
- 26:55 without even having to know how to commit and create a GitHub pull request yourself.
- 27:00 So thank you. Good question.
- 27:02 Well, I think we're questionless now.
- 27:05 So thank you everyone for coming and thank you for using homebrew.
- 27:08 Thank you.
- 27:20 Yeah, sure.
- 27:33 I wanted to ask some private questions.
- 27:35 Good job, man.
- 27:36 I got it now.
- 27:37 Yeah, I see that.
- 27:38 I don't know if I can find a .
- 27:41 Do you see anything?
- 27:44 I have a question.
- 27:46 That would be .
- 27:47 Sorry.
- 27:48 Oh, yeah.
- 27:49 Have you seen him?
- 27:50 I don't know.
- 27:51 Yeah.
- 27:52 You got a minute?
- 27:53 Let's go.
- 27:54 Oh, yeah.
- 27:55 Let's go.
- 27:56 Oh, yeah.
- 27:57 Let's go.
- 27:58 Oh, yeah.
- 28:28 Thank you.
- 28:58 Thank you.
- 29:28 Thank you.
- 29:58 Thank you.