Homebrew is a new package management system for OS X based on git + ruby
github.com
github.com
I'd really love to see someone make this portable to other unixes -- it'd be lovely to finally have good package management for the ~/mine/bin dirs I have on servers everywhere (though a major complication is Debian's obnoxious segregation of headers into separate packages)
Amen. That could be hugely powerful.
With homebrew, you could sync just the dotfiles and the list of installed packages, and let it take care of installing/upgrading packages on each machine. It'd be even better if it was smart enough to not shadow system packages when they are present+adequate.
If dotfiles aren't compatible across OS kernels, you're doing something wrong. I keep scripts in ~/bin under VC, but with anything that needs to be compiled I just track the source and build with make (or emacs, etc.). You don't need to put everything in ~/bin in the repository!
From the summary, I don't really see how the system would work transparently across OS X, Linux, and BSD. It looks like it expects git + Ruby + OS X, and I don't use the latter two. (I prefer Lua and OpenBSD, respectively, but that's me.) Also, I work with i386, amd64, and occasionally sparc, and the platform thing isn't an issue since I'm not syncing binaries.
A major use case is the ability for your app to be able to pull in it's own sandboxed dependencies in a crossplatform way -- so anyone can develop on their macbook independently of their system is set up, and deploy on any worthwhile server regardless of its setup.
gem does a pretty damn good job of this for Ruby libraries, but it doesn't help at all for the native libraries and utilities that the gems are wrappers around :)
It would be nice if it actually worked, but coming up with a perfectly portable global packaging system would be hard enough if it was working across platforms for one vendor, let alone the big mob that is the open source world.
I also added the feature where you can specify a git:// or svn:// protocol for a formula so you can easily keep up with HEAD development for your favourite project.
What's so obnoxious about this? The -dev packages will depend on libfooSONAME (and have far more stable names) so it's hardly more effort to keep them installed.
Debian's policy of splitting all features off into their own packages (or disabling them entirely for ideological reasons), and having duplicates of many packages (with mutually-exclusive dependents) constantly fucks with me. I can't ever depend on its dependency tracking to actually give me what I want. It's not a good sign when all the digg-bait walkthroughs always instruct you to paste in a huge list of packages.
Hm, no apt configuration needed, just install the -dev packages and you'll get the relevant .so too. This seems to be the correct case to optimise for, not the other way around.
I'd still have to either constantly be installing foo-dev packages despite already having foo, or succumb to the digg-bait technique of never letting apt think for itself.
Sure, I didn't have to reply, but I'd like to keep this community interesting and most importantly, constructive.
It's also a strong guarantee that if the package is built any different than the upstream default, you know exactly what changes are being made, since they happen on your machine.
And of course now with the switch to Snow Leopard we've got the 64-bit issue as well.
Yes, it does take a while, but these days it doesn't take that long anymore.
OS X is unique among modern unixes in that absolutely nobody distributes app bundles that have external dependencies on non-system libraries (except for a few that are too freetarded to bundle ffmpeg).
4 different architectures (PPC/32b, PPC/64, Intel/32 and Intel/64) are probably hell on a binary-only package manager. Source-only is simpler and lighter on the architecture side, though it's much heavier on the client one.
Fink does binary packages though, I think.
fwiw, i use fink on mac os and it supports binary packages. many of the ports in its stable branch are available as binary packages.
1) I don't want bandwidth costs
2) It's much harder to get contribution for a binary system (I expect). If you're installing foo and it doesn't work for some reason you probably won't want to install Xcode and Homebrew-dev in order to try and fix it. When you're installing from source you're already a `brew edit foo && git push` away from helping fix it.
It's also worth noting that most packages don't have dependencies in Homebrew. This is because we don't duplicate what is already there and OS X comes with quite a lot of the common low level libraries. So compiling foo takes significantly less time than it does with Macports.
Maybe the CLI app exposes some of this a little more easily? I am not sure but I am curious why they built an entirely new setup rather than just improving/fixing up MacPorts...
Nonetheless a promising start!
Both Fink and MacPorts, on the other hand, install virtually an entire second world of software - parallel to the built-in Apple stuff - in their respective sub-directories (/sw for Fink and /opt/local for MacPorts).
If you install Getmail with MacPorts, for example, you instantly drag in a full Python installation as a dependency (even though OSX already has Python installed). Similarly, if you install Weechat with Perl support, MacPorts installs its own version of Perl to build Weechat against. There are pros and cons, I think, to the Homebrew and MacPorts/Fink methods, but they are very different.
I don't know the specific problems they had.
I agree that it may seems somewhat stupid now, but there was (and perhaps still is) a very good reason for installing them separately.
And even then, sadly the pretty decent versions don't get updated (OSX 10.6 comes with Python 2.6.1… 2.6.2 was released in April…), so you're essentially SOL between two versions of OSX.
I tend to just build stuff myself from source and use GNU stow. I'm amazed I hear so little about stow, it's so useful.
I just configure with a prefix arg of something like /usr/local/stow/package-version, then use stow to install in /usr/local/{bin,etc,lib} etc. etc. Works equally well in one's home directory, which is what I used to do at work.
Still at this point our ambitions are quite vast, so I expect Homebrew will prove more useful in the long run.
> Homebrew helps get you chicks
> here's no conclusive scientific evidence as yet,
but I firmly believe it's just a matter of time and statistics.
Geek humour is awesome!(I've done a bit of porting to OpenBSD. It's a pet peeve of mine when people hardcode references to bash for no good reason.)
Not having a /bin/bash a losing battle -- it's way too late to get people to use the theoretically more correct #!/usr/bin/env bash just because the greybeard unices don't ship with it (despite shipping with plenty of other GPL software) and their package managers put it (when they are nice) in /usr/local/bin
Edit: That's not a diss on the greybeard unices -- I used FreeBSD and loved it dearly for years. I actually really like that they segregate all user-installed packages into a seperate root at /usr/local/ -- but for practical reasons I always make symlinks for binaries with well known locations (to use the robots.txt / favicon.ico pejorative).
The hardest bit is compiling a universal binary.
Homebrew seems like a very nice thin layer over manual builds. Some people maybe can't live without dependency resolution, but the lack of it is one of the main reasons that I'm confident that Homebrew is simple enough that it will help me with a lot of the mundane and annoying issues (ie. getting compile flags right for OS X, etc) without hamstringing me when I need to go outside the system.