From: "byroot (Jean Boussier) via ruby-core" Date: 2025-03-30T09:13:23+00:00 Subject: [ruby-core:121476] [Ruby Bug#21205] File::Stat#birthtime is available on Linux 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/