The Bazel Federation is a set of rules at versions that have been tested together to ensure interoperability.
NOTE: This document is a work in progress. It is very much incomplete.
The most obvious goal of the Federation is give users greater assurance that a set of rules works with a particular Bazel release. We give that assurance by integration testing them against each other. We encourage integration tests that span rule sets. This is especially important as the number of interdependencies of rules grow.
An equally important goal is that if a user adopts a Federation version today, they can continue to use it for an extended period of time. This does not mean that Bazel (or rules) can never have backwards incompatible changes. It means that the Federation is a mechanism to allow a user to continue to use an older version of Bazel along with rules that are being updated. It would be unreasonable to insist that all rules remain backwards compatible with all previous Bazel versions - that is just too much work. Instead, a Federation around an older version of Bazel can be updated to include new versions of some rules, as long as the basic promise that all the rulesĀ in the Federation work together is kept.
This implies a freedom that Bazel maintainers and rule creators should have. They may update their rules in ways totally incompatible with earlier versions of Bazel. If users want to make use of those new features, they will have to update to a new Federation release that includes the updated rule(s). While this may sound like any Bazel release can break arbitrary things it is significantly different.
While it seems that we have granted rule owners the right to never look at backwards compatibility, we want to aim for the best user experience. Rule owners should have some commitments to the community: