While Rust can call C functions without overhead, the Rust compiler still needs to know about the existence of these functions. To tell the compiler, you must declare these functions in an extern "C" { .. } block extern "C" { .. } . You can learn more about the topic in the FFI chapter of Rust . For C functions that are used by many people (such as Vulkan), it makes sense to put all of these declarations in the Rust library, which others can simply use instead of writing the bindings themselves.
With the above links, we simply expose the original C interface to Rust. But most Rust programmers would rather want to use an API that is idiomatic in Rust (we call it "rusty"). That is: using high-level Rust concepts, such as traits and closures, and be "safe."
The Vulkan libraries you linked:
the second link is just the raw binding generated with the tool (rust-bindgen).
The goal of the tomaka library is to create a rusty API, so it's not just collecting function declarations. tomaka prefers to introduce very little overhead to create a library where most Rust programmers are more comfortable to use than the C interface (by the way: tomaka did this for OpenGL ).
I really don't know about the first library that you linked, but I think this is something in between the two approaches above.
source share