This talk by Titus Winters challenges conventional software dependency management by redefining software engineering as "programming integrated over time." Winters argues that widely adopted practices like Semantic Versioning (SemVer) are fundamentally flawed because they rely on the unrealistic ability to distinguish between "breaking" and "non-breaking" changes, a concept undermined by Hiram's Law. As dependency graphs grow, this leads to an increasing likelihood of unsolvable version conflicts.
As an alternative, Winters advocates for a "Live at Head" philosophy, where projects continuously integrate the latest versions of their dependencies. This model shifts the burden of managing updates from the consumer to the library provider, who must ensure smooth transitions by providing automated upgrade tools. This approach is embodied in Google's newly open-sourced C++ common libraries, Abseil. Abseil offers a collection of battle-tested utilities, pre-adopted C++17 types that seamlessly alias to standard versions when available, and alternative library components designed with different priorities like safety and ease of use. The talk serves as both a critique of existing versioning dogma and a practical guide for building sustainable, evolvable software ecosystems.
Embracing Change: The "Live at Head" Philosophy and Google's Abseil Library
0:08:35 Software Engineering vs. Programming: The core thesis is that software engineering is "programming integrated over time." While programming focuses on making something work now, engineering must account for changes in requirements, libraries, and environments over the project's lifespan. An example is given of how a "required" field in a protocol buffer, which seems logical in isolation, becomes a liability when deploying updates over time.
0:15:03 The Problem of Diamond Dependencies: A central challenge in software engineering is the "diamond dependency," where a project depends on two libraries (A and B) that in turn depend on different, incompatible versions of a third library (C).
0:16:56 A Critique of Semantic Versioning (SemVer): Winters argues that SemVer is a flawed solution to dependency management. Its distinction between major (breaking) and minor (non-breaking) changes is ambiguous.
Key Takeaway: Per Hiram's Law (0:24:29), with enough users, every observable behavior of an API—including bugs and implementation details—will be depended on by someone, making almost any change a potential "breaking change."
0:27:50 The "Live at Head" Alternative: Instead of pinning to specific versions, developers should continuously use the latest "head" revision of their dependencies. This practice, common within Google's monorepo, eliminates the possibility of version skew and diamond dependency conflicts.
0:29:36 Tooling Makes It Possible: The "Live at Head" model is enabled by modern refactoring tools (e.g., based on Clang). The responsibility shifts to the library provider to supply tools that can automatically update user code when an API change is necessary.
0:39:44 Introducing Abseil: Google is open-sourcing its foundational C++ libraries under the name Abseil. These libraries are used by over 12,000 developers internally across 250 million lines of code and will be adopted by major open-source projects like gRPC, Protobuf, and TensorFlow.
No SemVer: Abseil does not use version numbers. Users are expected to build from source and sync to head regularly.
Tools for Upgrades: If an API change is required, Abseil will provide a tool to automate the necessary user-side code changes.
0:43:39 Writing "Well-Behaved" Code: To benefit from Abseil's compatibility promises, users must write "well-behaved" code. This includes not adding symbols to the absl namespace, not depending on a stable ABI or internal implementation details, and not relying on fragile language features like Argument-Dependent Lookup (ADL).
0:46:22 Seamless Adoption of Future Standards: Abseil provides C++11-compatible versions of newer standard types (like absl::string_view, absl::optional). When compiling in a newer C++ mode (e.g., C++17), these types become simple aliases for their std:: counterparts, preventing type duplication and allowing for gradual, seamless migration.
0:54:26 Alternatives to the Standard Library: Abseil offers its own implementations of components like absl::Time and absl::Mutex. These are designed with different priorities than the standard library, focusing on safety (e.g., saturating arithmetic, no undefined behavior), ease of use, and built-in debugging features (like deadlock detection).
1:04:16 Call to Action: Winters urges the C++ community to think about the long-term engineering implications of their code, write well-behaved code that respects library contracts, keep dependencies up-to-date, and embrace tooling to make change manageable and sustainable.