Adventures in packaging rust programs
2021-11-10, 17:00–17:20 (UTC), Room 4

Rust has been around as a language for about 10 years now and a necessary part of distribution packaging for at least the last 4 with Firefox depending on it. In Guix we've been struggling to have a sane way to package rust applications and all their dependencies while trying to keep a handle on visualizing build chains and an ever expanding package set.


Installing rust programs from the command line using cargo is straightforward, but what happens when distributions get involved and try to package them? With every input coming from the distribution, how can we make sure to track package dependencies when a package depends on the sources of other packages and not their compiled outputs?
In Guix we've been packaging all the input crates and using their sources. However, the standard build chain assumes compiled packages as build-time inputs for the next package, and this collapses when we only need the source of the input package.
Don't forget the next step! Users of the distributions are supposed to be able to get their development environment from the distribution too! So... how do we give them all these crates in a useful manner?

See also: slides in rst format

Efraim has been a contributor to GNU Guix since 2015 and apparently likes porting Guix to new architectures, having contributed to at least the aarch64, powerpc, and riscv64 ports. He can regularly be found using IRC from his phone to answer questions and has yet to learn Emacs.
When asked, he says watching all the compiling in the terminal window is soothing, with intermittent bouts of shouting 'NO' at the screen. He lives in Northern Israel with his family.