@@ -380,57 +380,82 @@ Requirements for Responsible Implementation of CSS</h2>
380380
381381 To avoid clashes with future stable CSS features,
382382 the CSSWG recommends the following best practices for the implementation of
383- unstable features and proprietary extensions to CSS.
384- A CSS feature is considered <dfn>unstable</dfn> unless
385- its specification has reached the Candidate Recommendation (CR) stage in the W3C process.
386- A CSS feature is a <dfn>proprietary extension</dfn> if it is not intended for
387- or released for use on the World Wide Web.
388-
389- <ol>
390- <li>
383+ <a>unstable</a> features and <a>proprietary extensions</a> to CSS:
384+
385+ <h4 id="unstable">
386+ Experimentation and Unstable Features</h4>
387+
388+ Issue: Rewritten per gregwhitworth's feedback.
389+
391390 Implementations of <a>unstable</a> features
392391 that are described in W3C specifications
393392 but are not interoperable
394- should not be released in production software ;
395- but may be released experimentally (unprefixed) in non-release builds .
393+ should not be released broadly for general use ;
394+ but may be released for limited, experimental use in controlled environments .
396395
397396 <details class=why>
398397 <summary> Why?</summary>
399- This allows both authors and implementors to experiment with the feature and give feedback,
400- while preventing authors from using them in production websites
401- and thereby accidentally "locking in" certain syntax or behavior that might change later.
398+ We want to allow both authors and implementors to experiment with the feature and give feedback,
399+ but prevent authors from relying on them in production websites
400+ and thereby accidentally "locking in" (through content dependence)
401+ certain syntax or behavior that might change later.
402402 </details>
403403
404- <li>
405- If at least three browsers implement a feature
406- (or if a browser has broken the previous rule and shipped an <a>unstable</a> or otherwise non-standard feature in a production release),
404+ <div class="example">
405+ For example,
406+ a UA could release an <a>unstable</a> features for experimentation
407+ through beta or other testing-stage builds;
408+ behind a hidden configuration flag;
409+ behind a switch enabled only for specific testing partners;
410+ or through some other means of limiting dependent use.
411+ </div>
412+
413+ A CSS feature is considered <dfn>unstable</dfn> until
414+ its specification has reached the Candidate Recommendation (CR) stage in the W3C process.
415+ In exceptional cases,
416+ the CSSWG may additionally, by an officially-recorded resolution,
417+ add pre-CR features to the set that are considered safe to release for broad use.
418+
419+ Note: Vendors should consult the WG explicitly and not make assumptions on this point,
420+ as a pre-CR spec that hasn't changed in awhile is usually more out-of-date than stable.
421+
422+ <h4 id="de-facto">
423+ Market Pressure and De Facto Standards</h4>
424+
425+ Issue: Added "should not" against encumbered features, per dbaron's request.
426+
427+ If at least three UAs implement a feature
428+ (or if a browser has broken the previous rule and shipped for broad use
429+ an <a>unstable</a> or otherwise non-standard feature in a production release),
407430 and the implementations have rough interoperability,
408431 <em> and</em> the CSS Working Group has recorded consensus that this feature should exist and be released,
409432 implementers may ship that feature unprefixed in release builds.
410433 <dfn>Rough interoperability</dfn> is satisfied by a subjective judgment
411434 that even though there may be differences,
412435 the implementations are sufficiently similar
413436 to be used in production websites for a substantial number of use cases.
414- Vendors <em> should</em> provide spec-editing and testing resources to complete standardization of such features.
415437
416438 <details class=why>
417439 <summary> Why?</summary>
418- If a feature has already escaped into the wild and sites have started depending on it,
440+ If a feature is sufficiently popular that three or more browsers have implemented it before it's finished standardization,
441+ this clause allows releasing the pressure to ship.
442+ Also, if a feature has already escaped into the wild and sites have started depending on it,
419443 pretending it's still "experimental" doesn't help anyone.
420444 Allowing others to ship unprefixed recognizes that the feature is now de facto standardized
421445 and encourages authors to write cross-platform code.
422446
423- If a feature is sufficiently popular that three or more browsers have implemented it before it's finished standardization,
424- this clause allows releasing the pressure to release.
425- Note, though, that the CSSWG still needs to be consulted to ensure coordination across vendors
447+ <p> Note, though, that the CSSWG must still be consulted to ensure coordination across vendors
426448 and to ensure sanity review by the CSS experts from each vendor.
427- Note also that "rough interoperability" still usually means painful lack of interop in edge (or not-so-edge) cases,
449+ Note also that <a>rough interoperability</a> still usually means
450+ painful lack of interop in edge (or not-so-edge) cases,
428451 particularly because details have not been ironed out through the standards review process.
429452 </details>
430453
431- When exposing an unstable feature to the Web in a production release,
454+ <p> When exposing such an <a> unstable</a> feature to the Web in a production release,
432455 implementations should support both prefixed and unprefixed syntaxes
433456 for the feature.
457+ <ins> Once the feature has stabilized and the implementation is updated to match interoperable behavior,
458+ support for the prefixed syntax should be removed.</ins>
434459
435460 <details class=why>
436461 <summary> Why?</summary>
@@ -440,22 +465,44 @@ Requirements for Responsible Implementation of CSS</h2>
440465 as they get ironed out through the standards/bugfixing process.
441466 </details>
442467
443- <li>
444- When shipping in a production build a feature that is only meant to be used in non-Web environment,
445- it should be supported only through a prefixed syntax
446- and not exposed to the Web.
447- (Even if a feature is intended to eventually be used in the Web,
448- if it hasn't yet been standardized
449- it should still not be exposed to the Web.)
468+ <p> Vendors <em> should</em> provide spec-editing and testing resources
469+ to complete standardization of such features.
470+ <ins> Vendors <em> should not</em> use this clause as an excuse to release features
471+ that cannot be freely implemented by their competitors
472+ (due to platform dependency, licensing restrictions, etc.).</ins>
473+
474+ <h4 id="proprietary">
475+ Proprietary and Non-standardized Features</h4>
476+
477+ Issue: Rewritten as open vs. closed systems instead of Web vs. non-Web, per szilles' request.
478+
479+ A CSS feature is a <dfn>proprietary extension</dfn> if it is meant for use
480+ in a closed environment accessible only to a single vendor's user agent(s).
481+ A UA should support such <a>proprietary extensions</a>
482+ only through a vendor-prefixed syntax
483+ and not expose them to open (multi-UA) environments such as the World Wide Web.
450484
451485 <details class=why>
452486 <summary> Why?</summary>
453- The prefixing requirement allows shipping specialized features in non-Web environments
487+ The prefixing requirement allows shipping specialized features in closed environments
454488 without conflicting with future additions to standard CSS.
455- The restriction on exposure to the Web environment is to prevent
456- accidentally causing the public web to depend on an unstandardized feature.
489+ The restriction on exposure to open systems is to prevent
490+ accidentally causing the public CSS environment
491+ to depend on an unstandardized <a>proprietary extensions</a> .
457492 </details>
458- </ol>
493+
494+ <div class="example">
495+ For example,
496+ Win8 Metro apps, Firefox's XUL-based UI, and the iTunes UI
497+ use extensions to CSS implemented by their respective UAs.
498+ So long as these UAs do not allow Web content to access these features,
499+ they do not provide an opportunity for such content
500+ to become dependent on their <a>proprietary extensions</a> .
501+ </div>
502+
503+ Even if a feature is intended to eventually be used in the Web,
504+ if it hasn't yet been standardized
505+ it should still not be exposed to the Web.
459506
460507
461508<h3 id="testing">Implementations of CR-level Features</h3>
0 commit comments