Buckaroo brings package management to C/C++ projects

Buckaroo uses Facebook's Buck build system and has its own curated repository of packages

Buckaroo brings package management to C/C++ projects

While it’s fashionable to dump on C and C++ for being old school, they’re still hard to beat for sheer speed or power. But what’s often lacking is modern toolchain elements like a package manager. Go, Rust, Node.js, Ruby, and Python all have standard-issue methods to perform package management; C and C++ don’t—and that’s where third-party tools have an opportunity to step in.

One recent example is Buckaroo, which comes from LoopPerfect, creator of an interactive C++ development environment called Jyt. Buckaroo is an open source system for adding packages from a managed repository to a C/C++ project “in a controlled and cross-platform way.” Here, "cross-platform" means Windows, Linux, and MacOS, using whatever compiler is available.

Buckaroo uses the Buck build system created by Facebook, which provides mechanisms for managing and tracking dependencies in a project. Buckaroo’s CLI lets you spin up a new project with one command using a "hello world" template—or start a new empty project—then add and manage dependencies.

Languages with their own package management features typically have a managed repository of packages: PyPI for Python, NPM for Node.js, or Crates.io for Rust. Buckaroo aims to do something similar for C/C++, as it offers a curated list of packages rather than merely serve as an interface to a GitHub repository or local directory. Many popular libraries are available, including zlib, OpenSSL, and libraries from the Boost collection.

This curated approach has a drawback: It’s only possible to use Buckaroo with packages in its official repo. Also, there’s currently no tool for automating submissions to the repository; a project’s maintainer has to open a GitHub issue and work with Buckaroo’s maintainers to do this.

Another possible drawback is Buckaroo’s dependence on Buck. On the one hand, it’s a smart idea—why reinvent a wheel when there’s one available that has the resources of Facebook behind it? But it also means that projects dependent on other building systems have to be ported to Buck first, in order to make full use of what Buck provides. In the case of a building system like CMake, there doesn’t appear to be an automated path for porting projects to Buck. That means Buckaroo’s biggest benefits will be for new projects or those with few dependencies or a minimally complex build system.

There’s nothing that says a language already outfitted with a package management system can’t try different approaches. Node.js, for instance, has long had the NPM repository and package management system, but Facebook recently introduced Yarn, which touts faster package installation and better management of dependencies in projects.

Copyright © 2017 IDG Communications, Inc.