 So we're gonna, anyone who's been to one of my homebrew talks before will know there's a lot of hand-raising that has to go on, so I'm sorry. So who's who's heard of homebrew before now? Very good. Who uses homebrew? Hopefully you have heard of it if you use it. Who's submitted a PR to homebrew? Anyone submitted a PR to homebrew which was closed and rejected by me? Note the majority of the people with their hands up are homebrew maintainers, so that's that's fine. Great. Who likes putting their hand up? Way very wrong. All right, so My beeper, there we go. If you want to talk to me about anything in this talk is just ways either Twitter or my personal email Which is on github and my website and stuff like that. I come here with two hats on generally I'm not gonna talk too much about anything github related today, but that's my day job. They pay my bills They paid me to be here. Thank you very much github. I've been there about six years and I'm working on github sponsors now If you find any of that stuff interesting then feel free to like just grab me hopefully not physically during FOSDEM and talk to me about it and we can have interesting conversations and Similarly about homebrew if you want to talk about stuff like that Right, so this talk I'm going to talk about features and funding in homebrew. These two things are completely related They're definitely not just two blog posts. I wrote that are jammed together to make a normal-sized talk So who likes features in software? If you haven't put your hand up, I'm a little bit concerned Particularly new features are generally nice I like it when I get to work on new features and I like it when I release new features that other people like Which is very exciting But a lot of the time new features are not very good when I first released them because I suck at coding so The problem with homebrew pre 1.0 is homebrew There's a lot of design decisions that are made that might look smart But are generally made just because me or one of my predecessors are extremely lazy because That's how it is one of the nice things about being a software engineer for a living and doing open source I'm sure a lot of you can relate to this is The pain of knowing how what you would actually do if you had time to do things the right way Which I don't have time to do because I have now two small children And they don't tend to allow me as much time as my paid Overlords at github do to do things like write as many tests. I would like etc etc So one of the things you probably may or may not know with homebrew is it uses git and github pretty heavily So when you are doing updates of the package repository or updates of the package manager itself That's just doing a get to pull from github essentially so before homebrew 1.0 when you ran brew update or Eventually when that became automated for you then effectively that's just doing a git fetch Checking what the latest version is on github and pulling that down For the package manager itself and for all the packages now This is quite good when you want to just have everyone running the same thing all the time But it is not good if you like new features that are not broken because it makes it quite hard To have subsets of users that you roll features out to when they are not quite ready yet So now as of we're now at homebrew 2.0 whatever Most people will now End up when they run brew update on a stable tag Instead so we now tag things in the repository So when you run brew update the main package manager itself not the packages We don't have any plans to do that But the package manager itself you will kind of jump between tags if you are most people But if you are some special people then you will get effectively the same workflows before you will be on whatever The tip is at the master branch and whatever the latest commits are so that means if I push some PR or new commits or whatever it may be then you will get them almost immediately now You you may wonder am I some people or am I most people? Right, I'll tell you later, but ponder that question for now the way most software generally works for Doing betas and handling kind of features that maybe aren't quite ready yet Or just big refactors that might maybe aren't quite ready yet is they might pop up some little box asking people if you want to use the beta or not or In shorthand Do you like bugs or if you want to be a little bit more philosophical? Do you hate yourself personally? I find almost any software using a day-to-day basis to ask me if I want to use the beta channel I never do because like the general fact is because I'm using software I generally want it to work and when it doesn't work. I generally get very annoyed Another problem. I found is because I've been working from home from ten years I'm not really used to like working in office environment So now when software doesn't work the way I want it to work my reactions are increasingly ridiculous loud and Violent towards my computer So I don't really know that beta software is good for me or the structural territory of my house at this point On homebrew we do things a little bit differently that basically the fundamental question with homebrew instead of asking yourself You know do I hate myself enough to try this new software? It's really about do I hate you and the answer is no Of course, I don't well Obviously, I do still hate some people around homebrew a little bit probably no one in this room There's enough people blocked on the homebrew GitHub organization that you know that probably indicates a little bit But I mean to be serious though. Why do I hate you enough to? Make you some people why do I hate you enough to make you sit on the On the master branch when you could be on a lovely nice stable tag. That's a lot more tested Well, so if you end up grouped on that little group, I happen to think you're a little bit special I happen to think you're curious there's something about you that makes you a little bit different from the average person on the world and I think you're probably a bit more likely to be helpful and That's a weird thing for me to have maybe attributed about you without knowing anything else about you So how do I? Identify these things well In homebrew we have the concept if you look in the man page we group our Commands by we have commands and we have developer commands So a homebrew command might be the normal way that you would use homebrew was something like brew install W get Most people are using these when they invoke homebrew when they work with it This is how most people's entry point to homebrew is through these But then we also have things called developer commands Which are what you use if you want to contribute to homebrew if you want to be a homebrew maintainer If you want to submit a pull request and make some changes even just like locally for yourself Then you're gonna run one of these developer commands So the fun fact is we track Not externally, but we track on your local machine whether you've ever run a developer command or not and 99.9 percent of people never have and point one percent of people have so 99.9 percent of people get The stable branch I realize now I flipped these the wrong way around but oh well 99.9 percent of people get the stable branch and point one percent of people get the bastard branch So again, why would we do this? This is maybe a little bit weird This was based on Experience over the years of kind of observing how these different groups of users tend to file issues So people who've never run developer commands you tend to get issues that look a little bit more like this Those of you who are maintainers of any software would know the dreaded phrase. It doesn't work It's generally not super helpful in figuring out exactly what the problem is and what the changes are that need to Be made to do things to be fair though I'm not blaming these people because again with tools like homebrewed despite being I guess a standard way a developer tool It's now increasingly used by a lot of people who are may not be developers at all may be following some guide online whatever it may be and they're not familiar with the kind of Open source free software bug reporting way of doing things. They don't know that you need reproducible instructions, etc, etc But as a result since we kind of made this move people who only have run developer commands tend to make bug reports that look a little bit more like this or Quite a lot of the time I would say 50% of the time when it's a bug that's affected them directly and it is a relatively simple fix Instead you get something like this, which is very nice This is generally when this is explained. I find 18 90% of people go. Oh, that's interesting whatever and 10% of people get very upset and don't like this idea that we are deciding for them Effectively whether they get the unstable stuff or not if you are one of those people then you can set this in your environment Homebrew update to tag that basically says even if you run a developer command or anything like that You always want to be on the stable branch. So don't trick you into ending up on the master branch inadvertently If you're the opposite and you're just Excited to get out there and find some bugs Then you can set homebrew developer equals one that will go and that there's a few more things that will partly Make sure you're always on the master branch, but then there's a few things that are warnings or don't print warnings But that will then turn into errors and stuff like that Which would be useful for you to help us fix generally if you want to set this there I would say the high level for a command like for a flag like this is I'm prepared to submit pull requests to fix things that I encounter if that does not feel like you then feel free to not set that so Sometimes we get situations where we are working on new features where that like Split between master and stable ties is not quite enough So again a lot of stuff we do we will go and Make a new change whatever it may be and then we do a new release of the the package manager itself maybe once a week or so and then Once things kind of get into that stable tag then they'll get rolled out to everyone and normally kind of You know if we roll out something a bit more dramatic Then we'll give it a couple of days before we do a release to make sure that kind of any of those beta testers have Be able to kind of potentially pick up on that file an issue file a PR or whatever it may be and also like the humble maintainers ourselves because again, we are all on the the beta channel effectively But sometimes that's not enough sometimes you need something which is going to last a bit longer that may Need toggled on and off for individual machines or individual people whatever it may be so for that We use feature like who's familiar with the concept of kind of feature flagging Okay, like some people might have gone so again back to the feature problem of You know, we might want people to try new features But often they are completely broken when we first make them particularly with stuff like homebrew There's some stuff where if you want to change the way the compilation process works for example It's not feasible for me to test 4,000 packages on my machine Before I roll that out to everyone and but at the same time I don't want to just roll that out to everyone and break their stuff So again, do I hate you? Not yet because I Want to try and make sure this stuff is a little bit more refined before it ends up being with you so generally the way we do that is Similar, I guess before the way basically everything is controlled in homebrew is through environment variables because we don't have a Configuration file we just decided this is the way we like to do things so We let users set environment variables for these particular cases So generally in the first case of I'm rolling out something that I suspect is really broken Then the first person to set that will be me I'll set that on my personal machine because I'm using homebrew for like work stuff. I don't basically wait to see what breaks Internally in the code obviously we're checking for the presence of that variable And then we can do like slightly different logic internally whether you have that flags out or not Then if we want to go a little bit more advanced than that We can check if humbrew developer is set So that's gonna basically group in all of the humbrew maintainers and anyone who manually sets that flag For which I don't think there are a whole number of people But again, that's sort of the group who opted in to receive them more warnings and problems and stuff like that Then if you we want to Not just put something in the master bunch of a stable tag We can check that's the equivalent variable that's set for us for people who have run a developer command at some point And then at that point then it generally ends up in the stable branch So the the flow through these things is generally the first person testing a new feature that I makes at least is gonna be me Then it's gonna be our CI system We might innate black globally so we can see that across all the packages then various maintainers will enable it then the people in the base channel and then everyone else so Hopefully then we end up with new features that are not completely broken So a brief side tangent for an employer plug So that's one of the things about github that I kind of stole this idea from from them Obviously people have been doing feature flying before github, but they do this stuff generally very heavily internally as well So almost anything I work on at github is gonna be used by feature flag At least if it's some new feature or some big change in behavior It's gonna feature fly to just me first then my team then the employees at github And then sometimes we have stuff if it's very relevant to open source maintainers will flag in like people in a kind of subset Maintainers community we have and then we've started doing more like beta opt-ins and things like that and then we roll out to everyone So the next part of this talk. There's not really a great segue, but I'll try and make one up anyway so talking about funding so again, we There's a lot of talk about featured development and open source kind of getting better and better and stuff like that and There's been in the last few years I don't know how many of you picked up on this a lot talk about like oh no is open source broken because You're starting to see big companies who make things You know make like maybe maybe you make some sort of thing that's maybe a bit like a database but even better and You want to write a bunch of codes over the years to make this amazing not quite a database But almost like a database really really good and you want to release it under an open source license and have lots and lots of people use it But the problem is you can't get anyone to give you any money. So You basically go and maybe see if you can convince people to pay you for the open source project And no one really does and stuff like that. So you're asking yourself. Well, how can I make me feature development? Okay, I'll make a company around my open source product and then you because you're making open source No one's gonna pay you directly for your thing But maybe if you go to some people who can help people with stuff like this then they can generally You know throw some money at you and then that might help your company to grow over the years and things like that And then but the problem is eventually get to a point where your company is making me making some money But they're still not profitable and whatever it may be and then you you hit a bit of a wall Where you realize like oh, there's all these big kind of cloud providers who are not in our opinion Giving us the fair share that we're due and then as a result you go and re-license all your stuff to non open source licenses You then say that that is open source software still and try and make package managers package your stuff anyway And just keep telling everyone that it's open source team Well, it's not anymore and then go around telling people open source funding is broken. So It's open source funding broken though in my opinion open source companies are broken It doesn't really work to have VCs fund massive organizations We're gonna go and then just change their licenses five years later But in short, I don't really care about this problem and neither should you because I think the problems that Bigger organizations who might make open source databases and then change their licenses a few years later to other things Not that I would name any names The types of problems these types of organizations have I think are completely irrelevant to the open source ecosystem as a whole Because actually at the end of the day What is your project need money for probably it does not need money for a shiny office It does not need money for a Tesla in your drive. It does not need money for a Whatever other things venture capitalist money injections to your organization give you so If you want your Tesla, you're gonna have to figure out another way of doing it but if The problems you are having which mean that your project needs money are things like you need places to host your binaries and that Actually needs to be paid for or you need some sort of cloudy thing to run some services in and that has bills That needs to be paid or in our case you need a CI system that actually tests all your packages But none of the kind of cloud-coasted CI systems is anywhere near the scale or provide the infrastructure that you need Then you're gonna need to get some money somehow from somewhere So homebrew find ourselves in this situation in 2013 We didn't have any CI back then it wasn't as much of a thing certainly back then Travis See I wasn't supporting Mac builds and stuff like that So there was basically nothing that looked like it was gonna be an option for us really to do So we wanted to get some money and the way you got money off random people on the internet You didn't know in 2013 was Kickstarter. So we once Kickstarter we got enough money to Buy ourselves some computer hardware and then we installed that and kind of ran that for a good few years And that was fine Unfortunately, we had a few problems with this right so partly Having physical hardware means that some sort of humans are gonna have to manually deal with that normally the humans who are physically closest to the hardware, which was me and That sucks when that person is you all the time Secondly we had leftover money from the Kickstarter that we wanted to do stuff with at some point and we Feel kind of we are obligated to do something with at that point But that was again in a bank account in the UK in pounds and I was the only maintainer in the UK So again, that was not ideal as well And this stuff is all sounding very bus factory of one So I was trying to go and shopping for other solutions. So 2016 we kind of started talking with the software freedom Conservancy after looking at various other kind of software foundations I'm thinking that was the the route home. We was gonna kind of start to go down in order to kind of have some Basically more bus factor around our finances and stuff like that. So that provides us with a legal entity So that entity could be the thing that owns things like physical hardware rather than any individual It provides us with a 501c3 which is in the US the shorthand for an organization that can receive donations and then people can claim that back on their tax return and Like companies like stuff like that for donations as well because it makes it basically more valuable for them to give you money And again with it being 2016 We had like a PayPal account that we could get money sent to us relatively easy for and donations and a bank account if people want to go like and physically wire transfer stuff, so Companies generally prefer this route there. So this was a little bit more handy but the problem with this model of having like it's just soliciting donations and getting them is It's not very stable, you know You might get a nice and we've got some big like one-off anonymous 10,000 dollar donations from big organizations or whatever it may be And that's really cool and really helpful But that doesn't particularly with the stuff I mentioned before if you're paying a monthly fee for something You don't want big lump payments You want you would happily take lower payments which are rolling on month over month of the month so in 2017 We moved to that way of asking people for money on the internet which is patreon and and That worked for us relatively well We started to get a little bit of kind of monthly income and things like that But again, you still have that problem of how do you actually solicit for people to give you a bit more money? So we started off by just putting it in our read me and saying, you know We could do with some money for x1z. Please give it to us that didn't really work very well Like again, we got dribs and drabs, but most people are not checking that section of the read me to see stuff like that Then 2018 we have like a I think 10,000 followers on Twitter or whatever at this point So we pushed on Twitter kind of asking and then we saw a little bit of an uptick there But the really impactful thing to our funding in 2019 was we added a little message to the application itself and to the installer so When you first install homebrew or when we roll out really things which we think are important to users such as stuff like analytics we Display a little one-time message we check that you have a tty which is basically our way of More or less seeing while you're not running this within some other script And you're probably gonna actually see this message and we do like a console beep and stuff like that So we've done that previously for kind of analytics to let people know that this is a thing we're doing and how to opt out So we thought hey we could do this as a one-time message people will only see this once per machine or When they install a new machine To solicit some donations more or less just saying okay, do you want to donate to the project and then? That's what happened here ish So that that made a really so this was when we sort started I guess just before 2017 and had just the donation stuff in the read me again picking up slowly over time Big jump there when we started asking on Twitter And then the jump when we added the new the little mag message was fairly ridiculous So and since then we've been sitting fairly sort of statically on between two and a half and three thousand dollars a month Which is pretty great and then as of 2019 we've added kind of get-up sponsors, which is like plug plug That's why I work on at work So that's a nice other way for us to kind of get funds organizations are still in beta for that So we were kind of one of the early organizations to get into that but again within the next few months That should be open to all organizations But again, that's a way that we've been able to get monthly income through The get-up platform and that's like a few hundred dollars a month at the moment as well So with that combined we have kind of two and a half to three thousand dollars a month Which actually now gives us enough money to partly have maintainers fly here And we have a our annual general meeting for the second time on Monday and Partly to start actually paying for hardware and things like that that we need to run the project effectively And we've done this without selling user data Which is again things which we have been accused of doing in the past people worry about stuff like that with analytics But it's something that we wouldn't ever consider We've done it without asking people to donate again and again and again like again. I I kind of I don't Mind when programs I use do that because I feel like that's within their right But you do have to wonder like if someone has said no thanks I don't want to make like three or four times how likely they are in the fifth six or seven time to Decide to donate and not just get really annoyed We've done that without having a sort of like homebrew prohibition some special version of homebrew with Features limited which are not open source. So people need to pay for whatever and Surprisingly, we've done it without anyone really accusing us of selling out And we've not had any backlash as far as I can tell to our donations in our funding stuff This may well be partly because we my advice maybe to other projects would be we effectively don't Really make any promises on what you will get for donating to homebrew and what the money will be spent on Except the fact that you know We're part of a software foundation and this isn't going to be like none of the money has gone in any maintainers pockets individually or directly or anything like that and before that would happen there would be a very Formal process of contracting and stuff like that. So basically although we can't promise you what your money would be spent on If you donate it to homebrew we can say that it will be used to kind of for the project's mission I'm not just to buy me a Tesla So with that I think we can say that homebrew is still quite good and Things seem to be going better for the project as a result of doing the funding changes. So thank you very much and Do we have time for questions?