To be posix compatible, you have to remove the leap seconds, creating aliased timestamps where the same value of time() refers to different seconds. By not having all that crap in there, and just counting seconds since the epoch, it is sane, simple, and non posix compatible.
However, it is easy to convert the sane result of time() to a posix result with a leap second table. And if I were delivering a posix compatible system, I would do that conditionally so that posix apps (assuming there are any that actually rely on time()%60 == seconds_in_minute) would work.
It is impossible to go the other direction, since the posix time is ambiguous.
Another interpretation could be that posix actually expects time() to be a simple count of seconds, but that the output of *localtime* should guarantee that time()%60 == seconds_in_minute. This would be a constraint on what timezones are allowed in a posix system. In fact, the more I think about it, I think this is what POSIX people really mean. You must use timezone files that do not handle leapseconds. So by not including leap seconds in the default timezones, linux is posix compatible. Only by using the timezone in the "right" directory do you get leapseconds, and are no longer compatible with posix - but time() still returns the same value. It is just the interpretation by localtime() that changes.
This is what I said at first, and what the linux man page implies.