The argument for |bugmode| (was Re: If we have versioning, it should be in an attribute, not the doctype)

Matthew Ratzloff wrote:
> I feel that a version is necessary given the fact that:
> 
> - Microsoft says it needs an explicit opt-in,
> - 80% of the market uses Internet Explorer,
> - Most pages serve unique content to Internet Explorer, and
> - Microsoft will implement an unofficial opt-in whether or not one is
> specified expressly.
> 
> Since we are "paving the cow paths" it seems to me that we must also pave
> foreseeable future cow paths as well.  To that end, add a version
> attribute and just be done with it.  Everyone else can ignore it.

   I don't really see what Microsoft gets out of a |version| attribute.
Here's why:

1) The proposed versionless doctype for HTML5 can be used as a switch on
its own, so we're really talking about a |version| attribute for use
when we release HTML6, by which time we may very well have moved to
XHTML 2.0 or something anyway. So we resurrect |version| from the dead
just to kill it again.

2) It's unlikely that HTML6 will come out between IE8 and IE9 because of
greater competition in the browser market, so Microsoft will end up
using a switch unrelated to the HTML version before they even get to use
|version|.

3) If only the HTML version is used as a switch, IE will never support a
 standards compliant version of the current HTML standard. They'll
always end up supporting the previous version plus some buggy new
features. What's worse, they will probably lobby for the new HTML6 spec
to incorporate some of their non-compliant behavior in the interest of
compatibility with the web. Thus, pages written for the previous
specification (HTML5) will be rendered incompatible with later HTML
versions (HTML6 and so on) even though they were fully compliant with
the spec when it reached Recommendation status.

   So a |version| attribute is both next to useless for Microsoft and
harmful for existing pages that try to remain true to the HTML5 spec.

   Enter |bugmode|. It works very similar to a |version| attribute, but
rather than specifying the version of HTML, it specifies the version of
a specific user agent that the page was designed to be bug-compatible
with. Example:

| <!DOCTYPE html>
| <html bugmode="IE7">

   Note that this solution allows Microsoft to make multiple releases
between HTML version, because they'll never run out of potential
|bugmode| values. Also, the feature can also be used for pages that
depend on bugs in other user agents:

| <!DOCTYPE html>
| <html bugmode="Gecko 1.9">

   And if the page is designed to render without dependencies on the
bugs of any particular user agent, you just leave it off:

| <!DOCTYPE html>
| <html>

   When a user agent fixes a bug, they're also fixing existing
standards-compliant pages without those pages having to change their
code. However, if the page depends on specific bugs from a particular
user agent, |bugmode| can be specified preemptively so that the next
version of the browser in question doesn't break the page. Also, user
agents can implement bug compatibility modes for other user agents.

   To top it off, it's clear from the name that it indicates a
dependency on characteristics and behaviors of a particular user agent
that are not standards compliant. This makes developers aware that they
are targeting a specific user agent rather than simply exploiting a
quirk of the language.

   End of line.

Received on Wednesday, 18 April 2007 02:15:40 UTC