I don’t see a compelling reason to make memcpy have the same argument order as io::fs::copy. Those are two clearly different functions, that have done clearly different things for ages. There’s not even in the same top-level module in std!
The argument that “in English, we say 'move this from here to here”, doesn’t hold up under scrutiny. Do we say “move this from here to here, but n of them?” No. We say “move n things from src, to dst”, but no one is arguing that we should make that the order. That would be silly.
C++'s std::copy has its parameter order because it lives in std::algorithm, and should be compatible with the other functions there. It wasn’t intended as a memcpy replacement. It was intended to replace a loop with assignment. They’re different in C++. In fact, it’s best practice to call memcpy when you want a memcpy.
When I came to rust, I didn’t ask myself “What’s the function for copying bytes from one location to another?”. I thought to myself “What’s memcpy in rust?”. I suspect I’m not alone. The parameter order is not “one of C’s great mistakes”. Google around. Very, very few people are confused by this, and no one is unhappy with the status quo. Compare it to the results for “C NULL pointer”.
I call memcpy infinitely more than io::fs::copy, but you don’t see me arguing that io::fs::copy should change its parameter order. Keep the arguments in the same order as memcpy, and stop surprising people actually using rust for systems programming.