Domain: Software Engineering / Build Infrastructure & Tooling
Persona: Senior Principal Build Systems Architect
Abstract
In "Building C++: It Doesn't Have to be Painful!", Nicole Mazzuca (reMarkable, formerly Microsoft vcpkg) addresses the persistent ergonomic deficiencies of CMake and introduces "rho," an open-source CMake library designed to provide a declarative, Cargo-like user experience for C++ developers. The talk identifies that while CMake’s underlying model is robust, the high boilerplate requirement for standard tasks—such as installation, dependency management, and platform-specific configurations—leads to fragile, "Stack Overflow-driven" build systems.
Mazzuca details the architectural shift at reMarkable from a monolithic application repository to a modular multi-repo structure, facilitated by rho. Key technical features of the library include automated source discovery via globbing, simplified vcpkg integration, and encapsulated installation logic that eliminates the need for manual export/config-file generation. The presentation concludes with an analysis of current package management challenges, specifically regarding local development workflows in vcpkg, and the ongoing industry-wide struggle to implement C++20 modules effectively.
Summary of Proceedings
0:00 – Introduction & The Ergonomic Crisis: Mazzuca argues that while CMake is the industry standard with a "fantastic" underlying model, its user-facing ergonomics are poor. Most developers resort to "Stack Overflow-driven development," copying fragile boilerplate because they prioritize writing feature code over build logic.
4:00 – Comparative Tooling Analysis: The "North Star" for rho was the Developer Experience (DX) of modern languages like Rust (Cargo), OCaml (Dune), and Go. These systems handle source discovery, installation, and dependency management implicitly, whereas a "correct" single-file CMake library can require dozens of lines of error-prone code.
6:37 – Case Study: The reMarkable Transition: The company is moving from a monolithic application repo to a multi-repo architecture to allow core libraries (graphics, file systems, networking) to be reused across different platforms (tablet, desktop, mobile).
10:03 – Introducing "rho": Rho is a CMake library that encapsulates "the hard parts" of the build. It is designed to be added to existing CMake projects via a 40-line bootstrapper that fetches the library from GitHub, allowing for out-of-band updates without modifying every project repository.
12:57 – Architectural Principles & Escape Hatches: A core principle of rho is not "assuming you control the world." It provides high-level defaults but maintains "escape hatches" for downstream users who may need to override compilers or paths.
16:39 – Source Discovery & Globbing: Rho utilizes globbing (file-based discovery) for sources and headers. Mazzuca defends this approach against traditional CMake critiques, noting that modern build tools like Ninja handle globbing efficiently and that it significantly improves DX by removing the need to manually list every file in CMakeLists.txt.
18:02 – Comparative Code Reductions: Mazzuca demonstrates that rho reduces complex, multi-page CMakeLists.txt and vcpkg portfile.cmake files into a few lines of declarative code. The system automatically handles standard versioning, namespace-based target naming, and installation paths.
22:21 – Challenges with vcpkg in Local Development: The talk highlights friction in vcpkg when used for internal, rapidly changing dependencies. Because vcpkg assumes the packager is separate from the author and uses Git Shas for versioning, coordinated breaking changes across multiple internal repos can become "a pain" of circular PR dependencies.
27:38 – Future Roadmap & The "Module" Problem: Future goals for rho include package-manager independence (e.g., potential Conan support) and better testing infrastructure. Mazzuca expresses skepticism regarding C++20 modules, citing a lack of implementation maturity for cross-compiler installation as of 2025/2026.
31:35 – Call to Action: The rho library is available as an Open Source Software (OSS) project on GitHub, aimed at developers who "do not care about build systems" and want a standard, low-friction path to building and installing C++ components.
32:25 – Q&A - Build System Integration: Discussion focuses on how rho interacts with find_package providers and FetchContent. Mazzuca notes that while rho provides rho_find_package to manage metadata, it stays compatible with standard CMake namespacing to avoid locking users into a proprietary ecosystem.