Homebrew / homebrew-core

🍻 Default formulae for the missing package manager for macOS (or Linux)
https://brew.sh
BSD 2-Clause "Simplified" License
13.57k stars 12.31k forks source link

Remove all options from Homebrew/homebrew-core formulae #31510

Closed MikeMcQuaid closed 5 years ago

MikeMcQuaid commented 6 years ago

Options in formulae don't produce a good user experience because they have to be built from source, we don't test them in CI and each combination of options provides a new chance for new failures to occur. We should seek to (eventually!) remove all options from formulae in Homebrew/homebrew-core in favour of enabling as much non-exclusive functionality as possible in a given formula for widely used options or encouraging the community to maintain their own custom options in a tap (e.g. https://github.com/denji/homebrew-nginx/blob/master/Formula/nginx-full.rb). As an absolute last resort if we need to depend on the same formula multiple times with different options (e.g. https://github.com/Homebrew/homebrew-core/issues/13133) we can consider vendoring formulae using resource blocks or even duplicating formulae.

This should be done in multiple phases:

  1. formulae that have build error issues created with particular options should have the options removed immediately (rather than a fix being merged)
  2. less popular formulae should have all their options removed
  3. popular formulae (e.g. https://formulae.brew.sh/analytics/install-on-request/90d/) should be prioritised for having their defaults adjusted (depending on analytics usage) to get the best balance of functionality without options.

I'm open to thoughts on the above and different approaches to solve the problem as well as additional tooling required in Homebrew/brew to accomplish this.

jhrmnn commented 6 years ago

What about a more general approach akin to Debian's alternatives system? That could handle the issue with options as well as other things.

One thing that I've always missed in Homebrew was being able to pick an implementation of MPI: Open MPI vs Mpich. Currently when one installs Mpich, packages depending on MPI (and so on Open MPI in Homebrew's logic), such as Scalapack, have to be built manually, else Homebrew complains about missing dependencies.

chdiza commented 6 years ago

Options in formulae don't produce a good user experience because they have to be built from source, we don't test them in CI and each combination of options provides a new chance for new failures to occur.

Those things do happen with options, but I don't think it follows that eliminating options provides a better user experience. A formula that lacks needed options means the user makes their own tap, in which case...it will be built from source, not tested by CI, and provides new chances for failure. I.e., those three things that an option-using user currently faces will still be faced just about as often once options are eliminated.

MikeMcQuaid commented 6 years ago

What about a more general approach akin to Debian's alternatives system? That could handle the issue with options as well as other things.

We can't really do this given our limited CI and options aren't a good approach for this. "Picking an implementation" isn't really something Debian supports for compile-time things; as far as I'm away that only applies for things that can be swapped out underneath (i.e. are API and ABI compatible) without an application change. This is theoretically possible as something we could do but mostly people are requesting the ability to swap out things that aren't necessarily compatible.

Those things do happen with options, but I don't think it follows that eliminating options provides a better user experience. A formula that lacks needed options means the user makes their own tap, in which case...it will be built from source, not tested by CI, and provides new chances for failure. I.e., those three things that an option-using user currently faces will still be faced just about as often once options are eliminated.

I think a less flexible Homebrew/homebrew-core that works for every user every time is superior to a more flexible Homebrew/homebrew-core that works for every user 90% of the time. That's a product/design difference of opinion I realise we don't share.

Essentially, though, you touch upon a good point: for things that have to be built from source or build using options there's no real difference between Homebrew/homebrew-core and a tap that doesn't provide bottles. As a result it's much, much easier for the community to step up there and provide solutions to these problems without adding the negative perception when Homebrew/homebrew-core doesn't work and the issues that result from hard to reproduce, option, from source builds.

zbeekman commented 6 years ago

I think a less flexible Homebrew/homebrew-core that works for every user every time is superior to a more flexible Homebrew/homebrew-core that works for every user 90% of the time. That's a product/design difference of opinion I realise we don't share.

I personally tend to agree with @chdiza. (Although I'm willing to concede that I may be in the minority here, and I may not have had the extensive experience that led @MikeMcQuaid to those conclusions.) However, if we go this route, I think we need to greatly improve our documentation for setting up dedicated taps, with all the bells and whistles like bottling etc. I was looking into this a few months ago, and there is no straightforward guide on how to accomplish this. I finally stumbled upon this repository, which seemed like the best example for me to follow. Better documentation for users/contributors of the bottling process would make this type of migration much less of a bitter pill for some (like me!) to swallow.

MikeMcQuaid commented 6 years ago

I think we need to greatly improve our documentation for setting up dedicated taps, with all the bells and whistles like bottling etc. I was looking into this a few months ago, and there is no straightforward guide on how to accomplish this.

The current documentation (e.g. https://docs.brew.sh/How-to-Create-and-Maintain-a-Tap and the brew tap-new command in the manpage) is sufficient for many people to setup taps. If you would like to extend that documentation: please feel free.

with all the bells and whistles like bottling etc.

This doesn't really make sense; options are never bottled anyway so to remove them doesn't imply we need to provide an ability for others to bottle them.

Better documentation for users/contributors of the bottling process would make this type of migration much less of a bitter pill for some (like me!) to swallow.

The issue isn't documentation, really, it's setting up free building of macOS packages (on multiple OS versions) with free uploads to a free CDN. I don't think that problem is ours to solve, really, but again: if you're interested in solving it please feel free.

zbeekman commented 6 years ago

I’ll review the documentation again. It may have been updated since I last looked. I think some insight, not in to how to find a free CDN and CI/CD service, but how we are doing it in our specific case, could go a long way to teach by example. Yes finding the right free/cost effective combo is non trivial, but when I was last looking it, I found the documentation of shipping bottles somewhat opaque. I’ll review it and do some code spelunking to try to improve it myself.

I realize the bottling issue is somewhat orthogonal to the options, however an important use case for Homebrew is in CI pipelines. Being able to install precompiled dependencies (built with appropriate options) can mean the difference between a job finishing in time, or a build hitting the CI time limit and failing.

I’m not voicing my opinion here to try to get Homebrew to reverse course on this decision; I understand the motivations and trust in the process that led to the decision being made. Anyway, now is the time to “get up or shut up” I suppose, and go review the documentation and see if I can work up a decent PR. 🙂

Cheers! On Wed, Sep 5, 2018 at 4:25 AM Mike McQuaid notifications@github.com wrote:

I think we need to greatly improve our documentation for setting up dedicated taps, with all the bells and whistles like bottling etc. I was looking into this a few months ago, and there is no straightforward guide on how to accomplish this.

The current documentation (e.g. https://docs.brew.sh/How-to-Create-and-Maintain-a-Tap and the brew tap-new command in the manpage) is sufficient for many people to setup taps. If you would like to extend that documentation: please feel free.

with all the bells and whistles like bottling etc.

This doesn't really make sense; options are never bottled anyway so to remove them doesn't imply we need to provide an ability for others to bottle them.

Better documentation for users/contributors of the bottling process would make this type of migration much less of a bitter pill for some (like me!) to swallow.

The issue isn't documentation, really, it's setting up free building of macOS packages (on multiple OS versions) with free uploads to a free CDN. I don't think that problem is ours to solve, really, but again: if you're interested in solving it please feel free.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/Homebrew/homebrew-core/issues/31510#issuecomment-418644113, or mute the thread https://github.com/notifications/unsubscribe-auth/AAREPOm8dgPyVzRY-ormPrx99muQhI14ks5uX4qQgaJpZM4WNX12 .

DomT4 commented 6 years ago

For the record: I think the mass removal of options is patently ridiculous & achieves nothing except stymying debate about individual options because those PRs are too large to easily discuss just one or two elements.

I also think it is ridiculous to move ahead with this after 10 days of this issue being opened, when precisely two maintainers thus far have weighed in on the subject, and the core team as a whole was essentially rebuilt from the ground up less than one month ago.

Some of these options also have effectively zero maintenance burden, or have never been knowingly problematic in terms of either analytic-logged build failures or human reports, and yet get removed anyway. Other options were the product of days or weeks of discussions about how best to resolve other issues, like Perl binding versioning & incompatibility, and have been casually thrown out the window with zero debate.

I truly tip my hat to the "Ram the change through as rapidly as possible and hope most people, including maintainers, don't notice or object until it's too late" tactic.

zbeekman commented 6 years ago

We’re all passionate here and care deeply about Homebrew. As far as I can tell no action has been taken yet. Let’s stick to the facts and let’s get others from @Homebrew-core to weigh in. I don’t think bristly accusations are warranted. (Last paragraph)

There is a degree of obligation on us maintainers to follow these proposals and issue tickets and voice our opinions. I’m not sure that putting every change to a vote would be productive, but it would be good to ensure maintainers feel some ownership and involvement in major policy decisions. I also realize that I don’t have all the answers. On Wed, Sep 5, 2018 at 6:14 PM Dominyk Tiller notifications@github.com wrote:

For the record: I think the mass removal of options is patently ridiculous & achieves nothing except stymying debate about individual options because those PRs are too large to easily discuss just one or two elements.

I also think it is ridiculous to move ahead with this after 10 days of this issue being opened, when precisely two maintainers thus far have weighed in on the subject, and the core team as a whole was essentially rebuilt from the ground up less than one month ago.

Some of these options also have effectively zero maintenance burden, or have never been knowingly problematic in terms of either analytic-logged build failures or human reports, and yet get removed anyway. Other options were the process of days or weeks of discussions about how best to resolve other issues, like Perl binding versioning & incompatibility, and have been casually thrown out the window with zero debate.

I truly tip my hat to the "Ram the change through as rapidly as possible and hope most people, including maintainers, don't notice or object until it's too late" tactic.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/Homebrew/homebrew-core/issues/31510#issuecomment-418899106, or mute the thread https://github.com/notifications/unsubscribe-auth/AAREPMf5nBpcV_6MEJVW4Jc4SWioWezJks5uYEzagaJpZM4WNX12 .

DomT4 commented 6 years ago

We’re all passionate here and care deeply about Homebrew. As far as I can tell no action has been taken yet.

https://github.com/Homebrew/homebrew-core/pull/31847, https://github.com/Homebrew/homebrew-core/pull/31830 & https://github.com/Homebrew/homebrew-core/pull/31799. That's a lot of "no action".

zbeekman commented 6 years ago

31847, #31830 & #31799. That's a lot of "no action".

Fair. I'm on the train and my internet connection is terrible, so I didn't do due diligence before I made that statement.

While I personally like options, and find that they add value to Homebrew for power users or devs who need a certain package built a certain way, I do see that there is a trade off and it's not a one sided issue. If it were put to a vote (I'm NOT saying the it necessarily should be...) I would vote to keep --devel and --HEAD options, and want to evaluate other packages on a case by case basis.

But anyway, I'd be curious to hear what other from @Homebrew/core think, if they have a strong opinion. There's a fairly good chance that they all agree with Mike which is why they didn't feel the need to comment here... 🤷‍♂️

sjackman commented 6 years ago

On the whole I'm not a fan of options for the reasons cited by Mike. I do like --HEAD, because it can be useful when troubleshooting upstream bugs. I don't see much benefit in going to the effort of removing options that have caused no documented trouble, either in analytics or issues. I'm in favour of removing options that have documented trouble. I'm in favour of adding no new options to formulae.

fxcoudert commented 6 years ago

@DomT4

mass removal of options

I'll be holding the open PR, and not opening new ones. I apologise if you felt those were rushed: it clearly was not my intention: I just got a little time to do cleaning-type stuff while I was sat at a conference, and took it. Given that: 1. the PR was open for more than a week, 2. it doesn't look much like a call for discussion, but a plan for action, and 3. no maintainer has objected, I figured it was OK to move forward.

I've tried to remove options from formulas with very few install counts, i.e. options removed should be lower than 0.5% in usage or lower than 5 in absolute install count (per 30 days).

fxcoudert commented 6 years ago

As to my personal opinion: apart from a few formulas where they are "natural" (aspell, some video or audio players), options run counter to our main goal, i.e. “just working”, for the arguments given by Mike. If we want to keep many options, I'd like us to consider running all option combinations through CI (which limits their number) or officially declare them “semi-supported” (i.e., we remove them when they break, unless someone patches it).

claui commented 6 years ago

I feel that keeping things lean and simple is a good thing. Also, existing documentation on maintaining a user tap is just fine.

What we could do better is advertise the user tap feature more often. As in, whenever options pop up as a topic in a PR.

MikeMcQuaid commented 6 years ago

I truly tip my hat to the "Ram the change through as rapidly as possible and hope most people, including maintainers, don't notice or object until it's too late" tactic. I don’t think bristly accusations are warranted

@DomT4 I strongly agree with @zbeekman: this was not an acceptable way to refer to the work of other maintainers such as @fxcoudert who received a PR approval before merging based on an open "help wanted" issue.

I also think it is ridiculous to move ahead with this after 10 days of this issue being opened, when precisely two maintainers thus far have weighed in on the subject There is a degree of obligation on us maintainers to follow these proposals and issue tickets and voice our opinions.

Again, I agree with @zbeekman: this issue was open for 10 days in which you have been active on this issue tracker and in Slack and you had no comments on it during that time. You've also (re)joined the team more recently than @fxcoudert; he has no obligation to ask you for permission to make a change like this.

I'll be holding from the open PRs. I apologise if you felt those were rushed: it clearly was not my intention: I just got a little time to do cleaning-type stuff while I was sat at a conference, and took it. Given that: 1. the PR was open for more than a week, 2. it doesn't look much like a call for discussion, but a plan for action, and 3. no maintainer has objected, I figured it was OK to move forward.

I've tried to remove options from formulas with very few install counts, i.e. options removed should be lower than 0.5% in usage or lower than 5 in absolute install count (per 30 days).

You have nothing to apologise for @fxcoudert. It's worth noting we've not been accepting options on new formula for a long time now. When we imported formulae from taps (many of which were in our top 1000 and sometimes top 100) we've removed all options in doing so. This has resulted in dramatically fewer build errors and those formulae being easier to support.

To be extra explicit: this has been an undocumented but planned policy for several years.

What we could do better is advertise the user tap feature more often. As in, whenever options pop up as a topic in a PR.

@claui I agree.

Options in formulae don't produce a good user experience because they have to be built from source, we don't test them in CI and each combination of options provides a new chance for new failures to occur.

@fxcoudert Is the only person in this thread to even offer a suggestion of how to resolve any of these issues (run them all through CI). If someone points out an engineering problem like this: suggest an alternative solution.

MikeMcQuaid commented 6 years ago

I would vote to keep --devel and --HEAD options, and want to evaluate other packages on a case by case basis.

To be clear on the scope of this PR: I do not consider --devel or --HEAD to be "options" as far as this PR is concerned so I'm not proposing their systematic removal.

MikeMcQuaid commented 6 years ago

I don't see much benefit in going to the effort of removing options that have caused no documented trouble, either in analytics or issues

@sjackman on this it's worth noting:

each combination of options provides a new chance for new failures to occur

so even if option A and option B may both work fine when both specified together they produce a failure. This produces a dilemma: does option A get removed, option B get removed or what? I'm just personally unconvinced that this is a problem worth us dealing with when taps can maintain optionful formulae as well as we can.

chdiza commented 6 years ago

each combination of options provides a new chance for new failures to occur

Each new formula provides a new chance for failures to occur, and I don't see much objection to adding new formulas. Each formula version bump provides a new chance for failures to occur, but HB bumps versions all the time. So it can't just be that options will bring more failures or whatever, but that the cost isn't worth the benefit. I've seen no argument whatsoever for this last part. I've only seen a list of potential costs.

Some of these alleged costs really don't seem costly at all to me, and are unlikely to be seen as costly by an option-wanting user. Options won't have CI, but so what? None of Homebrew had CI for a long time, and while it's certainly better with CI, a CI-less Homebrew was much better than no Homebrew at all. Same for options. Options must be built from source, but so what? Having to build it from source is better than not having it at all.

But even if they really were costly, still what I'm seeing is:

"We won't have options, because that would suck for you: you'd have no CI and you'd have to build from source, and also the build might not work. So our advice is to go make your own tap, where you will build from source and not have CI, and where the build might not work."

That is so absurd that I think the CI and source-build stuff are just extras obscuring the real motivation, and the real underlying thing is "We won't have options, because that sucks for us: it will generate tickets. So our advice is to go make your own tap; and if your build fails you shouldn't make a ticket (except maybe when it seems clearly our fault)." This is also absurd, but in a totally different way.

MikeMcQuaid commented 6 years ago

Each new formula provides a new chance for failures to occur, and I don't see much objection to adding new formulas.

Each new formula can be bottled. Bottle failures are much rarer than build from source failures (which are rarer than non-CI-tested build-from-source failures e.g. options).

None of Homebrew had CI for a long time

Yes, and it sucked. I was a maintainer before we had CI and no-one else in this conversation was. Homebrew was worse quality, had a poorer user experience and many fewer users and contributors as a result. Relatedly, I want Homebrew to outlive my involvement in the project and part of that is defining the scope of the project in relation to the expectations of the users and, frankly, yes making the project easier for the maintainers to maintain and focusing on the stuff that only we can do in this tap and not the stuff that a copy-paste into another tap will do identically.

That is so absurd ... obscuring the real motivation ... also absurd

And at this point the technical discussion ends and the hyperbole begins. If you're going to speak in this way this conversation is going to get locked very quickly.

claui commented 6 years ago

We won't have options, because that sucks for us: it will generate tickets. So our advice is to go make your own tap; and if your build fails you shouldn't make a ticket (except maybe when it seems clearly our fault).

Expectation management is no easy task. I’d never turn down anyone who’d ask for advice over a custom formula. I still believe drawing a line somewhere is a healthy thing to do. Even if it’s only to manage, quote unquote:

the negative perception when Homebrew/homebrew-core doesn't work


This is also absurd, but in a totally different way.

How so?

DomT4 commented 6 years ago

Again, I agree with @zbeekman: this issue was open for 10 days in which you have been active on this issue tracker and in Slack and you had no comments on it during that time. You've also (re)joined the team more recently than @fxcoudert; he has no obligation to ask you for permission to make a change like this.

I can only apologise for having to prioritise where I spend the time I have for Homebrew.

The vast majority of the time that I spent on Slack recently has been 1) having a really prolonged discussion with you post-lead maintainer stuff, 2) talking Claudia & Izaak through the pull mechanism, 3) trying to work through the Perl changes in Mojave. Feel free to let me know which of those I should've dropped to free up additional time.

I took a look at this issue, decided it would be quite a complex discussion and dared to assume we wouldn't be bombing ahead with it within a fortnight & I'd have time to generate a discussion point that wasn't overly-simplistic. If feedback is that urgent maybe point out in Slack that you'd like opinions sooner rather than later, as I did repeatedly with things like the libclang PR. maintainer feedback as a label does not imply "the second I get one piece of feedback we're gonna move on this".

As for your little personal ding at the end, yes, as someone who at times single-handedly maintained most of core for an extended period in the past & has the most commits to core of any maintainer today, I generally am a little surprised when people don't at least ping me for an opinion on things that represent a major change in core, which isn't to say one has to agree with that given opinion.

====== @fxcoudert - Outside of everything else, I apologise for my overly personal tone in my initial comment. The rushed nature of the changes bothered me but I didn't intend to swing at you personally.

scpeters commented 6 years ago

I took a look at this issue, decided it would be quite a complex discussion and dared to assume we wouldn't be bombing ahead with it within a fortnight & I'd have time to generate a discussion point that wasn't overly-simplistic.

@DomT4 It sounds like you as a reviewer were expecting people to wait for a specific amount of time for objections. We may all have different opinions about what is and isn't controversial. I also understand not having enough time to fully express my thoughts about something, and so I often don't say anything. But if one has some really strong objections to the PR, maybe it's better to say "I have concerns about this, and I don't have time to express it right now, but I would prefer if we wait before merging this"?

MikeMcQuaid commented 6 years ago

But if one has some really strong objections to the PR, maybe it's better to say "I have concerns about this, and I don't have time to express it right now, but I would prefer if we wait before merging this"?

@scpeters I could not agree more strongly.

I can only apologise for having to prioritise where I spend the time I have for Homebrew.

@DomT4 Every maintainer and contributor working on Homebrew has limited time to spend on it. That goes without saying. If replying to this issue was not a priority for you thats completely up to you but, as @scpeters pointed out above, it's not reasonable to expect others to wait for your input when you haven't requested we do so and, as I pointed out above, this is the documented continuation of a policy that predates you rejoining the project.

someone who at times single-handedly maintained most of core for an extended period in the past

As a result, if @fxcoudert and I reach a documented decision in a public issue it's reasonable for him to move forward with that decision after a week.

has the most commits to core of any maintainer today

Today: yes. When this issue was opened: no. We're really grateful for your contributions to Homebrew/homebrew-core but a number of commits does not grant you special privileges as when you stepped down your commits needed to be merged by other maintainers.

moonfruit commented 5 years ago

Please give i18n support for git to us that whose native language is not English. git's i18n is so well, and that helps me a lot. If you want remove the option --with-gettext, why not build with i18n by default like git's official website?

https://github.com/Homebrew/homebrew-core/issues/31980#issuecomment-420525894

fxcoudert commented 5 years ago

@moonfruit we could build git with gettext by default. It would match our existing practice of shipping feature-full bottles that benefit most users.

chdiza commented 5 years ago

Yes, and it sucked.

Perhaps it sucked for maintainers. For users, it was much, much better than nothing.

The removal of options benefits exactly zero users (and harms some of them), but somehow is being pitched as being to the benefit of users.

fxcoudert commented 5 years ago

We're trying to hear everyone, but at some point, actions speak louder than words. It is very easy for users to maintain a tap, that has exactly the same functionality as our existing options: no "seal of approval" from Homebrew core, no bottles (by default; tap maintainers can add bottles, but we agree it is significantly more difficult). That there is so much complaining, but (to my knowledge) no taps being maintained for the formulas affected, speak volumes. To me, it says "yes, options were nice to have for a very small number of users, but people are not affected very negatively”.

I should add that some projects (ethereum, neovim, etc.) use external taps for this reason: to maintain many options in their formulas. It does work very well for them, so we know it is a viable option to offer.

We do have, at some points, to make decisions. And no decision can please everyone. We take into account your feedback, as well as that of others, and our perspective as well… and make the best decisions we can. We are not opposed to revising previous decisions, and admit we make mistakes (such as our previous handling of python2 and python3, to cite just one example). However, at some point, arguing endlessly without new arguments is not worth the bits.


On the specific issue of git: we are moving forward on a compromise that I believe is better for all users. See #32008

chdiza commented 5 years ago

External taps are indeed viable. I've never denied this.

What I deny is that the removal of options benefits users. So the reason offered for removing options is entirely meritless.

And, "well, it may not benefit users, but it also doesn't irreparably harm them either" is not a reason for removing options.

chdiza commented 5 years ago

On the specific issue of git: we are moving forward on a compromise that I believe is better for all users.

It is better for some users. The rest of us now have to either make a custom formula for git that excises unwanted things (as it happens, I did this long ago), or we now have to brew gettext and pcre even though we don't want or need them.

Slowly Homebrew has been turning into "Macports-but-in-Ruby". The world was not clamoring for such a thing when Max invented Homebrew. (I thought one of its points was specifically to not be like MacPorts-from-back-then and saddle everyone with deps galore.)

claui commented 5 years ago

The rest of us now have to either make a custom formula for git that excises unwanted things (as it happens, I did this long ago)

If you already have made a custom git formula tailored to your needs, how do you expect a hypothetical removal of options to affect you?

or we now have to brew gettext and pcre

“We have to brew” sounds as if that involved effort or inconvenience from the user’s side.

even though we don't want or need them. […] saddle everyone with deps galore.

I realize you’re not happy, and I feel sorry about that. But then again: you’re an advanced Homebrew user. You appear to have somewhat strong opinions about how exactly your system should look like. You know how to write and customize a formula. What’s keeping you from doing exactly that?

MikeMcQuaid commented 5 years ago

Slowly Homebrew has been turning into "Macports-but-in-Ruby". The world was not clamoring for such a thing when Max invented Homebrew. (I thought one of its points was specifically to not be like MacPorts-from-back-then and saddle everyone with deps galore.)

Homebrew is still very different to MacPorts in many approaches but you may be right in saying the two projects are converging in their approaches. The main thing, which we've talked about before, is that Homebrew has moved from being a from-source system-optimised package manager to being a binary package manager. Looking at the analytics data it's worth noting: most Homebrew users use it this way.

I realize you’re not happy, and I feel sorry about that. But then again: you’re an advanced Homebrew user. You appear to have somewhat strong opinions about how exactly your system should look like. You know how to write and customize a formula. What’s keeping you from doing exactly that?

Indeed, I agree. Also, and I hate to say this because I genuinely value much of your input and your bug reports, but it's possible your use-case is no longer the use-case the Homebrew project is primarily optimising for (whereas I think when the project was created you're right in saying it was optimised for your use-case).

What I do want to do, though, is make it as easy as possible to create and maintain your own tap. brew extract is part of this, brew tap-new is another and https://github.com/Homebrew/brew/pull/4767 should make it so that tap and from-source formulae are less likely to be silently broken.

chdiza commented 5 years ago

If you already have made a custom git formula tailored to your needs, how do you expect a hypothetical removal of options to affect you?

I don't. It affects others, who've not already taken the steps of modifying a formula, learning enough git to maintain a tap (or trial-and-erroring until one figures out how to have a non-git-repo tap), etc., etc. It so happens that I already invested all of that long ago when it was only certain options, and not all options, that were on the chopping block. But it was a big investment. There's no reason to make others do this.

“We have to brew” sounds as if that involved effort or inconvenience from the user’s side.

It does. (Maybe e.g., I can't build foo now because my connection is down and foo has an inexplicable hard dep on bar, which is not yet downloaded. Maybe my connection is not down but slow, etc. Maybe I like building from source and don't want to spend time building stuff I neither want nor need.) It's obviously not a massive or insurmountable inconvenience, but it's darn annoying. It's what made MacPorts so annoying back in the day. Meanwhile, the corresponding options don't hurt anything.

claui commented 5 years ago

It affects others, who've not already taken the steps of modifying a formula, learning enough git to maintain a tap

But it was a big investment.

Good point. On the other hand, GitHub has become much more user-friendly, especially for beginners. In 2018, there’s absolutely nothing stopping you from creating a repo on GitHub with zero Git skills.

chdiza commented 5 years ago

In 2018, there’s absolutely nothing stopping you from creating a repo on GitHub with zero Git skills.

But a lot stopping you from doing anything with it sans git skills. :) (I include using a git-controlling GUI under "git skills", since you have to know the concepts in order to properly use the GUI; it's just a shortcut for the CLI.)

Side point: It used to be that you didn't need to really have any clue about git in order to use HB. Git is used under the hood in installation and updating, but managing packages didn't require any git knowledge except in rare and complicated cases. (I know, because I managed packages for years without any git knowledge; even now I can barely make a PR without poking my eye out.) This was as it should be. But now git knowledge is creeping in. You need it for maintaining taps, and soon you'll need it if the formula in core doesn't expose an option that you need that's actually in the ./configure script. It was almost the case recently that reverting to an old version of a package would require git knowledge (had the automatic deletion of outdated kegs come to pass). This kind of conflicts with the "HB is for everyone, even if you don't know what $PATH is" vibe that's been going around.

claui commented 5 years ago

But a lot stopping you from doing anything with it sans git skills.

you have to know the concepts in order to properly use the GUI; it's just a shortcut for the CLI.

Again, this is no longer the case. There’s a large button on your repo’s main page that says Create new file. It literally can’t get any less related to Git concepts.

  1. Create repository.

  2. Create new file.

  3. brew install user/repo/formula.

That’s all there is to maintaining your own formula.

chdiza commented 5 years ago

That’s all there is to maintaining your own formula.

If you ever change that file, then ...

SMillerDev commented 5 years ago

If you ever change that file, then ...

You can do that through the github UI. Gitlab even has a web IDE that you could use

claui commented 5 years ago

If you ever change that file, then ...

@chdiza … then you click Edit this file.

chdiza commented 5 years ago

And then if you want to save it, you are forced by github to make a choice about which branch to "save" it to, and maybe wonder whether you should create a different branch, and maybe even whether committing is the same as saving (if you really don't know anything about git), which means you have to know some git concepts. It's possible to bluff one's way through this, but it is not just as easy as using your own editor to save a file.

Anyway, this is all about something I labeled a "side note".

blogabe commented 5 years ago

I'm late to this conversation and jumping in mid-conversation so apologies if my question has been covered...

I know homebrew has been trending this way for a few years now for good reason. I'm not a fan of this approach at the user level, but understand why it's happening. I really wish there were other alternatives. At this point, it's very much not a "homebrew".

So if some formulas are now having options removed and the onus placed on user taps for custom options, what's the guidance to avoid confusion? Would there be two formulae with the same name: one stripped of options that has a matching bottle in homebrew and a secondary with configurable options and no bottle in one or multiple user taps?

A formula I use, but apparently not popular enough, had it's options stripped. I can add it to my tap if necessary to mimic how it used to work. For someone else that wants to use the formula, how would they know which one to use?

MikeMcQuaid commented 5 years ago

For someone else that wants to use the formula, how would they know which one to use?

They can either Google for the formula in your tap or create their own.

blogabe commented 5 years ago

For someone else that wants to use the formula, how would they know which one to use?

They can either Google for the formula in your tap or create their own.

Let me ask my question differently. Assume by pushing options to user taps for a given formula, homebrew will still keep their version meaning a minimum of 2 formulae and now a decision point for the user.

How would a user know which formula to use: the "official" homebrew version that has a bottle but no configurable options or the "unofficial" version in someone's tap that allows for configurable options.

Here's where I'm coming from... 1) pushing this to user taps may (probably) lead to a lack of rigor and standardization that currently exists in homebrew 2) anytime you make a user choose which formula to use you're now placing the onus on them and will lead to fragmenting the market for that formula

Again, I acknowledge you lot do the heavy lifting and much of the work and have your reasons. If I understand your answer correctly, you're already adding a step for the user to download a formula vs opening a prompt and brew install formula.

I assume most users will use what they perceive to be the official formula, but official is simply a lowest-common-denominator solution (my opinion).

Is there a way to have a bottle only version but at the very least tell users who are installing that formula that other user maintained formulas exist? I get the infrastructure isn't yet in place to do this yet so it's just an idea.

fxcoudert commented 5 years ago

Most if not all of the options we're removing are used by less than 1% of our users (and many times, less than 0.1%). So removing options does not change much for the user: they will brew install foo, and 99% of the time, be happy with it. In 1% of cases, they will ask themselves: “where is power feature X that I would really like?”. If so, they can google for it, find the tap where it's maintained, and install it.

But for 99% of users there will be actually be fewer choices to make than before :) because we don't present them with options that most of them are not using anyway.

blogabe commented 5 years ago

Honest question. For lesser used formula, are 99% of their users fine w/ default options or bottles?

Maybe at the aggregate level this only impacts <1% of all downloads, but I'm curious if that's factual for formulas that aren't as popular. My guess is it would be higher.

Specific to my original question, I came looking for guidance, but it doesn't appear that there is yet a best practice. So simply create whatever formulas that I personally want to configure in my own tap and try to keep it within homebrew guidance.

claui commented 5 years ago

Specific to my original question, I came looking for guidance, but it doesn't appear that there is yet a best practice.

I agree!

Whenever I find a formula wanting an option, I’d copy/paste it to my personal tap and then move on. I believe this is less overall work than googling for a random third-party tap. I also don’t believe the formula market will become fragmented. The core tap is pre-installed, and thus much more visible than any custom tap ever will.

blogabe commented 5 years ago

... at the risk of alienating users who crave a bit more control and who along w/ the maintainers helped homebrew get to where its at.

The direction offered a few years back as to where homebrew is heading - again, acknowledging the there are valid concerns - has negatively impacted my contribution to the community during that time period. I'm genuinely interested in a go forward solution that brings more people to the community than alienates the very people that can help.

One last question, since these formulae are not nearly popular enough, why have them in homebrew moving forward rather than direct people to a user tap?

For example, I care deeply about a lesser known formula, xplanet, and have been active in its edits and those of its dependencies or formulae that depend on it like xplanetfx. xplanet had it's options removed. If I'm going to recreate it in my own tap, why stop there? Shouldn't I also move other dependencies like potentially cspice that are also not that heavily used? How to know which formulae maintainers care enough about vs lesser used ones you don't want to deal with?

claui commented 5 years ago

... at the risk of alienating users who crave a bit more control and who along w/ the maintainers helped homebrew get to where its at.

@blogabe We appreciate every single person who has helped make Homebrew what it is today, and I believe their voices deserve to be heard.

It’s not easy to make everyone happy though. Please help me understand your concerns a little better. As a power user, where exactly do you feel is the lack of control, given you have the possibility of maintaining select formulae in your own tap, get to decide on every single bit of them, and have your tap seamlessly integrate into Homebrew?

I’d really love to understand your point of view better. In my books, maintaining my own formula is the most control I feel I can possibly get. How does that make you feel alienated?

blogabe commented 5 years ago

I guess it comes down to lesser than formalue will now be more difficult to find. Why bring google into this.

I'd be more open to these changes If we can facilitate this in homebrew. Maybe taps that want to be visible through brew search can link back or register to homebrew (maybe there's a way to do this now and I'm just unaware).

Idealistically, I'm not a fan of these changes because I believe it's fundamentally different from homebrew's original mission. However, its the maintainers that have to deal with these issues on a daily basis . I see the need. But I simply don't like it :|

MikeMcQuaid commented 5 years ago

Firstly I'd like to thank you for your polite, kind and considerate tone @blogabe. While we disagree I'm glad we can have a reasonable discussion about this.

How to know which formulae maintainers care enough about vs lesser used ones you don't want to deal with?

In general you should expect that eventually all formula options may be removed.

I guess it comes down to lesser than formalue will now be more difficult to find. Why bring google into this.

I'd be more open to these changes If we can facilitate this in homebrew. Maybe taps that want to be visible through brew search can link back or register to homebrew (maybe there's a way to do this now and I'm just unaware).

We've previously tried that approach and it didn't work well. People expect things that show up in brew search, options, devel etc. to be supported by the Homebrew maintainers and, well, work. This is often not the case and we don't have the resources to make it not the case (the project being volunteer run, after all). If there was a way to allow users to add more things to the search not by default (HOMEBREW_SEARCH_UNSUPPORTED_TAPS) that did a GitHub Search and showed (unsupported) that might work.

Idealistically, I'm not a fan of these changes because I believe it's fundamentally different from homebrew's original mission. However, its the maintainers that have to deal with these issues on a daily basis . I see the need. But I simply don't like it :|

Thanks for the empathy and understanding. I was contributing to Homebrew a few months after the project started and a maintainer about 6 months after it started and I don't agree that this differs from our original mission. The big difference is that back then we didn't have CI or binary packages and most things that broke were handled by the users (who were generally relatively experienced developers). This has changed as Homebrew has grown such that to accomplish the same goal for our users we need to slim down what we attempt to support due to what we're able to support.

sjackman commented 5 years ago

I'm a fan of making brew search discover content in taps, particularly when nothing is found in Core. It can be accompanied by a warning messages that community taps are not supported. The user chooses to tap the tap. If brew install fails for a formula in the tap, it already displays a message not to contact Homebrew about the issue.