 Cool. Right. Can everyone hear me? Is the mic working? Oh, just for the recording. Oh, just for the recording. Gotcha. Cool. Thank you for coming everyone. This is, I'm going to try and stand here mostly because my beeper is not working. Unfortunately, I can't do anything except laser you with it. So I'm going to talk today about Homebrew 2.0. Starting point, who's heard of Homebrew? Anyone in the room? Cool. A few people. Who uses Homebrew? Again, probably the same. Who here has submitted a pull request to Homebrew ever? Nice. Who here maintains Homebrew? Hey, there's more than just me today. Exciting. Thank you. And anyone submit a PR to Homebrew and had it rejected by me? Hey, only maintainers. That's okay. That's fine. Cool. And then we also have, who likes our new logo? In fact, no. A tougher question. Who can tell the difference between our new logo and our old logo? It's basically the easy way to tell in case you're wondering if you've got a vintage logo sticker on your laptop, is the new logo has a straight beer glass sides instead of overly curved one. We have one of the Homebrew cost-maintenors full-time job as a designer. In fact, is Vitor in the room? There, Vitor. Hello. We've not met before. Hello. Yeah, so he sent me a list of corrections of why their old logo didn't meet standards. So, like, now we have a nice new logo with more accurate beer glasses so you don't get confused and think that you're drinking when you're homebrewing or vice versa or whatever. Anyway, so, who am I? My name is Mike McQuade. Thank you very much for having me here. My worlds collide often because I both work at GitHub and work on Homebrew. My job at GitHub is not to work at Homebrew. That's a kind of happy side effect. And as a result, like, I'm often telling people, sometimes diplomatically, sometimes not, in GitHub, everything that I kind of want GitHub to do better for open source and then vice versa, kind of sometimes defending stuff that GitHub has done to kind of homebrew maintainers who are grumbling about it when it happens. But yeah, so if you want to talk to me about Homebrew or open source stuff or whatever, you can get me on Twitter. You can find my email address on my website and stuff like that. And I'm always happy to talk more about this type of stuff. I've been working on Homebrew for about 10 years. This year, I guess, 10 calendar years at least. I'm working for GitHub for about five. So, yeah, I was a happy GitHub user before I worked there. So I'm somewhat less biased than I might sound. We released Homebrew 2.0 yesterday, like I was sitting in the... Thank you very much. In the cafeteria, which was nice. It was kind of felt satisfying to actually tag the commit and submit it whilst here. So, yeah, I wasn't sure when we were going to release this. So because I did it yesterday, I figured we could do in this talk some of the things that my top 10 features, I guess, that we've shipped in Homebrew 2.0. Some of these things are not... So the difference between 1.9 and 2.0 were relatively minimal, but it was all... Most of these things were all things that I kind of wanted to see us do before we would call ourselves 2.0. It's kind of fun, because I guess this time, two years ago, I was doing the same talk about Homebrew 1.0, which had been released a few months before. So it was a fun little game going back and comparing the notes from a few years ago and seeing what we've done in that time period and what things we've changed and what we haven't and all this type of thing. 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 and then we're going to see if you can guess what the feature is. Homebrew maintainers, you are not allowed to guess. Right, so the first one... Anyone guess... Support, yes. So that is a picture of a... I know it looks like it's an actual photograph, but I did modify that myself. That is a picture of a mountain line, which was RSX 10.8 and it is crying because it is no longer able to run Homebrew. So it's a little bit weird, it's like a feature, but the main thing I guess many of you here work on software projects or open source software projects yourselves and that allowed us to delete enormous amounts of legacy code because versions pre-mounted line and below ship with like now really with the old compilers that don't support C++11, don't support C++14 and stuff like that. The X codes shipped separately to the combined line tools and sometimes the system came with X11, TAR didn't come with LZMA support and yeah, basically all these things that mean that you can remove a crap load of if statements all over the code which makes me happy. So the next one... Yes, so the options. This has been a little bit contentious recently, I don't know if you've noticed. So in the Homebrew core repository we now don't provide options on packages. Again, this seems like a weird thing. I'm starting with the horrible features that aren't really features for anyone except maintainers first and then we'll build into the nice stuff later. But anyway, so with the options stuff basically we've had a long running battle with options much like this dog here, the options did not want to behave. So the way Homebrew started out is a little bit of history if anyone hasn't been using it for a very long time or whatever. Homebrew started out as being a from source package manager for Mac. The only shipped for I think OSX 10.5 was the version that we were at when it shipped. So people were using it, people were building stuff from source pretty much like the expectation was that everyone who worked on Homebrew and was submitting stuff to Homebrew were the people using Homebrew and vice versa. There wasn't a long tail of users who didn't know how to kind of modify Homebrew it was pretty much like everyone who was using Homebrew was the ones contributing to it at the same time. And obviously over time the tool becomes more popular and more and more people use it and what ends up happening eventually is we end up getting bigger, we end up getting more support requests and we end up getting more bugs that people find with the software. And one of the biggest causes of bugs and you will sympathize if you run a from source like Linux distribution as well is the weird things people have on their system weird things they have set up in their dot files or their editors or whatever can like subtly break build processes really easily. So we ended up having binary packages for more and more stuff eventually binary packages for literally everything that is compiled. And then we've got to a point where we notice that effectively all our support issues are coming from a very small number of people who are doing from source builds of things and 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 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 and because we don't have the CI infrastructure we couldn't test that all those options actually work correctly. So 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 someone who knows math is nodding at me so I believe them. So basically you have a dramatic number of combinations and some of the options didn't work and then some of them only worked when in combination with other options. 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 like tough this is broken you can't do anything about it 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. 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 and what we're trying to do instead now is say something like ffmpeg we're trying to build it with a sensible default of things that people can use and when people ask for something basically we're generally adding as much as we can to provide as much support. So what we don't want to do is provide three different open jmpag encoders but we can have a discussion about what's the best one and then we can make that default. 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 this may be annoying for you and I apologize for that but longer term this is going to make it much easier to actually run the project and have it be sustainable. So next feature oh I forgot this wasn't working right so this is some counter strike reference I didn't really understand that 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 so this reference is the fact anyone want to guess oh sorry no you started and then I gave it away yes so we now have one main tap which is homebrew core previously a couple of years ago we had inside the homebrew organization a bunch of like third party repositories which was sort of official and sort of not 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 like literally no one had committed to them for years at a time and the problem is is because they're all under the homebrew umbrella it looks like these are all official and they should all work and 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 so I realized who doesn't know what a tap is anyone yep awesome at least one person stuck their hand up 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 and what you can do is you can use the brew tap command to add more more of these so that you can install stuff maintained by other people other than the main homebrew maintainers 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 linuxbrew homebrew core and again that's like a short version of describing where it is on github 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 right so the next thing this is very niche so this is like literally probably no one cares about this except me so I'm not even going to ask but homebrew core now is all or should be at least all open source software 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 being like mongerdb who are releasing open source software which they claim to be open source software and which other organizations such as in mongerdb's case I believe fedora debian and the osi currently claim to not be open source software so this puts us in a tricky situation because we are part of software freedom conservancy and one of the agreements of our terms is being part of that is our repository is all open source software 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 and everything in hubrew core should be open source under that definition 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 mongerdb back to the last version I can't remember what it is off the top of my head that was released under a osi license rather than their new SSPL thing 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 sources of business type thing 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 so we'll see what happens right the next thing is this anyone recognize this where you might see a page like this no but that's a good question a good suggestion 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 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 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 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 so it's it's not happy times but it's kind of cool like how it works and that gets updated on each push so that also means that as well as all the information you can get about a given formula that's double you get there and this is all basically like JSON and information that we're then representing nicely there's also a we document on the formula which provides like an API doc so you can now use that to kind of query JSON information about formula and about their analytics data as well if you look at the very bottom you can see installs 30 days so this is the nice thing we've kind of got to through this as well and I'm going to talk about there so in fact talk about that now so I don't know if anyone has seen this output ever again this is relatively niche and a new command but this is the output of brew info analytics so that's like 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 and we're kind of uncomfortable with there being a sort of an information imbalance and I can say as of the last few days there are only two Herber maintainers who have access to anything more than what the rest of the public have and that's purely for just administrative reasons because that's how the information is generated and the rest of it you can get all the information on formula.brew.sh and then you can use this brew info dash dash analytics which does a JSON call and pulls that data off formula.brew.sh and basically what that's giving you is like the install counts and the balances for each of these kind of formula here so here you can see an example of what I was talking about before of like the option removal over time so like the options are diminishing there so such that you get to 99.9% at the top and 99.88% at the bottom and again hopefully that illustrates the point that even back when a year ago when there was all these options these were being used by what 0.12% of the people who were installing WGAP but yeah so this is a really nice tool both for the maintainers but then also if you want to kind of I find it interesting it's got cast analytics up there now as well if you kind of almost just want to discover new software kind of based on popularity it's kind of interesting to just kind of click through and see what stuff is there and what it's being used for and you can kind of single click to the home page and the formula and all this type of stuff any guesses on this one? Linux support, hooray! so Homebrew and Linux which is also known as Linuxbrew is officially supported 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 in my humble opinion almost always a much better package manager than Homebrew installed on it 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 I believe some of the Linuxbrew maintainers for example have nice Linux machines like in high performance computing environments for example which they have access to the machine they have access to a compiler say but they do not have root access on that machine so because Homebrew itself you can actually technically install it anywhere we recommend you install it on the default location because then you get all the binary packages but because you can install it anywhere on Linuxbrew that means that you can basically have a fully working package manager just in your home directory which you can use without anything other than just a compiler basically so this has now been merged the projects are still somewhat separate in that we have our formula like the package descriptions are separate but then the Linuxbrew-brew like package manager repository the bits that are actually kind of running the code rather than just the formula descriptions those repositories have now been merged and we're kind of collaborating together as a team more than we were yeah so the tap there is a Homebrew dash Homebrew core tap which is for all the macOS packages the Linux-Homebrew core which is the Linuxbrew equivalent but you can more and more third party taps are providing support for both mac and Linux so the stuff you could install for example if you installed Linuxbrew on your own machine in the home directory you can in theory run any package that can be used with Homebrew there's no underlying technical differences it might just be that they don't work because they need to specify more dependencies but they tweak the install or whatever but again yeah if you were working on mac and Linux it's relatively easy to create your own formula that can be in sync and work on both yes yes right again you can see you can definitely probably get a theme of the ones where I spent longer on Google image search trying to find something that was tenuously related so this is basically Homebrew previously had things called more later bottles so that was a way that we allowed people to declare that a binary package by default the binary packages on Homebrew are just built for the macOS version that they're running on 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 because again like Apple don't guarantee they guarantee a reasonable amount of backwards compatibility but certainly not forwards compatibility so we couldn't build them on one version and assume they would work now after a fair bit of testing over the years and doing some tweaks to make sure the stuff works we now do this by default which will probably not be noticeable or make anyone particularly happy right now but when a new version of macOS is released if you're running the betas we generally have a bit of a frantic run to try and rebuild everything on the new version so this won't be necessary now we will still rebuild them for the new version to get more optimized binary packages 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 so this is another one the clue for this one is right at the bottom any guesses yeah so we now actually verify if you're past 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 but we now actually use a proper option parser which validates the options for the formula which validates the options for the command 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 so the next one which is the last and biggest change which you should be aware of is that now homebrew will run clean up by default and automatically you can opt out of this behavior but 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 boot clean up and then I ran it and I saved like 20 gigs of space on my machine 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 so now brew clean up is run automatically every 30 days like in full and then whenever you install or upgrade a package it will basically like clean up the old versions behind itself as it does that so as I say there is 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 so the goal with this now is that because I guess with 1.0 we had brew update would be run automatically 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 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 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 so that's the last of the features I wanted to run through and I have time for a couple of questions seven minutes so yes yeah so homebrew cask for anyone who's not oh sorry repeat the question says the thing on the bit of paper so the question was about what is the status of homebrew cask upgrades so homebrew cask for anyone who's not aware that's a way of installing basically like binary and proprietary software such as say something like Google Chrome that you want an automated and repeatable way of installing that rather than going to the website manually downloading it click click click 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 so the question was about upgrading brew casks and what's the status with that now you can basically I'm looking at brew cask maintenance when I say this to make sure I'm not saying anything wrong but my understanding is you can now upgrade brew casks but that some of them that have weird versioning semantics or don't provide upstream versions like may behave slightly differently is that a fair description yeah so some casks the latest ones may need to have a forced upgrade but otherwise that's how they work now cool next question oh what's next what for homebrew I don't know so yeah yeah so I mean that's one of the fun things that we're doing which is why there's a bunch of maintenance in the room so we've been kind of building up our kind of funds and donations over the last few years and we're actually spending some money now so we have I think 14 homebrew maintainers who are going to be at a meeting in Brussels tomorrow in which we're kind of going to plan some of the kind of future roadmap for the project both on the organizational side and kind of maybe talk about some features we want to build and stuff like that so yeah basically so from my personal viewpoint I guess in terms of the features that I build like there's nothing really big that I'm like I feel like homebrew kind of needs now and like most of the really big things I feel like we've addressed in the last few years 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 and I want to stop that being the case anymore and so that I in case I get hit by a bus so yeah like no big things on the horizon but just trying to make things better and make the community work better any other questions yes good question how do you get involved with homebrew so yeah if you go to the hub repository that's the best bet and that's linked from the home page as well that can describe some easy ways to get stuck in I would say I mean homebrew has 7000 plus contributors at this point I would say it's probably one of the easiest projects to get involved with certainly if you use it because there's loads of stuff which kind of works fine but you need slightly tweaked or cleaned up and we have quite strict kind of linting tools there's one called brew audit which will go and basically like complain about various minutiae packages that aren't quite how we want them so that is a really good way to get started if you can run brew audit on packages that you already have installed and you already use 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 another command that's useful for that is there's a brew bump formula PR command which literally lets you upgrade a homebrew formula to a new version in a single commit and then we'll create the pull request for you so that's like literally the easiest way to get started with homebrew development and then you can kind of see how that goes and then you can get a first commit on homebrew without even having to know how to commit and create a pull request yourself so thank you good question well I think we're question list now so thank you everyone for coming and thank you for using homebrew yeah sure thank you John yeah see you later I don't know what you're asking but I can file 12 blocks off, have you? I've been playing this oh yeah have you seen it? I don't know