New comment by Hoshpak on void-packages repository https://github.com/void-linux/void-packages/issues/14721#issuecomment-541529072 Comment: I was refering to https://pubs.opengroup.org/onlinepubs/9699919799/ which states: ``` The following shall be declared as functions and may also be defined as macros. Function prototypes shall be provided. void endutxent(void); struct utmpx *getutxent(void); struct utmpx *getutxid(const struct utmpx *); struct utmpx *getutxline(const struct utmpx *); struct utmpx *pututxline(const struct utmpx *); void setutxent(void); ``` Musl implements that by declaring the functions and just having them return NULL when called in https://git.musl-libc.org/cgit/musl/tree/src/legacy/utmpx.c . This is arguably a bad way to do it but I think since the standard does not mandate an implementation they are not technically breaking the specification. So the check for the function's existance will succeed, the code will compile but it will not work the way it's inteded to do. We had the same issue with glibc earlier since runit as an init system does not write utmp records as other init systems do so libvirt would fail the same way as it did on musl. We worked around that however by writing a boot record within our own boot scripts.