Standards and pragmatism in web browsers

Recently, Microsoft declared that true "standards mode" in IE 8.0 will be the default, indicating that it will try to render all pages marked with the proper DOCTYPE according to the more rigorous (and ACID2-compliant) HTML rendering rules of the improved standards mode in IE 8.

Recently, Microsoft declared that true "standards mode" in IE 8.0 will be the default, indicating that it will try to render all pages marked with the proper DOCTYPE according to the more rigorous (and ACID2-compliant) HTML rendering rules of the improved standards mode in IE 8.0. This is in contrast to the "standards mode" in IE 7.0, which though better than IE 6.0, was not ACID2-compliant, and not really conformant to the whole standard specification.

This is also a shift from Microsoft's original stance on the subject, wherein they intended to cause "standards mode" in IE 8.0 to default to IE 7.0 rendering rules. The only way to trigger the new standards mode was through a custom META tag that indicated that you wanted REAL standards mode, not the somewhat-standards mode of IE 7.0.

This original policy with respect to standards mode in IE 8.0 caused the web development community to go ballistic, and my knee-jerk reaction was that the community was right. Standards mode SHOULD be conformant to the actual standard, and making it conformant would certainly help the cause of compatibility among web pages.

Perhaps I'm just getting old and more extreme, however, as several years ago I pilloried Firefox for doing such a bad job of supporting the venerable TABLE tag, among other things (I STILL can't figure out why TABLE tags are such bastard stepchildren in the web development world; to my mind, they are just another layout tool in the HTML toolbox).

My schizophrenic stance on the issue isn't unique, however, at least if a post by Joel Spolsky in his Joel on Software blog is any indication. Joel's post is, in fact, a rather brilliant exposition of the reasons why HTML rendering rules are such a mess, and why use of a META tag made a lot of sense from a pragmatic standpoint given the reality of billions of existing HTML pages on the web.

I highly recommend reading his entire post, as it says far more than I will manage here, but here are a few choice excerpts:

Regarding why browsers, even the ones claiming to be "standards compliant," are still incompatible ("Those documents" refers to HTML standards documents, not a page that contains HTML markup):

Those documents are super confusing. The specs are full of statements like “If a sibling block box (that does not float and is not absolutely positioned) follows the run-in box, the run-in box becomes the first inline box of the block box. A run-in cannot run in to a block that already starts with a run-in or that itself is a run-in.” Whenever I read things like that, I wonder how anyone correctly conforms to the spec.

Regarding the problem of differences of opinion (using an analogy, which warms the heart of this incorrigible analogy-spinner):

If you’ve ever visited the ultra-orthodox Jewish communities of Jerusalem, all of whom agree in complete and utter adherence to every iota of Jewish law, you will discover that despite general agreement on what constitutes kosher food, that you will not find a rabbi from one ultra-orthodox community who is willing to eat at the home of a rabbi from a different ultra-orthodox community. And the web designers are discovering what the Jews of Mea Shearim have known for decades: just because you all agree to follow one book doesn’t ensure compatibility, because the laws are so complex and complicated and convoluted that it’s almost impossible to understand them all well enough to avoid traps and landmines, and you’re safer just asking for the fruit plate.

On why there are so many pages on the Internet that are all over the map from the standpoint of standards compliance:

So, technically, the way to make a paragraph with small text is <p><small>, but a lot of people wrote <small><p> which is technically incorrect for reasons most web developers don’t understand, and the web browsers forgave them and made the text small anyway, because that’s obviously what they wanted to happen.

Now there are all these web pages out there with errors, because all the early web browser developers made super-liberal, friendly, accommodating browsers that loved you for who you were and didn’t care if you made a mistake. And so there were lots of mistakes.

It's easy to see why early browsers chose to be so forgiving of coding errors. First, web standards were rather more primitive than they are today (when I first started working with Netscape 2.0, CSS was non-existent), mostly because the problem domain was less understood than it is today. This left more room for browser vendors to chart their own path, and since they were doing that, it made more sense to be a lot more forgiving from a coding standpoint given the ideosyncratic nature of their "extensions." The need for format flexibility was made even more important given that a) most developers were rolling their own HTML, simply because decent HTML authoring tools did not exist, and b) lots of HTML was created by non-engineers.

Allowing non-programmers to create web pages wasn't an offical policy in most organizations, so much as a result of the fact that HTML made that outcome achievable. HTML was a vastly more approachable model for screen layout than the more developer-oriented technologies that had preceded it. Granted, modern AJAX-enabled web applications are a different beast entirely, but a lot of pages on the Internet are much simpler than that.

Given the variety of pages on the Internet and the reality that most won't bother to update them to accomodate the stricter rules demanded by IE 8.0 "true" standards mode, Joel predicts that Microsoft's new stance won't be its final one. Once the hue and cry starts among those who could care less about the purity of web standards and simply understand that web sites don't render correctly anymore in IE 8.0, Microsoft will decide to return to its former pragmatic stance and opt for the META tag approach. This would allow those with an interest in true standards compliance to achieve it (even on old pages, if they decide to update them to support the META tag) while allowing those who don't want to revisit old sites to leave them as is, safe in the knowledge that they will render in the latest version of the most popular browser in use today without changes.

Crystal balls have a tendency to be cloudy, but I have an inkling that Joel might be right on this one.