Homebrew 2.0
CC Attribution 2.0 Belgium:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
McQuaid, Mike
Talk discussion the major features, leadership and community changes accompanying Homebrew 2.0.0 (which will be released at or shortly after FOSDEM 2019). This talk will be a talk running through Homebrew's major changes since 1.0.0 and some of the trials and tribulations since then such as maintainers leaving, the lead maintainer position being abolished, becoming more focused and enabling the community to do more for themselves.
 you is that me? cool right, can everyone hear me? is the mic working? just for the recording oh just for the recording, gotcha cool, thank you for coming everyone this is, I'm gonna 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 gonna 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 submitted PR to homebrew and had it rejected by me? hey all 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 maintainers 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 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, 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, sometimes defending stuff that GitHub has done to 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 and 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 5 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 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 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 have 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 ursx 10.8 and it is crying because it is no longer able to run homebrew so it's a little bit weird as like a feature but the main thing I guess many of you here work on software projects or open source software projects yourselves and they are all very different and that allowed us to delete enormous amounts of legacy code because the versions pre, mountain 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 combine 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 option 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 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 so 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 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 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 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 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 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 someone who knows math is nodding at me so I believe them yeah 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 and we don't feel very happy about just saying you know 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 jmpc 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 maybe annoying for you and I apologize for that but longer term this is going to make it much easier for just to actually run the project and have it be sustainable so next feature I forgot this isn'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 a loose Google image searching this morning so I apologize so this reference is the fact anyone want to guess and who was there? oh sorry no you started and then I gave it away there was an idea like to move more things into depth 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 unmaintained like literally no one had committed to them for years at a time and the problem is because they're all under the homebrew umbrella it looks like these are all official and they should all work 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 and 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 linux brew 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, debby 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 deport 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 role 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 formula.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 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 like it's crying blood so 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 w get there and this is all basically like JSON and code information that we're then representing nicely there's also a read document on formula.brew.sh 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 it installs 30 days so this is the nice thing we've kind of got to through this as well but I'm going to talk about later so in fact talk about 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 maintenance access and we're kind of uncomfortable with there being sort of an information imbalance and I can say as of the last few days there are only two home-brew 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 a 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 in 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. I have a question is that just for the tap that we would support? Yes so the tap there is a Homebrew-Homebrew core tap which is for the all the Mac OS packages and then there's a 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 and so the stuff you could install for example if you installed Linuxbrew on your own server 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 as they need to specify more dependencies or slightly 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 Sorry I have a question is that if you installed it for something in your home directory that would mean replicating much of the user app that has ordered presently in an existing in your home directory Yes That's fine then That's okay I'm just asking 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 or 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 Mac OS 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 go and just 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 this stuff works we now do this by default which will probably not be noticeable or make anyone particularly happy right now So this is the new version of Mac OS released if you're running the betas like 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'll still rebuild them for the new version to get kind of 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 So you have to have good guess from the old versions Yeah so we now actually verify, so previously if you passed an invalid option to a homebrew command you may have made it out of notice 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 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 brew clean up by default and automatically. You can opt out of this behavior and some people may be inconvenienced by this and I apologise but we've had basically years and years of people on Twitter and in person being like oh I never knew about brew 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 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 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. Can you go over this inside and do what the kind of space is for homebrew cask updates because I know there's been a challenge in the past. 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 and 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 kind of weird versioning semantics or don't provide upstream versions like may behave slightly differently is that a fair description. So some casks the latest ones may need to have a forced upgrade but otherwise that's how they work now. Cool next question. Sorry what's next? 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 maintainers 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? How do I get involved? Involve from the home page? 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 basically 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 needs 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 in 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 will 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 get 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. Thank you.
 you  is that me? cool  right, can everyone hear me? is the mic working?  just for the recording  oh just for the recording, gotcha  cool, thank you for coming everyone  this is, I'm gonna 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 gonna 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 submitted PR to homebrew and had it rejected by me?  hey all  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 maintainers  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 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, 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, sometimes defending stuff that GitHub has done  to 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  and 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 5  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 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  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 have 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 ursx 10.8  and it is crying because it is no longer able to run homebrew  so it's a little bit weird as like a feature  but the main thing I guess many of you here  work on software projects or open source software projects yourselves  and they are all very different  and that allowed us to delete enormous amounts of legacy code  because the versions pre, mountain 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 combine 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 option 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  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  so 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  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 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  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  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  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  someone who knows math is nodding at me so I believe them  yeah 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 and we don't feel very happy about just saying  you know 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 jmpc 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  maybe annoying for you and I apologize for that  but longer term this is going to make it much easier for just to actually run the project  and have it be sustainable  so next feature  I forgot this isn'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 a loose Google image searching this morning so I apologize  so this reference is the fact anyone want to guess  and who was there?  oh sorry no you started and then I gave it away  there was an idea like to move more things into depth  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 unmaintained  like literally no one had committed to them for years at a time  and the problem is because they're all under the homebrew umbrella it looks like these are all official and they should all work  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 and 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 linux brew 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, debby 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 deport 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 role 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 formula.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 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 like it's crying blood so 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 w get there and this is all basically like JSON and code information that we're then representing nicely  there's also a read document on formula.brew.sh 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 it installs 30 days  so this is the nice thing we've kind of got to through this as well  but I'm going to talk about later so in fact talk about 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 maintenance access and we're kind of uncomfortable with there being sort of an information imbalance  and I can say as of the last few days there are only two home-brew 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 a 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 in 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.  I have a question is that just for the tap that we would support?  Yes so the tap there is a Homebrew-Homebrew core tap which is for the all the Mac OS packages  and then there's a 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  and so the stuff you could install for example if you installed Linuxbrew on your own server 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 as they need to specify more dependencies or slightly 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  Sorry I have a question is that if you installed it for something in your home directory  that would mean replicating much of the user app that has ordered presently in an existing in your home directory  Yes  That's fine then  That's okay I'm just asking  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 or 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 Mac OS 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 go and just 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 this stuff works  we now do this by default which will probably not be noticeable or make anyone particularly happy right now  So this is the new version of Mac OS released if you're running the betas  like 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'll still rebuild them for the new version to get kind of 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  So you have to have good guess from the old versions  Yeah so we now actually verify, so previously if you passed an invalid option to a homebrew command  you may have made it out of notice 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  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 brew clean up by default and automatically.  You can opt out of this behavior and some people may be inconvenienced by this and I  apologise but we've had basically years and years of people on Twitter and in person being  like oh I never knew about brew 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 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 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.  Can you go over this inside and do what the kind of space is for homebrew cask updates  because I know there's been a challenge in the past.  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 and 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 kind of weird versioning semantics or don't provide upstream versions  like may behave slightly differently is that a fair description.  So some casks the latest ones may need to have a forced upgrade but otherwise that's  how they work now.  Cool next question.  Sorry what's next?  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 maintainers 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?  How do I get involved?  Involve from the home page?  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 basically 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 needs 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 in 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  will 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 get 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.  Thank you.
Homebrew_2_0_Ixx9LLFSHHA_0_131.png Homebrew_2_0_Ixx9LLFSHHA_132_263.png Homebrew_2_0_Ixx9LLFSHHA_264_3407.png Homebrew_2_0_Ixx9LLFSHHA_3408_5591.png Homebrew_2_0_Ixx9LLFSHHA_5592_6851.png Homebrew_2_0_Ixx9LLFSHHA_6852_7415.png Homebrew_2_0_Ixx9LLFSHHA_7416_8723.png Homebrew_2_0_Ixx9LLFSHHA_8724_9203.png Homebrew_2_0_Ixx9LLFSHHA_9204_9299.png Homebrew_2_0_Ixx9LLFSHHA_9300_14591.png Homebrew_2_0_Ixx9LLFSHHA_14592_15047.png Homebrew_2_0_Ixx9LLFSHHA_15048_17603.png Homebrew_2_0_Ixx9LLFSHHA_17604_17795.png Homebrew_2_0_Ixx9LLFSHHA_17796_20375.png Homebrew_2_0_Ixx9LLFSHHA_20376_20759.png Homebrew_2_0_Ixx9LLFSHHA_20760_22079.png Homebrew_2_0_Ixx9LLFSHHA_22080_22283.png Homebrew_2_0_Ixx9LLFSHHA_22284_22607.png Homebrew_2_0_Ixx9LLFSHHA_22608_22847.png Homebrew_2_0_Ixx9LLFSHHA_22848_23123.png Homebrew_2_0_Ixx9LLFSHHA_23124_23183.png Homebrew_2_0_Ixx9LLFSHHA_23184_24923.png Homebrew_2_0_Ixx9LLFSHHA_24924_25463.png Homebrew_2_0_Ixx9LLFSHHA_25464_25643.png Homebrew_2_0_Ixx9LLFSHHA_25644_29171.png Homebrew_2_0_Ixx9LLFSHHA_29172_29351.png Homebrew_2_0_Ixx9LLFSHHA_29352_29531.png Homebrew_2_0_Ixx9LLFSHHA_29532_32291.png Homebrew_2_0_Ixx9LLFSHHA_32292_32363.png Homebrew_2_0_Ixx9LLFSHHA_32364_40955.png Homebrew_2_0_Ixx9LLFSHHA_40956_41015.png Homebrew_2_0_Ixx9LLFSHHA_41016_41111.png Homebrew_2_0_Ixx9LLFSHHA_41112_41759.png Homebrew_2_0_Ixx9LLFSHHA_41760_42095.png Homebrew_2_0_Ixx9LLFSHHA_42096_42251.png Homebrew_2_0_Ixx9LLFSHHA_42252_42911.png Homebrew_2_0_Ixx9LLFSHHA_42912_43607.png Homebrew_2_0_Ixx9LLFSHHA_43608_44063.png Homebrew_2_0_Ixx9LLFSHHA_44064_44135.png Homebrew_2_0_Ixx9LLFSHHA_44136_44567.png Homebrew_2_0_Ixx9LLFSHHA_44568_44615.png Homebrew_2_0_Ixx9LLFSHHA_44616_45119.png Homebrew_2_0_Ixx9LLFSHHA_45120_45237.png