When building, cargo requires the source of all transitive dependencies to be present in its index. Rather than force package definitions to list out all transitive inputs, the build system will automatically expand the inputs as necessary. Because it is possible for crates to have apparent cycles in their native dependencies, the build system must take some measures to work around potential cycles. This patch series takes an initial naive stab at resolving the problem, by never building native-inputs. I plan on revisiting this sometime soon and making the system a bit more intelligent (namely building native-inputs where possible and breaking any cycles). But for now this should unblock working on package definitions. I’ve also included three rust crates as a proof of concept that the system works and it handles potential native-input cycles. These crates do nothing on their own, but they’re heavily depended upon by the rest of the crates ecosystem, so they will eventually be useful to have in guix. —Ivan