The obvious solution to avoid time going backward at the leap second is to deploy a separate time standard which monotonically counts forward, so it is TAI except expressed as a number. We will need a new set of system calls to get and set that number. We probably need to augment NTP to distribute that number.
Computers can internally count the new number, or internally count UTC as they currently do. They can provide both system calls, converting between them depending on which system call is invoked and what they internally count. New and updated software should use the new system call, but the old system call can be provided indefinitely for backward compatibility. New systems should internally count the new number.
Smearing the leap second over (say) a day is less than ideal because time will disagree with computers not smearing. It may also interfere with tasks needing a time interval to high precision.
The new number should be significantly different from the POSIX counter (Unix time) so that if one is accidentally substituted for the other, it will be obvious. Previously, we proposed a fanciful 835-bit wide number, which avoids needing to encode floating point and will probably never need to worry about overflow.
There is something wrong about attempting to politically end leap seconds when this kind of non-disruptive software solution exists.