RCS tags are evil
I disagree. Why should they give you 'bad diffs' when there's more than one person working on the project? If you're sharing a repository it just works as $DEITY intended, surely?
And if another project imports your sources, presumably they do it with -ko to avoid tag expansion. And if you disagree with that you might just as well assert that linefeeds are evil because some vegetable might work with your source on a DOS box and convert CR to CRLF.... hence you should write all your code on a single line, perhaps?
Finally, CVS tags _do_ give me information which the CVS command can't tell me on demand. When someone sends me some source code, or is trying to describe to me what some vendor has given them, if it has my $Id$ tags in I can refer immediately back to the real version that what they've got was _based_ on, and hence see the _changes_ which were made elsewhere. There's no other way to do it than to embed version information in the file which is going to survive through being merged into various other trees and source control repositories, and make it back to me, via whatever torturous route it takes, intact.