# Support Policy We generally avoid making backward-incompatible changes. At Google, we run all of the tests in the entire depot before every release and check that there are no regressions. It is much more difficult to do that outside of Google, because there is no single source repository that contains everything. All undocumented features (attributes, rules, "Make" variables, and flags) are subject to change at any time without prior notice. Features that are documented but marked *experimental* are also subject to change at any time without prior notice. The Skylark macro and rules language (anything you write in a `.bzl` file) is still subject to change. Bugs can be reported in the [GitHub bugtracker](https://github.com/google/bazel/issues). We will make an effort to triage all reported issues within 2 business days; we will measure our triaging process and regularly report numbers. ## Current Status ### Fully Supported We make no breaking changes to the rules, or provide instructions on how to migrate. We actively fix issues that are reported, and also keep up with changes in the underlying tools. We ensure that all the tests pass.
Rules Notes
C/C++ rules except cc_toolchain
Java rules
genrule
test_suite
filegroup
### Partially Supported We avoid breaking changes when possible. We actively fix issues that are reported, but may fall behind the current state of the tools. We ensure that all the tests pass.
Rules Notes
cc_toolchain
  • We intend to make significant changes to the way C/C++ toolchains are defined; we will keep our published C/C++ toolchain definition(s) up to date, but we make no guarantees for custom ones.
iOS/Objective C rules
  • We cannot vouch for changes made by Apple ® to the underlying tools and infrastructure.
  • The rules are fairly new and still subject to change; we try to avoid breaking changes, but this may not always be possible.
  • No testing support yet.
Extra actions (extra_action, action_listener)
  • Extra actions expose information about Bazel that we consider to be implementation details, such as the exact interface between Bazel and the tools we provide; as such, users will need to keep up with changes to tools to avoid breakage.
#### A Note on the Internal Rules API We are planning a number of changes to the APIs between the core of Bazel and the built-in rules, in order to make it easier for us to develop openly. This has the added benefit of also making it easier for users to maintain their custom rules, if they don't want to or can't check this code into our repository. However, it also means our internal API is not stable yet. In the long term, we want to move to Skylark wholesale, and we encourage contributors to use Skylark for new rules development, but rewriting all of our built-in rules is going to be a lengthy process. 1. We will fix the friction points that we know about, as well as those that we discover every time we make changes that span both the internal and external depots. 2. We will drive a number of pending API cleanups to completion, as well as run anticipated cleanups to the APIs, such as disallowing access to the file system from rule implementations (because it's not hermetic). 3. We will enumerate the internal rule APIs, and make sure that they are appropriately marked (for example with annotations) and documented. Just collecting a list will likely give us good suggestions for further improvements, as well as opportunities for a more principled API review process. 4. We will automatically check rule implementations against an API whitelist, with the intention that API changes are implicitly flagged during code review. 5. We will work on removing (legacy) Google-internal features to reduce the amount of differences between the internal and external rule sets. 6. We will encourage our engineers to make changes in the external depot first, and migrate them to to the internal one afterwards. 7. We will move more of our rule implementations into the open source repository (Android, Go, Python, the remaining C++ rules), even if we don't consider the code to be *ready* or if they are still missing tools to work properly. 8. In order to be able to accept external contributions, our highest priority item for Skylark is a testing framework. ### Best Effort We will not break existing tests, but otherwise make no dedicated effort to keep the rules working or up-to-date.
Rules Notes
Go rules (Skylark)
  • These rules are an experiment with Skylark, and are not the same code as the rules we use internally, even though we tried to match the semantics.
  • They are not tested very extensively.
Fileset
  • There are vestiges of Fileset / FilesetEntry in the source code, but we do not intend to support them in Bazel, ever.
  • They're still widely used internally, and are therefore unlikely to go away in the near future.