Feature #21205
openMake File::Stat#birthtime available on Linux
Description
Not that I would run into any problem with it, but this behaviour is confusing:
RbConfig::CONFIG["platform"] #=> "amd64-freebsd14"
(File.birthtime "/").class #=> Time
(File.stat "/").birthtime.class #=> Time
RbConfig::CONFIG["platform"] #=> "x86_64-linux"
(File.birthtime "/").class #=> Time
(File.stat "/").birthtime # raises NotImplementedError
Updated by byroot (Jean Boussier) 2 days ago
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.
Updated by BertramScharpf (Bertram Scharpf) 1 day ago
byroot (Jean Boussier) wrote in #note-1:
Contrary to FreeBSD, on Linux the
birthtime
isn't present in the struct returned bystat(2)
: https://man7.org/linux/man-pages/man3/stat.3type.html (see how there is nobtime
).
I know. I did research about that but gave up.
This is how I solved my problem for now: https://github.com/BertramScharpf/rbfind/commit/e6ed59668cb5707f4519272401113a8173f819af.
Updated by byroot (Jean Boussier) 1 day ago
- Tracker changed from Bug to Feature
- Subject changed from File::Stat#birthtime is available on Linux to Make File::Stat#birthtime available on Linux
- ruby -v deleted (
ruby 3.3.7 (2025-01-15 revision be31f993d7) [x86_64-linux]) - Backport deleted (
3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN)
Switching this to a feature request.