CBMC vs Infer
CBMC
cprover.orgInfer
fbinfer.comSide by side
| Figure | CBMC | Infer |
|---|---|---|
| Price from | Free | Free |
| Free plan | Yes | Yes |
| Free trial | — | — |
| Open source | — | — |
| Web | — | Yes |
| Windows | Yes | — |
| macOS | Yes | Yes |
| Linux | Yes | Yes |
| Self-hosted | — | Yes |
| Plans published | 1 | 1 |
| Spec score · C and C++ Static Analysis Tools | 8.7 (#2) | 8.5 (#5) |
| License | The maker identifies the license as BSD 4-clause; its terms permit redistribution and use in source or binary form subject to conditions. | The Infer repository states that Infer is MIT-licensed, while noting that enabling Java support may require GPL-licensed components. |
| Purpose | CBMC is a bounded model checker for C and C++ programs. | Infer is a static analysis tool that produces a list of potential bugs from Java or C/C++/Objective-C code. |
| Support | The CBMC page directs questions to Daniel Kroening, and the CPROVER manual links to Google Groups support and announcements. | The project directs users to GitHub issues and the #infer IRC channel on Libera Chat for questions and issue reports. |
| Supported languages | It supports C89, C99, most of C11/C17, and many compiler extensions from GCC, Clang, and Visual Studio. | Infer is a static program analyzer for Java, C, C++, Objective-C, and Erlang, written in OCaml. |
Plans
In their own words
CBMC
CBMC is a bounded model checker for C and C++ programs, available for Linux, macOS, and Windows. It checks memory safety, including array bounds and pointer use, along with several forms of undefined behavior and user-specified assertions. Its language range includes C89, C99, most of C11 and C17, and extensions from GCC, Clang, and Visual Studio. CBMC verifies by unwinding program loops and passing the resulting equation to a decision procedure. It can check C and C++ I/O equivalence with languages such as Verilog, and generate test cases for branch, decision, path, and MC/DC coverage. Listed language features include arrays, dynamic memory, nondeterminism, assumptions, assertions, and selected C++ features such as classes, templates, and STL containers. A MiniSat-based bit-vector solver is included; Boolector, CVC5, and Z3 are supported but must be installed separately. CBMC is free at free under a BSD 4-clause license. The Windows and macOS distributions are command-line tools without a GUI.
Infer
Infer is a static analysis tool that examines compiled Java, C, C++, Objective-C, and Erlang code and reports potential bugs before release. Its checks include null pointer problems, resource or memory leaks, coding conventions, unavailable APIs, and concurrency issues such as data races. Some analyses can follow an issue across multiple functions or methods and files. Pulse provides memory-safety analysis, while RacerD checks thread safety. Cost analysis estimates asymptotic function complexity for Java and C-family languages; Hack support is experimental, and Python, Rust, and Swift are not supported by that analysis. Infer captures compilation commands, analyzes the captured files, and writes reports that can be reviewed with `infer explore`; files that are not compiled are not analyzed. Integrations are documented for build tools including Buck, CMake, Gradle, Make, Maven, Xcodebuild, and xctool. It can be installed from binary releases, built from source, or run in Docker. The free plan costs nothing. Infer runs on Linux and macOS, with web and self-hosted options; Windows is not supported.