This document describes techniques for automatically detecting bugs in system code through inconsistencies in the code's behavior compared to inferred rules. It involves defining checkers based on templates of valid code constructs and beliefs about how the code should behave. Checkers are implemented for null pointers, lock usage, security, failure handling, and temporal rules. The techniques are applied to Linux and OpenBSD, finding many real bugs but also false positives requiring manual inspection. Adoption in industry could be improved through better performance, integration into IDEs, and reducing false positives.