I kind of like the Go approach to this. (i.e. a fixed bootstrapping version that is compilable from c.) It's easy to identify what you need to bootstrap and doesn't absolutely require bootstrapping every time you compile. (i.e. you should be able to build the next go with 2 compiles once you're through the initial bootstrap rather than 3)