Forum latest

Microsoft, IE8, and the META-madness
Written by Gizmo   
Wednesday, 23 January 2008 22:23
Article Index
Microsoft, IE8, and the META-madness
Page 2
Page 3
All Pages

Microsoft have come up with a non-standard standard way to implement standard non-standard behavior.

To be sure, they worked with people from the Web Standards Group (WaSP) and other developers to lend some air of legitimacy, but basically what they've done is just what I said above.  To understand what this is all about and what it means, we need to back up a little and take a look at some history. 

Once upon a time, there was a little web browser called Netscape.  The creators of this browser had the audacity to dream that one day the operating system a computer was running on would be irrelevant, because everything thing you did with the computer would be done via the web browser, using applications out in the World Wide Web.

Microsoft were thoroughly committed to the desktop; centralized computing resources, running rich, fat-client applications on powerful machines sitting next to the user.  This was the antithesis of the Netscape vision.  Realizing that the Netscapers were starting to actually get a hold in the world, and fearing the loss of their dominance, Microsoft set out to crush Netscape using their own web browser, Internet Explorer.  Over the next half-decade or so, they did exactly that.  They did it so effectively that, by the time Internet Explorer 6 hit the scenes, there really wasn't any other browser to use (at least, not on Windows).  To this day, Internet Explorer accounts for between 60% and 95% of ALL web browser traffic on the web (depending on whose statistics you look at).

Once IE 6 hit the streets, though, Microsoft got complacent, and pretty much forgot about the product (at least, if their development efforts are anything to judge by).  Oh sure, they continued to support it with patches and bug fixes, and even wrote tools to automate it, extend it, and develop products that worked with it or on it, but they didn't really fundamentally CHANGE it in any way.  This includes making it compliant with web standards (which, in the mean time, had continued to evolve well beyond the capabilities of IE).

Now, don't forget that Microsoft had a stranglehold on the web browser market, by virtue of the fact that Microsoft dominated the desktop operating system market.  Since the vast majority of the desktops were Windows (which came with Internet Explorer) the vast majority of browsers being used were Internet Explorer.  As a consequence, nearly everything on the web was coded to work with IE; the practical outcome of this is that there was very little in the way of NEW web content development that occured without the blessing of Microsoft, since it had to work in IE.

Microsoft wanted to control the web.  This isn't news to anyone, and this doesn't make MS evil, per se.  MS is a company, and the purpose of a company is to make money for its shareholders.  The most efficient way to make money is to be the gatekeeper for something that everyone wants to use.  With MS basically owning the desktop computer market, that made MS the effective gatekeeper for the web.

MS had made IE 6 somewhat compliant with the web standards of the time.  Some of the lack of compliance may have been due to concious design choices, and some of it may have been due to a simple misinterpretation or misunderstand of the standards (which were rather vague back then; indeed there are still places where there is room for interpretation).  However, the result of this was that IE 6 implemented a 'standard' mode which really wasn't, but at least tried to be, and a 'quirks' mode, which tried to be backwards compatible to the even less standard IE 5.0.  (Note here that 'less standard' is a relative term; IE 5 was much closer to being standards compliant that IE4, which was much better than Netscape 4, and IE6 was better than any of them.)

When Microsoft released IE 7, they discovered something rather embarrassing: it broke a lot of stuff written for IE 6.  To their credit, MS DID improve the standards compliance of IE7; though it still lacks compared to FireFox or Opera, it is much improved over IE 6.  However, when IE6 was introduced, it implemented two modes of operation: 'quirks' or 'standard'.  In 'quirks' mode, IE 6 tried to render pages the same broken way that IE 5 did, in order to keep from breaking a bunch of pages written for IE 5.  In 'standards' mode, it tried to render something close to the web standards, and did it mostly ok, though it still contained a number of really horrid bugs that required ugly work-arounds on the part of the web developer if he wanted to build a standards-compliant page.  The different modes of operation would be triggered by the inclusion of a DOCTYPE declaration at the beginning of the page.   Existence of the DOCTYPE declaration (which was relatively new) would be interpreted as meaning that the web page author had a clue and wanted standards-compliant rendering, whereas absence of the declaration would trigger 'quirks' mode.  Things got a bit more complicated from there, as evidenced by this chart, but that was the heart of the thing, and that remains in use to this day.  In fact, that's part of the problem

See, DOCTYPE was originally intended to be used to enable validation of the HTML contained in the page, in other words, to define the type of content.  It was subverted as a hack in order to provide a way to provide some level of backwards compatibility for older web sites.  Unfortunately, a bunch of clueless web masters latched onto it as "Gee, my web page has to have this" and so included it in all their pages, in effect indicating that they wanted the page rendered in standards-compliant mode, and then coded their pages according to IE 6's bugged implementation of the standard.  The consequence of this was that many of those pages don't work properly in any browser other than IE 6, INCLUDING IE 7!  This is further complicated by the fact that many of Microsoft's OWN tools produce bugged HTML that only works in IE 6.

So now, MS have egg on their face from the IE 7 incident.  To their credit, as I said, they tried to make (and largely succeeded) IE 7 standards compliant, but in the process, they ended up making a lot of IE 6 sites no longer work.  As a consequence, a lot of MS customers suddenly discovered one day that their web sites no longer worked right and were understandably a little upset.

Comes now the development of IE 8.  MS, eager to tout how they are 'standards compliant', but also eager to avoid a repeat of the IE 7 fiasco, are trying to figure out how to avoid their previous problem.  Their proposal, hammered out with the afformention folks from WasP, among others, involves the use of a new META http-equiv tag that allows you to lock a web page to a specific version of browser.  The idea is that you put a tag like this:

<meta http-equiv="X-UA-COMPATIBLE" content="IE=8;FF=3;OtherUA=4">

near the very top of your page, right after the <html> tag, and before any other meta tags.  The magic of this scheme is that any site that doesn't specify the meta tag gets rendered in IE7 mode, which then implements the IE 6 'quirks' or 'standards' mode as appropriate.  Any site that DOES specify this meta tag gets rendered according to the browser version specified, or as close as possible.

From Microsoft's standpoint, I can understand why they want to do this:

  1. It reduceds pain for customers using existing MS tools, as well as ensuring that existing web sites continue to work.
  2. It reduces the amount of pain MS experiences as a result of support calls from people wanting to know why the site that worked just fine yesterday all of a sudden today no longer works properly.
  3. It allows MS to roll out browser patches on a deterministic schedule, rather than having to roll out bug fixes ad-hoc.
  4. It allows future MS products to specify the version of IE they will work properly with, hopefully ensuring that those products will continue to work properly when MS rolls out a new browser.

IMO, this is a bad idea for the web, and ultimately a bad idea for MS.  Why?  Well first, let me ask you a question.  Do you notice anything about the above reasons for doing this?  They are ALL centered on what makes life better for MICROSOFT.  In their defense, I can understand this; I get the whole point that Microsoft controls the desktop, and still has the dominant share of the web browser market, so making things as painless as reasonably possible for MS also makes things reasonably painless for Microsoft's users, who are (after all) a big chunk of the people we are writing web content for.

Unfortunately, this means that everyone on the web who has been trying to build standards compliant web sites now has to alter their web site in order to get it to render properly in IE 8.  You see, IE 8 won't render the site according to the standards unless the web designer TELLS it to; the web designer has to 'opt-in' to using the STANDARD.

This is, IMO, absolutely bass-ackwords.  The browser should assume that I want my pages rendered according to the applicable standards if I have gone to the trouble of writing a page that is standards-compliant.

Essentially, what Microsoft are asking is that the rest of us who are trying to do things right take it on the chin so that MS don't have to.

Understandably, this has generated quite an uproar.  The original announcement of this proposal apparently was made on A List Apart (which, BTW, is a VERY good resource for budding web designers; it is maintained by Eric Meyer who is the guru of CSS), and followed-up with a post on the IEBlog .  This announcement generated an enourmous amount of discussion here, as well as comments from the developers of FireFox, here and here, and from John Resig.

Eric Meyer, Aaron Gustafson, Jeffrey Zeldman, and others appear to be of the opinion that, while this isn't an ideal strategy, it is an acceptable compromise if it keeps MS on the track of improving its standards compliance in IE.  I have a great deal of respect for Eric Meyer professionally, so I have to give his opinion considerable weight.  Ultimately, though, I just think they are just plain wrong.

Many others who know a great deal more about how standards compliant browsers are supposed to behave than I do have brought up a great many good points about the potential problems this brings with it, so I'll list just a few of them here:

  • Let's say you have a page that specifies IE7 modes.  Does that mean you get all the security bugs with IE7 as well?
  • What if you have a page that specifies IE8, but loads an IFRAME containing a page that specifies IE7.  How does this affect the DOM?  Could you use this as an attack vector?  It's been argued that this is a far-fetched scenario, but hackers make their living exploiting far-fetched scenarios.
  • If you specify IE7 as your browser, are you then limited to the version of javascript that came with that version of browser?
  • What if there was a patch to the rendering engine in the browser version that you are targeting, and you need that patch.  Do you now have to specify subversions too?
  • How many engine versions do you realistically have to support?  This item in particular could adversely affect alternative browsers.  Since MS can hide a lot of IE's code in the OS, the penalties to MS for shipping multiple rendering engines would be much less than for, say, Opera or FireFox.
  • What about the impact on mobile devices, which typically have few resources (less memory, slow CPU, less storage, slower bandwidth) than desktop machines?
  • IE 8 passes the 'acid 2' test...or does it.  Turns out, it only passes acid 2 when in 'standards' mode, which can only be triggered if the page includes the <meta> tag mentioned above, or the server sends an http-equiv header.  Either way, that's not compliant with the standards.
  • What happens to the web standards?  This problem primarilly exists because lazy and/or clueless developers misused a tag that was intended to switch between 'quirks' and 'standards' mode until the web moved to being entirely standards oriented.  That hasn't happened. The problem is further compounded by Microsoft's own proclivity for making tools that work well only with their particular browser.   What makes us think things will be different this time around?

As I said previously, in the long run, I think this will be a bad move, not just for the web, but for MS as well.  If this is implemented, MS will be saddled with maintaining rendering engines and code bases for products back to the beginning of the millenium.  With Microsoft's abyssmal performance in getting Vista out the door, working, on time, I can't see the extra resources needed to maintain multiple rendering engines in IE being a good thing for MS.

Ultimately, this is a Microsoft problem, and it needs to be a Microsoft solution, not a web one.  I would think that the best thing for MS to do, if they really want to pursue this, would be to have a 'compatability switch' in the browser, where the user could say 'Render this site like IE6'.  That would satisfy the compatibility requirements, cause minimal pain to the users, motivate developers to build sites that are more standards compliant, and not punish existing sites that are trying to follow the standards already.

Tell us what you think!  Comment in the forums!

Don't Click Here Don't Click Here Either