Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

My homebrew story is always something along the lines of:

Me: Please install software A.

Homebrew: In order to install it I will also install 20 libraries (some need to be built from source), update openssl, update Python and wreck all virtual environments. Also since its been a while I decided it must be time to upgrade your other unrelated packages. Enjoy!



Yea, homebrew feels like a package manager for people who have no idea what packages or versions are.

Its doing so much hand-holding and extra stuff, it cant be really considered “pro” at all.

What bothers me the most is when they immediately remove packages because they get EOL’ed, but in the real world it doesn’t work like this.

I still have projects that use old PHP versions for example and brew just refuses to install these since they have been deprecated.

So then you have to use some finicky workaroud and download these old versions off of some repo/cask that will also probably go away at some point.


Doesn’t homebrew have launchd unit files now? When it was supposed to be totally self-contained? Homebrew is lost.


I just use https://mise.jdx.dev/ for everything command-line nowadays, and keep brew for casks only.


I've been using this for a while now, much better versioning system. Great tooling support with multiple backends, fast and information rich CLI. Highly recommended over brew.


Homebrew also takes a wikipedia style approach to package maintenance where any of hundreds of unvetted internet randos can push any unsigned changes they want to all users of that package with no review.

When you install Homebrew you are literally granting access to virtually anyone remote access to your laptop.

Any security leaders in an org that allow Homebrew on workstations used for anything remotely sensitive should be fired.

I have been restricted from disallowing it at some orgs, which is my cue to leave before a major supply chain attack is blamed on me.


As someone for whom Nix and MacPorts are a bit too much of a chore, I find that three things massively improve the Homebrew user experience:

1. If you do Python development, use “uv” or any other Python interpreter-management tool which uses precompiled Python installations from a reputable source. This removes the pain of sorting out compile dependencies for Python itself, as well as solving the “unrelated brew install command trashed all my Python virtualenvs” issue. Whether you use uv or some other Python-version-manager, I hope we can all agree that Brew-managed Python for development, as well as pyenv-compiled Python, are just garbage. As a bonus, “uv” gives you decent reproducibility on a lot of other platforms, if you ever want to develop or share your software to someone on a different version of MacOS or a different OS.

2. ‘export HOMEBREW_NO_AUTO_UPDATE=1’ in all your profiles to turn off the automatic updating of unrelated dependencies. That feature is so stupid. Yes, even given security issues and changing system deps.

3. Keep MacOS updated to current minus one point version, and make sure to fully uninstall/reinstall XCode/XCode CLT every time you update MacOS, and then check “brew doctor” every time you do. I’ve had far too many “brew decides to build from source” situations that boil down to Homebrew detecting my OS or build chain as not up to date with the last 6 months of MacOS updates, or lacking prebuilt artifacts for a very recently-released version.

None of this is a defense or indictment of Homebrew itself. I’m not commenting on whether or not this should be necessary (lord knows I’ve updated into plenty of MacOS misfeature releases just to get Homebrew working again). These are just relatively easy steps that allowed me to forget Homebrew build/install issues entirely.


You should use pyenv instead of relying on homebrew for your python version


Better yet, use uv [1]. I've been using it on all of my projects since it came out, and I'm never looking back. It's in a class of its own.

[1]: https://docs.astral.sh/uv/


Nix Darwin is the solution.


nix for CLI and config and Homebrew (through nix-darwin) for GUI programs is a good combo.


Nix completely broke on my security locked down work laptop, so I had to revert to symlinks, bash, and brew.


Nix-Darwin completely broke on my not at all locked down fresh out of the box from Apple work Mac, refusing to uninstall itself even, so I had to wipe and reinstall macOS. (It was a new machine, so it wasn't a huge deal, but I'd really wanted it to work.)


for future reference you should really consider installing it with the determinate nix installer [0] instead. it's multi-platform and among other things creates an install receipt so that changes can be painlessly reverted.

[0] https://determinate.systems/nix-installer/


Fairly sure that is what I used, though I remember being confused about whether Determinate Systems was the legit way, or super opinionated not necessarily most supported way, which was going to be least friction/widest adoption, etc.


I remember when homebrew first came out it was pretty snappy and didn't do a bunch of extraneous nonsense. A remarkably precipitous decline in software quality


Except that’s just your opinion, not everyone agrees that it’s "in decline" or does "nonsense". Homebrew is exactly what I want from my desktop package manager: I want everything I install from Homebrew to always be in an evergreen state, I’m ok with everything being in latest and Homebrew forcing package maintainers to work with the latest of their dependencies. This ends up being remarkably stable, and I actually get a looot less of version incompatibilities than when I used Linux (easy because I don’t get any with Homebrew).

If I want a specific version of something I don’t mind using a specific version manager (eg. asdf or mise)


Or the rose-tinted glasses have come off. Homebrew is simultaneously a very impressive "my first package manager" experience as well as a chronically deficient packaging solution.


I use “normal, mainline Homebrew as well as Bundles and I’ve never had a major issue. I’m not sure “chronically deficient” is the right word


I install a modern llvm toolchain and then just build from source


well, I prefer they added the forced update, since many people never updated it. So when they run brew install X, they got the 2 year old version of X.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: