[ruby-core:121476] [Ruby Bug#21205] File::Stat#birthtime is available on Linux
From:
"byroot (Jean Boussier) via ruby-core" <ruby-core@...>
Date:
2025-03-30 09:13:23 UTC
List:
ruby-core #121476
Issue #21205 has been updated by byroot (Jean Boussier).
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.
----------------------------------------
Bug #21205: File::Stat#birthtime is available on Linux
https://bugs.ruby-lang.org/issues/21205#change-112494
* Author: BertramScharpf (Bertram Scharpf)
* Status: Open
* ruby -v: ruby 3.3.7 (2025-01-15 revision be31f993d7) [x86_64-linux]
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
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
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/