| They are quite different, speaking of Bazel it’s designed to be an all inclusive build system for any language at essentially infinite scale. Which means it: - Has nice Python based DSL - Strongly encourages 100% explicit dependency specification - Has built in caching (local and remote) - Built in test result caching - a fully featured build graph query language - Built in distributed execution support (for any build step) - All work scales by part of tree you are building not it’s absolute size - Support for fetching external source code and binary deps - Has first class support for executing and testing containers - Has first class support for code gen (ie you can build a compiler use it to generate code, then build its output,and everything works, no hacks in one build system) The downsides: - Works best if you all your code is built with Bazel, which makes deps hard - Support for Python is weak, Ruby non existent, and Node is beta quality - Has essentially zero convention, everything must be explicitly configured (ie explicitly describing go deps) - Has a memory hungry local java daemon - Has a more overhead than ninja (but is more accurate because of hashing and isolation) |