Contrary to FreeBSD, on Linux the birthtime isn't present in the struct returned by stat(2): https://man7.org/linux/man-pages/man3/stat.3type.html (see how there is no btime).
What File.birthtime does, it that it uses statx(2) https://man7.org/linux/man-pages/man2/statx.2.html
So the only way to fix the weirdness you point out, would be for File.stat to actually use statx(2) under the hood.
But it returns a lot more data, so there might be some performance considerations.
That being said, perhaps we should do it for correctness, because unless I'm mistaken, on Linux stat(2) return 32bit time, so it will wrap around in 2038. statx(2) returns 64-bit timestamps, so it seems that Linux want users to migrate to statx(2) eventually.