During the summer of last year, I hosted an intern who implemented sandboxfs: a FUSE-based file system that exposes an arbitrary view of the host’s file system under the mount point. At the end of his internship, we had a functional sandboxfs implementation and some draft patches for integration in Bazel.
The goal of sandboxfs in the context of Bazel is to improve the performance of builds when action sandboxing is enabled. The way in which we try to do so is by replacing the costly process of setting up the file system for each action using symlinks with a file system that does so “instantaneously”.
Over the months since then, I’ve been working on this project on the side. While the original implementation worked, I had to put a lot of extra effort to implement missing features required by build tools, to track down difficult bugs, to apply some performance improvements, and to completely redo the Bazel changes in a simpler and more-efficient manner.
Today, I’m happy to announce that sandboxfs is stable enough to support large project builds on top of it and that preliminary support for it has landed in Bazel 0.12.0. But note that this is still experimental: while the integration works, the interface between the two pieces of software is not well defined, and there is still a lot of work to do on the performance side to make this better.
Head on to the official announcement for more details.
Oh, and if you are interested in systems work (performance measurements and tuning, macro and micro optimizations, Go…) and would like to help, please do let me know!