> Is there a reason to be bug for bug compatible with POSIX ?
That assumes that the PTHREAD_MUTEX_NORMAL semantics, as specified by POSIX, is a bug. There's no proof or indication for that. Just because it's not your preferred semantics doesn't mean that it's a buggy semantics.
Note that you'll get PTHREAD_MUTEX_DEFAULT mutexes whenever you use a static initializer for the mutex, or just don't set the mutex type explicitly. We can use lock elision for DEFAULT mutexes, and assuming that it's rather rare to set a specific mutex type, most mutexes will be able to use elision. The problem with the earlier versions of Andi's patches was that they didn't pay attention to the PTHREAD_MUTEX_NORMAL requirements. The glibc community found a solution for how to split out NORMAL from DEFAULT (they shared the same enum constant) without having to change the API or ABI. This solution was then also part of what ended up being committed.