For FileSystem, there is a clear win, so I'd say the change is really worth.
1) you add more capabilities
2) more logical/convenient API
3) more efficient implementation
4) more scalable implementation
The optional compatibility layer you offered is the exact solution to the upgrade problem (you give a bit of time to maintainers)
I buy it.
For and:and:and: etc... I agree with deprecation because such selector adds near to null
(I personnally changed many senders in Squeak, so I'm totally biased here).
For isNotNil I'm not convinced at all.
To me, it's not much but noise.
There are currently 3 senders vs 890 for notNil. I imagine many more in many packages.
Think in mid/long term. What's your plans? Wait for the balance to slowly inverse? Rename all?
For notEmpty, it's worse: 6 implementors.
So what's the new contract? any new implementor of notEmpty shall also implement isNotEmpty?
Or isNotEmpty is implemented in term of notEmpty in Object?
Currently, 5 out of 6 implementors of notEmpty do not implement isNotEmpty and 1 out of 2 implementor of isNotEmpty does not implement notEmpty.
It's not just noise, it's currently a mess!
As for an automated rewrite rule, yes, this is some very usefull features for supporting such refactorings.
I'd say a pre-requisite.
But that force using several branches for cross version support, or worse, cross dialect support.