Duplicating 2 or 3 lines may seem like a minor problem, but having to change those 2 or 3 lines every time you make a change quickly becomes a maintainence burden, especially when they're littered throughout your CSS. The extra burden such prefixes brings is greater than the amount of extra characters they add.
Not having to alter your code every time a new browser comes along that is identical to existing implementation is useful, especially since most of the time browsers copy each other's features or implement standards unchanged. This is especially useful since most sites using bleeding-edge features are either tech demos or test-cases.
A non-universal prefix also favours large players and has the potential to squeeze out less popular browsers even if they support the same feature. Even if Opera supports the same standards as Firefox, you can can bet that more people will use the -moz prefix than -o.
The "risk" is that your code will break in unpredictable ways, but the upside is that risk is known (since it's part of the "contract" from the prefix), manageable, greppable, and can be worked-around.
You make a good argument for generating CSS via some kind of more programmable system.
> Not having to alter your code every time a new browser comes along that is identical to existing implementation is useful
And what about those times when the new browser isn’t identical? I'd hazard that that’s more usual with this kind of experimental new features.
http://github.com/chriseppstein/compass/tree/master/framewor...
The current situation is an escape valve for the inevitable flux & lag between the standards process and implementation compliance.
If you invent a universal prefix you no longer have as much of an escape valve...you just have a namespace where you accept random non-compliance. And if you're ok with one such namespace, then why not one for each rendering engine, so that they're at least compartmentalized a bit?
-o-superstyle
-webkit-superstyle
-moz-superstyle
-ms-superstyle
superstyle /* for new versions released after standard becomes stable */
And only if no more new browsers appear.
My opinion is that the only problem is that the vendor prefix for border-radius was dropped too late.