With my move to Qubes I want to leverage its compartmentalization capabilities to adopt a mostly offline programming model. Something like one qube per project, no NetVM. This is ready to go were my project dependencies all available in Debian/Fedora package repositories: assemble a template with everything I need installing through the updates proxy.
But Rust has its own repositories: Cargo for libraries and binaries and rustup
for toolchains; and in the standard workflow installed dependencies are writable, semi-ephemeral, and stored locally to the project code. So, less suited to installation into a persistent readonly FHS-respecting template, at least at first blush.
More pragmatically I think I could install everything within my offline project app qube/s by enabling the updates-proxy-setup
service and configuring Cargo and rustup
to use that proxy, as it is permissive by default.
https://doc.rust-lang.org/cargo/reference/config.html#httpproxy
https://rust-lang.github.io/rustup/network-proxies.html
Well, this is likely what I’ll do… but halfheartedly. The presence of the open proxy will mean the qube is no longer offline, there is no true network gap between my project code and the wild. I could toggle the proxy on/off as needed, but that is security/privacy theater. I could attenuate the permissiveness of the proxy, and- maybe. What is my threat model? I don’t really have one, it’s just I like the “hygiene” of a full separation, philosophically.
If there are other programmers here who use Rust, what’s your workflow? Do you have a better development model?