Wow, POSIX specifies that the type of the nanoseconds field in struct timespec must be long. Did they have a competition to pick the worst possible choice for that type? It's a value that must be able to hold a (maximum of 30-bit) value from 0 to 999,999,999. So they picked a signed type that is at least 32 bits, but sometimes larger.
2