Puppet versus Chef: Why Puppet wins
bitfieldconsulting.com
bitfieldconsulting.com
That said, I think Chef has a lot of potential. It's just waiting for a solution that brings it all together. I'm highly looking forward to the upcoming opscode-managed Chef server. I'd like to see something like Heroku, where deployment is simple and easy, but is based on community-provided recipes (instead of Heroku-provided addons) and is closer to a fixed monthly cost (to provide the chef server) instead of a per-server-resource cost (dynos).
As for the article, as other haves stated, it largely talks about how Puppet is more established. The only points that matter to me are #3 and #9. #3 seems to be a direct result of Chef's entry into the market and the value of #9 seems arguable.
So, to summarize:
* Puppet is definitely more established and better documented
* Chef is not there yet, but has (in my opinion) more potential for the future
Unless I misunderstand #9 ("explicit dependency management"), Chef does indeed have this. It has resources that can both "listen" and "notify," just like in the Puppet example given, and things are executed in dependency order unless execution is specified as "immediate."
I agree with the point about Chef's Rails-oriented deployment. It's a little frustrating having to negate the default Rails settings while doing a PHP deployment.
To me, the major downsides to Chef are quirks/instability as changes are made during active development, and somewhat sketchy documentation in places. Still a great system though.
(Also: check out the reply from Adam Jacob, lead dev of Chef, in the comments. I noticed this after posting here.)
From a quick survey of the article, it missed the #1 advantage of Puppet, though the comments hit it: Puppet is declarative, which is fundamentally the right answer for this kind of problem space.
The flip side though, is that Chef (being mostly imperative) is easier for many people to get started with. I think this will help it gain share, in spite of the above. I might even pick it up myself, depending on the problems at hand.
Puppet does seem to have much much better docs on their homepage. However Chef is way more reusable. The chef recipe system is very powerful, and the fact that it uses ruby means its much more reusable using standard ruby practices (inheritance, modules, etc).
Sometimes its much better to be a newer technology as you can really solve some of the core issues of the preceding technology.
The main advantage to opscode I see is that Chef does a better job of marketing and hype generation.
We have no beef with Puppet - from our experience building fully automated infrastructures at scale, it wasn't the tool we wanted (and it still isn't,) so we built Chef - the tool we wanted. It turns out it's also the tool lots of other people wanted, and we're incredibly proud of it.
There is nothing dirty here, no matter how much the internet wishes it to be so.