Description
Previously: rust-lang/rust#72175, rust-lang/rust#93562
The stdlib has a bunch of unsafe
APIs (e.g. FromRawFd
) that are primarily unsafe
because they care about "I/O safety".
Rust libraries are free to expand the scope of what they consider unsafe
, but this is typically a crate-local decision. The stdlib due to its special status risks imposing this on other crates.
Basically, if a crate or project wishes to not consider I/O safety a problem (which is often necessary in more complicated I/O code! Exactly the kind of code that would wish to use these APIs) these APIs are not useful to them: it is currently unclear as to what usages of these APIs are undefined behavior vs a violation of I/O safety.
There is a valid optimization that could be performed here in the future which would be to use niches for -1
fds on Unix (etc), so there is a potential for this API being Actually UB, but that's actually something that can be checked (unlike "is a real owned FD").
It would be nice if we could settle on what is Actually UB in these APIs, and what is "a violation of I/O safety", and document it.
cc @thomcc