As opposed to that C# did not have to worry about these things due to their limited deploy base and could freely change the language and/or the VM without worrying about backward compatibility.
That does not mean java is a better language than C# - its just that when Sun woke up and started adding features to the language, it was not easy.
Then other decisions forced them to change the bytecode anyway, but they never fixed generics.
I don't know how Java does it, but .Net installs framework versions side by side (typically under C:\WINDOWS\Microsoft.NET\Framework) so changes to, say V3.0 don't affect apps that run on framework 2.0 at all. Thus breaking backward compatibility for anyone (small or large installed base, doesn't matter) is not an issue when rolling out a new framework version.
annotations (though C# calls them "attributes")
he means "Java added attributes, which C# had from day 1, but called them "annotations""
C# has many of the same features as Java ... generics
Again, C# had this first, and still does it better since the bytecode is aware of them.