- From: Sylvain Galineau <sylvaing@microsoft.com>
- Date: Sat, 5 May 2012 14:03:24 +0000
- To: Daniel Glazman <daniel.glazman@disruptive-innovations.com>, "www-style@w3.org" <www-style@w3.org>
[Daniel Glazman:] > > Florian, I think your proposal has one flaw only but that's a pretty big > one... We introduced prefixes originally to be able to have preview > implementations potentially differing from the final spec and > implementations. Prefixes were supposed to allow vendors to start > implementing, test, discover issues and hence feed the standardization > process. If preview implementations are aliased without prefix, they will > be adopted by web authors, and sometimes _widely_. Some browser vendors > said they just cannot let web sites suddenly become broken when an > implementation changes following spec changes. That concern remains. If > property A is implemented prefixed AND unprefixed at date d, and the spec > for that property changes at date d+1, how will vendors update their > implementation AND preserve sites implementing date d's draft from > breakage? > The simple answer is that this already happens today. Different prefixed implementations support different versions of a draft. For instance, Gecko's early font-feature-settings implementation requires unquoted OpenType tags, Trident's came later and requires them to be quoted per the newer spec draft. So you have to feed equivalent values to each engine. And this is what prefixed properties are perfect for (vendor prefixing is engine sniffing by another name, after all). A trickier scenario is when the change is behavioral i.e. the semantics of a value change, or a new set of values are not treated as invalid but do nothing or something different in the older implementation. Given established practice of specifying the unprefixed property last this is worrisome as the newer value would always win. I suppose the workaround would be to specify your engine-specific workaround after the prefixed version instead so the older engine picks the preferred fallback through the cascade. So the pattern would be to declare the unprefixed property first, followed by engine-specific overrides if/when testing indicates you need any. This of course implies the original prefixed implementation of the feature doesn't change over time or stays backward-compatible; this is already largely true today in my experience. This brings up a much bigger issue though: whether, why and how the WG should change something that is widely used. If we do our job well, the differences between the earlier implementations and the final standard will either be minimal (border-radius) or have very limited impact due to lack of use on the web (flexbox). In cases where a feature is widely used and the WG would like to make a change then I think, on principle, that making breaking changes much harder for the WG is a feature, not a bug. When a feature does achieve wide traction the editor(s) and the group should have very strong incentives to find compatible ways to address a new issue. Note that I do agree it is good for the web to ensure the standardization process is insulated from the whim of any single vendor. I'm not as sure it is good for the web when the standardization process is sufficiently insulated from the current state of web content that it can force breaking cosmetic changes on a popular feature at the 11th hour*. Once a feature is widely used, changing it will have a very real cost the people who build the web. That the current process makes such changes virtually free to the WG is, imo, the bigger flaw here. Some will argue the long-term gains of, for instance, better consistency or usability - as they see it - are far more important than the short-term pain on early adopters. That may be a defensible position when looking at a single module. When developers who learned gradients and flexbox in the past year already have to re-learn their syntax or naming and update their content accordingly - as our Win8 app developers are doing today - I still wonder how sustainable or beneficial this is given all the promising modules we have going on. Overall, I don't think raising the bar for change based on a feature's success is a crazy idea though agreeing on what 'successful' means may not be easy. While I suspect it may be too time-consuming, I wonder if it would be helpful to do a what-if against a couple of recent modules: what if we had followed Florian's proposal and unprefixed flexbox or gradients or transitions at a much earlier point in time? What changes would have been hard or impossible to make in a backward-compatible manner? What solutions would we have come up with instead? How good/bad would the result be? *: Yes, I am thinking of gradients. Yes, I agreed to most of these changes at the time. Yes, I now believe I was mistaken. Yes, we shouldn't extrapolate from just one recent case. Still, the process explicitly allowed and enabled these changes to happen. I see no reason to believe this can't happen again beyond the fact that some of us acquired a strong distaste for such decisions from that experience.
Received on Saturday, 5 May 2012 14:04:02 UTC