For those that are interested in trying out babushka, here's a 30 second crash course. To install:
bash -c "`curl -L babushka.me/up`" # If you're on a Mac
bash -c "`wget -O - babushka.me/up`" # If you're on Ubuntu
Some good examples to start with:
babushka rubygems # Installs, updates, or adds gem sources as required for your system
babushka homebrew # Sets you up for sudoless `brew install`s
babushka Cucumber.tmbundle # Clones the latest, installing / restarting TextMate as required
babushka Chromium.app # Pulls the latest Chromium nightly to /Applications
If you want to see what will happen without making any changes, use `--dry-run`:
babushka Transmit.app --dry-run
If you're on a Mac, you can follow along in TextMate too using `--track-blocks` — babushka points out each piece of each dep as it runs them. (This also works with `--dry-run`, so you can inspect the code a tree of deps would run.)
mate /usr/local/babushka
babushka 'Ruby on Rails.tmbundle' --track-blocks
Any questions, get in touch with @babushka_app on Twitter, #babushka on Freenode, or email hello@babushka.me.
It's also known as a "Babushka doll" (because it features a grandmother-like image) but the doll is definitely not the first thing that comes to mind when hearing "Babushka".
I have no feedback on the actual product. Looks fun, best of luck. :-)
I chose babushka because here in Australia at least, the nested Russian dolls are known as babushka dolls. (Also, Matryoshka is kind of already taken by the video container format http://www.matroska.org/).
And hey, I'm cool with babushka being a kindly grandmother that helps you remember things you've researched, as long as you explain them in its DSL first :)
Little known fact, babushka also means butterfly in Russian (if you put the stress on a different syllable). So if you do not like the old lady as a marketing image you can always go with a pretty butterfly.
There's no "technically" about it. That's just what the word means. It's irrelevant how similar they sound to the English ear; you might as well argue that "the" is interchangeable with "duh".
Also, contrary to the GP, there's no difference in stress, which is on the first syllable in both words. The reason they're different words is that "sh" vs. "ch" is a phonemic distinction in Russian, just as it is in English. That's why we distinguish between "sheep" and "cheep", for example, and would regard it as bizarre to conflate them.
Some people might lean towards this instead of Puppet / Chef / cfengine because the "normal" way to use Puppet is in a client / server model, and that might seem overly complex for some projects. But Puppet can be used in a serverless way.
At it's simplest, Puppet can do what it looks like Babushka is doing, without the interactive nature of Babushka (which could be viewed as a positive or a negative). Getting more complex, rules about what gets done / installed / modified can be pulled from a central location, even without a Puppetmaster (server).
I'm not saying the Babushka author is crazy for creating this. Perhaps he had an itch that needed scratching and wanted to build this just for the pleasure of it, or felt that Puppet was overly complex for his needs. I think the work he's done is pretty slick, but there doesn't appear to be much add-on value for anyone who is already using Puppet or Chef or cfengine.
If Ben is lurking around here, I'd enjoy hearing his motivations for creating this. He might disagree with my assessment, too, and that'd be interesting to hear.
Chef and puppet have a lot to offer. In particular, there are things that chef and puppet can do that babushka can't, like orchestrating ecosystems of multiple machines, and provisioning new hardware automatically.
Deployment is a problem that I'm very interested in, being a web developer and maintaining my own production machines, and I think babushka has a lot to offer in that area. However, I don't think of babushka as a deployment tool. I think of it as a "remember what I researched or learned the first time" tool, and part of that is deployment.
In building it, I'm aiming to build the most concise, powerful DSL I can for automating chores, and at focusing it as hard as I can towards the "no job too small" end of the scale.
My other main motivation is making babushka immediately useful and approachable, both as a user and a contributor—i.e. I want you to be running deps and seeing results within 2 minutes of discovering the app. And I want you to be able to write your own deps as easily and quickly as possible, push them to github with a single command, and have anyone else run or incorporate them into their own trees of deps equally easily. Most of that is already possible today using automatic dep sources, and the remainder I'm working on. :)
For example, Josh Bassett has been building a template for installing vim plugins: http://github.com/nullobject/babushka-deps/blob/master/vim_p... - which means you can automate the installation of your own plugins by writing a babushka dep like Josh's:
vim_plugin "vim-cucumber" do
source "git://github.com/tpope/vim-cucumber.git"
end
You can run that dep with a single command, even if you've never used Josh's dep source before:
Similar things are already working well for textmate bundles, OS X app bundles and installer packages, git repos, and so on. The idea is that babushka is purely the engine (plus enough deps for it to install itself), and it should be as fast and pleasant as possible to not only write deps like the vim-cucumber one above, but to create new templates and make new tasks I've never thought of. You can extend the DSL using the DSL. :)
So — I have a lot of time for tools like chef, and probably have a lot to learn from them too. I'm building babushka to be complementary to those tools. For example, part of larger deployments is doing specific, more focused jobs at certain points, which is something that babushka is just right for.
It's a really good question, and one I probably should answer more directly on the website and in the README.
As I wrote above, I have a lot of time for these other tools—in fact the creators of sprinkle (Marcus Crafter) and deprec (Mike Bailey) are both mates of mine here in Melbourne, Australia—and I don't want to just duplicate their work. I'm trying something different here. Deployment is definitely still important to me with babushka, but I'm trying to build a more general tool that makes it as fast and pleasant as possible to automate getting to some end goal.
And that's one of the other differences—babushka is goal-oriented, not task-oriented. Unless there's some specific incompatibility, you can install babushka on (for example) any Mac in any state with this
bash -c "`curl -L babushka.me/up`"
And then running this
babushka homebrew
Will get you all set up with homebrew. But what it does is achieve the end goal of having homebrew set up—which might mean doing nothing, or cloning a git repo, or possibly just doing a `git reset --hard` to drop a binary in place. It depends on the system. The upshot though, is that if you're working on some other problem and a new colleague needs homebrew, you can run one command and you're done, instead of getting sidetracked for 15 minutes.
In focusing on that, I sacrifice usability in other areas—for example, right now there's not really any such thing as an unattended run using babushka, because most complex dep trees require user input at runtime. It's still very much a hands-on process. And that's cool with me—there are already tools out there that solve those problems, and solve them well.
I'm looking at working on deployment with babushka more with @glenmaddern, @dgoodlad and some other Melbourne hackers soon. But I'm very conscious of all the existing tools out there, and I'm a strong believer in deferring to the right tool for the job whenever possible. So I'm looking to integrate with existing tools where it makes sense, and solving old problems in novel and awesome ways whenever I can. :)
I happened to choose Sprinkle for the reason that I'd choose Babushka if I knew it was in mature-ish state already. Chef is twisted, elaborate, and complex initial setup effort, with servers and clients, and books of documentation. I'd better spend the time learning shell scripting itself. Puppet/Moonshine has the type of syntax that doesn't fit me as a ruby developer. X - there is no X really. Not many options out there. Theoretically you could do everything with pure Capistrano, but that's not much different than manual shell scripting yet again. However I'm not the author of Babushka, this is just my take on your questions.
Unrelated question. How did you make syntax highlighting for bash prompt? I mean, yellow strings ('user exists' on 5:40) and orange wrong commands (enclosed string "'use").
If you had spelled it "Babooshka" like Kate Bush, there's no way I could have refused to use this tool.
I would have been "all yours".
(For those too young to know who Kate Bush is, imagine if Lady Gaga took the effort she puts into weird & eclectic outfits and made weird & eclectic twists on pop music instead)
For those that are interested in trying out babushka, here's a 30 second crash course. To install:
Some good examples to start with: If you want to see what will happen without making any changes, use `--dry-run`: If you're on a Mac, you can follow along in TextMate too using `--track-blocks` — babushka points out each piece of each dep as it runs them. (This also works with `--dry-run`, so you can inspect the code a tree of deps would run.) Any questions, get in touch with @babushka_app on Twitter, #babushka on Freenode, or email hello@babushka.me.Cheers — @ben_h
[edit: fixed the babushka.me/up links.]