Cargo makes the easy cases very easy. And because it has existed for a very long time, this means that “the easy case” is a very very large amount of the overall cases.
This means that for the majority of folks and projects, it ends up being a very smooth experience.
That does not mean that Cargo is perfect, and there’s a lot of stuff it doesn’t do well.
In my limited experience, it makes the hard cases harder. I had a project where I needed to do some weird linker things and ended up moving to C++ because Cargo couldn't handle it.
At $dayjob we have ended up building three different build systems on top of Cargo. You're not wrong. But luckily those things are pretty rare, in my experience.
I am hoping that buck2 can get easier to use "in the small" and then just switch to it for all things, but it's too immature outside of Meta just yet.
This means that for the majority of folks and projects, it ends up being a very smooth experience.
That does not mean that Cargo is perfect, and there’s a lot of stuff it doesn’t do well.