[ruby-core:121475] [Ruby Bug#21205] File::Stat#birthtime is available on Linux

Issue #21205 has been reported by BertramScharpf (Bertram Scharpf). ---------------------------------------- Bug #21205: File::Stat#birthtime is available on Linux https://bugs.ruby-lang.org/issues/21205 * 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/

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/

Issue #21205 has been updated by BertramScharpf (Bertram Scharpf). byroot (Jean Boussier) wrote in #note-1:
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`).
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>. ---------------------------------------- Bug #21205: File::Stat#birthtime is available on Linux https://bugs.ruby-lang.org/issues/21205#change-112497 * 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/

Issue #21205 has been updated by byroot (Jean Boussier). 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. ---------------------------------------- Feature #21205: Make File::Stat#birthtime available on Linux https://bugs.ruby-lang.org/issues/21205#change-112498 * Author: BertramScharpf (Bertram Scharpf) * Status: Open ---------------------------------------- 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/
participants (2)
-
BertramScharpf (Bertram Scharpf)
-
byroot (Jean Boussier)