Having spent some time studying time keeping in computers, I've come to the conclusion that nothing needs to be changed. In particular, UTC is exactly what it should be and should be left as it is. However, there are some things that need to be added:
* Every standard library needs properly implemented and properly documented functions for converting between UTC and TAI.
* NTP should (at least optionally) tell the user TAI and UTC (like GPS already does).
* When mounting a legacy file system there should be an option to specify whether timestamps should be interpreted as TAI or UTC.
* New filesystems should have a field that specifies TAI or UTC. It would probably be a single bit for the whole filesystem rather than per timestamp.
* The CLOCK_UTC proposal should be implemented, with tv_nsec in the range 1000000000 to 1999999999 during a leap second.
* Every standard library needs properly implemented and properly documented functions for converting between UTC and TAI.
* NTP should (at least optionally) tell the user TAI and UTC (like GPS already does).
* When mounting a legacy file system there should be an option to specify whether timestamps should be interpreted as TAI or UTC.
* New filesystems should have a field that specifies TAI or UTC. It would probably be a single bit for the whole filesystem rather than per timestamp.
* The CLOCK_UTC proposal should be implemented, with tv_nsec in the range 1000000000 to 1999999999 during a leap second.