"Homebrew failed to do thing...here's exactly the commands you can run to make this thing work now though if you are so inclined."
apt fails? Good luck
I actually see this as an argument in favour of OSX, as it is much more straightforward to change package manager than on Linux, where the sane way to change package manager is to change your distribution.
Home brew, when things go wrong, goes wrong disastrously in my experience. You're never quite sure where you're left, and you have to spend a fair bit of time picking through what actually failed.
By the way, aptitude does not really help you in the typical error case: a package (continuously) fails in dpkg-reconfigure, which causes the complete install/upgrade to fail.
It's actually better, for three reasons:
- If a library is not in Homebrew (which happens frequently when you are a developer ;)), you just install it into /usr/local/Cellar/<name>/<version> and you can use all the regular Homebrew tools (brew link <name>, brew unlink <name>), etc.
- It's much easier to build and distribute your own stuff in Homebrew, by providing a repository of formulae. I have packaged both Debian packages (distributed via Launchpad's PPA) and created Homebrew formulae. Packaging for Homebrew is much easier.
- Homebrew is packaging is decoupled from OS packaging/updates. This means that you can update a new application without having to upgrade half of your system. In Linux, you usually have the choice of: stable OS, outdated software. Up to date software, in-flux OS.
I've never seen an application on Linux asking to update half of my system libraries or something. Please stop using hyperbole, this is not useful for the sake of conversation.
On top of that, you can install recent software in many ways (OpenSUSE has specific, updated repositories that can be triggered with one-click on their website, Ubuntu has pretty much the same thing with PPAs) or you can even build everything from source on Arch with AUR and just ensure you have updated libraries as required (which is not half of your system).
And if you don't want to update ANY of your system libraries, it's fairly straightforward symlink local versions of libraries instead of system ones.
Homebrew frequently requires you to manually perform steps or edit files. While it might not be directly homebrews fault, that 100% disqualifies it for the label "It's actually better".
My favorite is actually Nix/Guix but I haven't bothered to set it up on my daily driver.
- you have way more packages on any Linux package manager.
- Linux package managers do not mess with /usr/local as expected in a UNIX compatible OS. Homebrew does. Linux package managers run as root, not in user-space.
- Apparently Homebrew gets broken by Apple software/OS updates.
- Linux package managers are an integral part of the OS environment and update process - it's structured this way even for critical system and kernel patches.
- Aptitude, for example, gets rid of older versions of packages, while Homebrew keeps all previous versions and simply changes the symlink. Cleanup is also automated in Linux package managers, not Homebrew as far as I know.
- Homebrew sometimes pulls up sources to compile software locally, while Linux distros usually pull up binaries (except AUR on Arch or Portage on Gentoo, or Sbopkg on Slackware). While compiling from source is nothing wrong, it can take a lot of time depending on what you are building.
Being broken is a feature? Changing /usr/local instead of being sane? Leaving old versions of packages lying about instead of cleaning them up? Breaking when the Apple devs wonder if it would be fun to switch things up a bit under the hood without telling anyone?
The one thing I can think of that's a "feature" is that brew compiles locally, instead of pulling down a binary, but even that has some draw backs.
I'm all for product loyalty, but a spade's a spade.
Sometimes older versions of different packages may be dependencies of newer packages. This is a thing that happens with software. When it's not a problem, `brew cleanup` gets rid of old versions.
Most of the time brew does install binaries, they're called Bottles. When it can't find a binary, it compiles locally. Yes this is sometimes annoying but it's not a deal breaker, at least not for me.
I'm not sure what you mean by "Breaking when the Apple devs wonder if it would be fun to switch things up a bit under the hood without telling anyone." This has never happened to me or anyone I know and furthermore Brew is a Unix compliant tool and OS X is a SUS compliant operating system.
Sorry if I'm sounding harsh, it just sounds a little like you're a Linux user who doesn't or possibly hasn't ever used OS X. Brew is not a panacea but it's honestly pretty good. There's also MacPorts if you're used to more old-style tools and a couple other package managers as well. You can even use Nix on OS X.
Better than most OS X programs, which seem to have paths like /Applications/Something.app/Contents/Resources/SomethingElse.app/Contents/Developer/Frameworks/Resources/Something.dylib/Contents/Resources/MacOS/Resources/Frameworks/Something.dylib/Contents/Developer
Case in point, an excerpt from the program Lipo's usage text:
fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: Usage: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo [input_file]
However...what specifically are you wanting to install and update on Mac that a better package manager would significantly help with? I find on Mac I'm rarely installing or updating new packages so it doesn't bother me as much as I thought it would. As long as I can easily install and update Python, Node, Vagrant, Chrome and a few other things I'm happy.
I'd love a laptop that had a long life battery, good screen, good build, was light, ran an open source OS that supported all the software I need etc. but you have to compromise unfortunately and I can compromise on package management.
And Homebrew tends to be more up to date then most distribution repositories. Especially if I want to have a stable OS.
Linux package managers do not mess with /usr/local as expected in a UNIX compatible OS. Homebrew does.
You can install Homebrew in another directory, it works fine.
Linux package managers are an integral part of the OS environment and update process
Which is bad. Application updates are typically tied to base system package updates. Either you use some stable branch (like Debian) stable and you are stuck with old software. Or you use some rolling release, but then your kernel, X11, Gtk+, or whatever could break.
Decoupling the installation of applications from the base operating system is a good thing.
- Aptitude, for example, gets rid of older versions of packages, while Homebrew keeps all previous versions and simply changes the symlink.
brew cleanup
...and old versions are removed and downloads are cleared. Also, you can add the --cleanup flag to upgrade and it will remove old versions. I prefer Homebrew's approach here, because it's easier to rollback.While compiling from source is nothing wrong, it can take a lot of time depending on what you are building.
Luckily, Homebrew bottles most software that has long compile times. I have a MacBook with a Core M processor and install times have never been a problem (and I have installed Boost, Rust, and ghc, to name just a few larger things).
How is that a good thing if an application needs some core OS features that are not available in its current state? Newer libraries become available for all software and benefit from the upgrades. And yeah, sometimes some things break, but it's easy enough to roll back to a previous library version if you need to, instead of bloating the system with multiple versions of different libraries.
> You can install Homebrew in another directory, it works fine.
But it's not its default. How many users change its directory ?
> And Homebrew tends to be more up to date then most distribution repositories. Especially if I want to have a stable OS.
Honestly you can't compete with AUR (Arch) on that level.