Homebrew 1.0.0
brew.sh
brew.sh
Homebrew is such a good package manager (and not for the reasons any package manager is classically considered good). It's great because the community is so vibrant, the user experience is so well thought out, and the formula dsl makes so much logical sense. It's actually both a GitHub and Ruby showcase.
Thanks homebrew team! Here to many more years of accessible packages on the Mac.
You can say that again. Homebrew's dependency management is a fucking joke, to the point that it might as well not exist.
I used to use it for things like local installs of server-side stuff (e.g. language runtime, database server, cache server, etc) but I've moved to using vagrant (and in turn Debian, so Apt) for those things.
For dev tools such as Mercurial, Git, Autotools, etc there are first/third party .pkg installers available.
As a package maintainer, though, one thing surprised me: you can't make your package depend on a specific version -- even a major version -- of a library.
So if MyApp uses YourLib 1.0, everything is fine until YourLib 2.0 comes out, at which point users doing `brew install myapp` will start getting cryptic compiler errors. I have no choice but to drop whatever I'm doing and make MyApp compatible with YourLib 2.0, which may even be impossible.
It's just odd because otherwise Homebrew is so well designed. It seems like a weird omission.
Edit: Some packages get around this by packaging major versions separately (qt, qt5) but most don't.
Back to Macports it is. I'll be sure to tell others about this.
When they brought in brew cask i was completely blown away and i use brew exclusively for installing almost everything on my mac.
I tried macports at first, but bailed out of that after i shot myself in the foot inside the hour. Switched to brew and have never looked back since.
every so often i'll try to install something with brew, and it just won't work. the last thing i'm trying to do on planet earth is spend 30 minutes debugging a packager on my workstation (as opposed to on servers, where i do this literally all day long), so i just don't bother.
I didn't even realize Homebrew was sending my info to Google Analytics :(. I am a huge fan of Homebrew, but they really should make this opt-in vs automatic by default.
Edit: To opt out (the second line is just for confirmation):
$ brew analytics off
$ brew analyticsI disagreed in the GitHub issue about this. Debian's Popcorn (package popularity analytics) is opt-in - a choice on install that defaults to "off". That would be the perfect solution. Ultimately those who agreed with me were told that the decision was made and there would be no further discussion - the issue was closed and locked.
Nothing wrong with that viewpoint, but I just disabled it and moved on to enjoying pretty good software.
> If you feel that way: please use another package manager.
I didn't like how it was handled. I think any sort of analytics, especially by third party companies with real capabilities for correlation and de-anonymisation should be strictly opt-in (off by default).
Opt-in doesn't really hurt users who don't care about privacy and security. Opt-out does hurt users who care about those things. Many organisations have security policies that discourage using software that "calls home". I'd trust the software much more if it didn't have that functionality at all.
The developer's justification was that if it was off by default, no-one would turn it on. I think that speaks volumes about how users feel about analytics these days. Some users suggested a Debian Popcorn style dialog ("We'd love it if you could help us gather some information about package usage, etc etc. Would you like to participate [y/N]", off by default but a question on first run asking the user if they'd like to help). We were told "no".
Overall, I thought it was a bad idea and the situation was handled poorly. For something as integral as a package manager I expect more.
[1] https://github.com/Homebrew/brew/issues/142#issuecomment-214...
https://trac.macports.org/wiki/Migration
After going through the migration, it isn't that bad, but it was surprising (horrifying?) to me that ports was completely broken after an OS upgrade.
Probably there would be room for improvement, but there is only little interest by contributors. This only happens once a year and after everybody went through it, they quickly loose interest in contributing anything better for the migration process.
Sorry, this is just not true, we hold merging YourLib 2.0 into core until all dependents are upgraded or boneyarded. Maybe you're speaking from your outdated experience with brew years ago.
Also, we do have plans to support multiple versions of libraries, see https://github.com/Homebrew/brew/issues/620 "Handle Versions Better" (although I'm not necessarily a fan of this personally). We also have an openssl@1.1 formula in core already in case you want a sneak peek of the future.
I get that it's all a tradeoff, and it must to help keep complexity down if brew is latest-everything.
New versions stuff looks good. I'll look into the versions tap too.
In core this is true. In your own tap you can vendor your dependencies however you want.
Even a fairly vanilla ROS installation has a deep dependency tree— there are any of several dozen major packages which can at any moment release a new major version and break us.
In the end, most ROS Mac users still choose an Ubuntu, Debian, or Fedora VM— having a stable set of underlying packages is worth the tradeoff in convenience and performance.
How does Homebrew compare to pkgsrc these days?
Well done Mike and contributors! It's a great piece of work.
For instance what if they code in such a way that they haven't run into that problem in years as it is internalised. Or maybe they make use of tools that eliminate a lot of problems, such as TypeScript or similar.
A good developer comes in many forms and increasingly often from all over the world.
Writing the overly bitter tweet surely won't help with improving hiring points. Seems highly unprofessional and childish.
You and I both "know how" to eat discarded food out of a trash dumpster.
But absent some truly compelling reason, we wouldn't choose to do so, right?
And I'd love to see a counter assertion/argument.
Google intentionally prefers false negatives to false positives.
The only one who's being unprofessional is the one chiding others for being "unprofessional".
In comparison with MacPorts before, it's like night and day. npm/pip/mix/bundler all seem to periodically conspire to waste a few hours of my time (even though I can do that quite well on my own).
NPM being the worst of the bunch. By a lot. About this much:
`tree node_modules`
Some design choices still rub me the wrong way to this day though (quibbles to some, but for a couple use cases it can matter), that's why I'm trying hard to bring back Arch OS X to life.
Anyway, congrats to the Homebrew team! They truly deserve it.
Fink is full of old packages, but MacPorts ports are pretty up to date. There are still lots of devs maintaining MacPorts these days. So I don't know what dire status you were talking about.
At the time Homebrew rose in popularity it was super easy to add packages to and update existing packages. MacPorts had a reputation, at least, for being inflexible and difficult for casual maintainers. Some not-completely-esoteric packages would not be updated from upstream sources for years.
In my case there was (still is?) the particularly strange case of GNU Octave, in which the development version (octave-devel) had completely superceded the regular package (octave), and this was not really well documented. To get anything done at all with Octave you had to use octave-devel, while octave was essentially a vestigial limb floating around for no reason.
I don't think that "tree X" can be a good argument against using any kind of package manager.
It's not perfect, but it's not bad either.
No matter whether you think small modules are good or bad, I personally have experienced npm to at least manage them well. Admittedly, however, I've never actually worked on projects of any great size.
Two things really help: pipsi (https://github.com/mitsuhiko/pipsi), which installs tools inside their own virtualenv and PIP_REQUIRE_VIRTUALENV, which stops pip from working outside a virtualenv.
Error: /usr/local is not writable. You should change the ownership and permissions of /usr/local back to your user account: sudo chown -R $(whoami) /usr/local
.
.
.
==> Migrating HOMEBREW_REPOSITORY (please wait)...
==> Migrated HOMEBREW_REPOSITORY to /usr/local/Homebrew!
Homebrew no longer needs to have ownership of /usr/local. If you wish you can return /usr/local to its default ownership with: sudo chown root:wheel /usr/local"
You got to love the user experience of this! Thanks Homebrew team. <3
From a user/developer perspective, we've created a command line utility (`cask-repair`) to make version bumps as painless as possible. Would love to see more people using it [0], and we welcome suggestions and PRs (we have a few long-standing issues that have gone unaddressed, and fresh eyes are always good!)
[0] https://github.com/caskroom/homebrew-cask/blob/master/CONTRI...
It might be cool to also allow some kind of process for marking packages as deprecated and showing a warning or confirmation prompt if you try to install it, for the cases when maintainers start packaging in some different way that can't be supported by homebrew.
There's also a fairly large push and discussion about removing duplication between Homebrew core and Homebrew Cask, so you should see things improve. There should also be Formula -> renamed Cask migration at some point, the issue has been raised in brew-evolution. (We have basic Cask <-> Formula support already).
Re: terraform specifically, looks like it's now in core, and `brew cask terraform` will know to do `brew install terraform` automatically.
If Homebrew was updated on Aug 10-11th 2016 and brew update always says "Already up-to-date". you need to run:
``` cd "$(brew --repo)" && git fetch && git reset --hard origin/master && brew update ```
I had to.
You can opt out with
brew analytics offPeople! Be nice to your fellow developers! When something asks you to send anonymized usage data, do it!
I have paid exactly $0 for Homebrew. Reporting usage statistics makes it better, and I'm happy to be chip in to help out.
Why? Personally, the only reason I would remove software from a repository is if it didn't work, impacted performance, or cost me an unreasonable amount of money/time. There's a really long tail for software packages.
If popularity were a valid signal of importance, people should only express their eternal love for PHP and Javascript, and ignore computer science, functional programming languages, computer engineering and little-known-but-really-fucking-important packages.
Call me ageist, but code churn and labeling projects "dead" adds nothing in the context of portable code which has matured to the point stability; there's zero functional value added in refactored code being "new." Ongoing support, adding features and keeping pace with platform compatibility are separate issues from judging code to be "inferior" despite working because it's "old." What may seem "dead" to people whom don't know about particular packages but may well just be stable and resting very quietly because it just works.
In general, it's a very useful (and pleasant to use!) tool - except for when trying to manage different versions of the same dependency on the same system. Since this is such a big deviation from most package managers, and feels intentional, I'd like to understand why, and whether there is a "homebrew way" of approaching multi-version management.
Thanks again for all of your hard work!
For example, I now list with brew list into a file and edit the file so that whole list is a big brew install. That way if I reinstall OS or go to another I can have same things.
"ls /usr/local/Cellar/ | cat >> myInstall.txt"
cat <(echo brew install) <(brew list) | sed ':a;N;$!ba;s/\n/ /g' > brew_install.txt
It lists directly from brew, prepends brew install and then replaces all newlines with a space and outputs to brew_install.txt
On one machine:
brew bundle dump
On another machine: brew bundleHomebrew was successful because there were developers who wanted it. Is the Mac more successful as a developer platform because of it? Possibly.
As corny as this may sound. I rely on Homebrew to get my unix experience on OS X and not have to compile everything myself. Saves me time and is one less wrench in my development process.
The best would have been /opt/brew (short, no uppercase letter)
Not to mention it's an uppercase H which breaks UNIX file name convention.
It's also very simple to create packages, it took me less 30 min to learn how to create a package and to deploy it. In comparison last time I checked, creating deb packages is absurdly complex, and I usually just give up and provide a Bash file instead.
I realise that's outside of it's intended feature set, and it's fine for getting dependencies for other people's github projects or whatever. But what I'd really like is the ability to get dependencies that I can feed into my CI system to build software I intend to give to end users.
- brew install postgresql
- brew install mpv
The list goes on and on and on. You rock!
I wish we had a better GUI for managing a user's daemons on OS X.
Why does Homebrew need to parse Mach-O files? Is this for fixing up shared library paths inside executables?
Yes, exactly. During bottle installations, we need to be able to relocate dylib references and install names so that they're relative to the Homebrew prefix.
How is this thing not integrated in MacOS yet?
You answered your own question.
In that case you might be glad to hear that in v1.0.0:
> Homebrew’s default repository installation location changed to /usr/local/Homebrew to keep your /usr/local cleaner
Personally, I really like Homebrew and have never had problems (c.f. MacPorts which gave me big problems a few years ago), but I don't use /usr/local for much else, so that's probably why.
However -- I just remember, when Homebrew was getting started, all the supercilious (dare I say arrogant?) advice in the docs ... oh, just install to /usr/local, "seriously", etc. (Looking for a reference in archive.org right now ...) Even their whole "Macports driving you to drink?" thing rubbed me the wrong way -- maybe I'm humour-deficient, but I think to criticize another project when your alternative isn't clearly better is just bad taste.
That being said, I am genuinely curious: is there any one awesome thing is that Homebrew does that Macports can't do? Or better, what kind of problems arise from using Macports? I recognize that packaging in Ruby is probably more convenient than in TCL, but other than that? It seems to me that Homebrew is just getting closer to what Macports did (correctly) in the first place. The only way Macports has ever inconvenienced me is requiring a fresh install from time to time when Apple updates their OS, which (for my use case) is minor.
But now, with the new Docker for macOS, I never need home-brew anymore. It is especially helpful when you need to run 2 different versions of an app (like elastic search) for different projects.
I can't see myself returning to Homebrew now. That is just not the way to do things anymore.
You can kinda use homebrew-bundle in place of some of this stuff, but even then there's random installs that need extra configuration or general mucking about with that homebrew-bundle doesn't give a good way to encapsulate (for example, see the duckdns-updater repo and the template it uses [2]).
[1]: http://galaxy.ansible.com/icopp/ [2]: https://github.com/icopp/ansible-duckdns-updater
http://apple.stackexchange.com/questions/253404/how-does-hom...
Great job for the brew maintainers and contributers. You guys make everyone's job a lot easy!
brew --version
I do with the update announcement page said how to best update (in case there were any major changes).
(if update errors prevented the migration)
Either way, I'd definitely be interested in something like homebrew for ChromeOS. Guides for cross-platform capabilities would be most welcome!
For most (all? Slackware...) Linux distributions, there is ONE package manager: for Debian/Ubuntu it's APT, for Arch it's Pacman, for RedHat & friends it's RPM, etc. There is exactly one, because all the files which aren't user data or configuration are owned by some package or other. It's all well and good when there's a clear need for this on OSX, and so Homebrew must keep up to date with the official software management and keep itself contained, not breaking anything. Having a second package manager on Linux, which doesn't treat Linux as the main target platform, seems both pointless and asking for trouble.
Alternatively, you could be harsh and figure that the downvoters were saying, "No, you don't prefer Homebrew. You prefer your distribution's package manager, and thou shalt use it correctly."
(a) Use the upload form for Launchpad.net [0]
(b) Host your own deb server [1]
Unless you use Bazaar for a VCS, the only time you login to Launchpad is to upload a new release. With Homebrew it's built into git with adding a new tag. A _LOT_ lower barrier to entry here.
[0]: https://help.launchpad.net/Projects/FileDownloads#Publishing...
[1]: https://www.unixmen.com/setup-local-apt-repository-using-ins...
Here's my experience with PPAs:
1. Is it already in the Ubuntu / Debian repositories? Nope.
2. Search google for "Ubuntu <package name>".
3. Find some random website like some stack exchange question that tells me what couple of commands to run to get it into my repositories, or risk trying to navigate this disaster of a site.[1]
4. Finally, install the package!
On the other end of the spectrum, (this may be unfair and biased because this is what I"m familiar with), on Arch Linux, to get community maintained packages:
1. yaourt <package name>
2. hit corresponding number
3. answer prompts. (This step gives me the opportunity to analyze the build scripts if I so choose, which includes the source location.)
4. done.
[1]https://launchpad.net/ubuntu/+ppas
Edit: Actually that's not really a fair comparison. I forgot that Arch does not come with yaourt preinstalled. I would have the same complaints about downloading the tarball, unzipping, makepkg, and installing the package on Arch, so take my complaints with a grain of salt. I'm sure it's a good experience with a similar tool on Ubuntu.
It's pretty common to use Debian stable and vendor/community repos for specific packages you want more up-to-date packages of.
By which I mean that apt is fantastic AFAICT and totally integrated into Ubuntu and Debian. Why would you want a third party package manager?
The interface seems more or less identical to me.
I'm not going to deny it's good and brings great stuff to the Mac, I'm just not seeing the advantages.
The only thing that is as easy in apt as brew is installing packages.
Searching, getting info about a package, updating the list of available packages, are all much easier with homebrew.
apt search ....
> getting info about a package
apt show <package>
> updating the list of available packages
apt update
> are all much easier with homebrew
You gotta be kidding me
Forget CPAN, CRAN, ports, pypi, go-get, rpm, apt, cabal, crate, opam, ...
Just get it from github or similar with homebrew.
Edit: See comment from rogual elsewhere in this thread - https://news.ycombinator.com/item?id=12547076
I think that was a perfect way to be introduced to this release :)
brew update
at least twice.