Why would you? Linux (and any other C or Rust open source project I have worked on) compile and work at any commit.
Most of the time, that's what I expect. However, sometimes when proceeding step-by-step through a large refactor or a large feature addition, the codebase may be left temporarily in an incomplete state.
My preference under such circumstances is to favor clarity of commit history, and leave the step-by-step commits intact — with the requirement that they always be located in a feature branch behind a merge commit.
I only expect that at merge commits, which I can see with `git log --merges`.