Today felt like a nuclear bomb was dropped on the web development community. It didn't seem so at first, but as the day went on and person after person chipped into the argument, I can honestly say I don't remember such an uproar since I've been working in the industry. The reason for the uproar? An article on A List Apart written by Aaron Gustafson entitled, Beyond DOCTYPE: Web Standards, Forward Compatibility, and IE8.
For those who have been living under a rock today, the article explains how Microsoft is going to deal with browser rendering in Internet Explorer 8. Chris Wilson, IE's Platform Architect, summed it up nicely in three points:
Aaron's article describes the state of rendering engines in IE and then goes on to explain some of the issues they had upgrading IE6 to IE7. As part of the Web Standards Project, Aaron offered his help (along with other members of the WaSP Microsoft Task Force) to Microsoft to work through some of the issues web developers will face with a new version of IE. The end result was a recommendation of a specific meta tag that would switch IE8 to use the new standards-compliant rendering engine. In my mind, I read this and said, "oh, that's interesting." The reactions of others wasn't so mild.
John Resig wrote of this approach:, "it's completely worthless - and in fact harmful - for any browser to implement!" His main points of contention are made in several assertions:
The reality is, there is no proof that implementing this in other browsers would hurt them. I realize a lot of this post was written out of anger so perhaps this grandiose statement is more of a gauntlet being thrown down than anything else. I don't see how this would hurt any browser at all. The second point about a document containing another document using a different rendering engine seems like an invalid use case to me. Typically, web developers use the same settings, doctypes, etc., across all pages on the same site; I don't really see this being a problem. The third point assumes that using IE8 in standards mode actually affects the scripting engine. Since no such claim has been made by Microsoft, we really can't comment on that. If I were a betting man, I'd bet that the scripting engine will be the same in all rendering modes. And as people keep telling me, if JavaScript 2 is truly backwards compatible with JavaScript 1.3 (the version implemented by most browsers), then there shouldn't really be a problem if IE8 ships with JavaScript 2.
Robert O'Callahan of Mozilla had a somewhat more tempered response in two blog posts. Robert's concerns are mostly pointed towards the maintenance issues that Microsoft will face using this approach as well as whether or not this makes sense for Firefox. His issues for developers are as follows:
Once again, the cross-document issue pops up. As I previously stated, I don't see this as a huge issue. The attack surface issue is an interesting one, for sure, as this would allow exploits to be targeted at particular rendering engine versions. Robert correctly points out that making upgrades to the rendering engines will be more difficult if these upgrades can't break prior rendering modes, which only creates more opportunities for attacks.
PPK has an unusually restrained piece about the topic as well, where he correctly points out that the rendering engine switch is not akin to browser detection. It literally has no effect on any other browser and won't affect your pages unless you use it. The WaSP also posted a response begging developers to temper their initial reactions and give the solution a chance before completely dismissing it. I think this is the right approach.
There was an internal conversation going on at Yahoo! about this today, and I'd like to repeat some of the sentiments I shared. First, Microsoft is in a really tough position. They have really been trying to listen to web developers clamoring for better standards support. They are also listening to their partners, big corporations with thousands of Internet and intranet pages that would cost them millions to upgrade. Microsoft got slapped when IE7 broke some pages by fixing layout bugs; they couldn't afford to repeat that mistake. Whether we like to admit it or not, there are tons of web sites that are designed to work specifically for IE6. They were written at a time when IE had over 95% market share and haven't been updated since.
There literally is no good move for Microsoft to make in this vein. Either they do nothing and don't break the Web but garner the ire of web developers everywhere, or they pacify web developers by forcing standards on everyone and break tons of web sites and web applications. This is the literal rock and hard place scenario. Microsoft is trying to satisfy both conditions and I honestly feel that this is a huge step forward for IE.
I know not everyone will like the solution, but give Microsoft credit for shaking things up a bit. Tons of great web innovations have come out of Microsoft so don't be so quick to dismiss this. Aaron is a really smart guy and knowing that he was involved with this makes me feel better about it. I know the respect he has for the Web and the web development community, and I have no doubt that he and the IE team thought through a lot of the issues that are being brought up now. More details will certainly be forthcoming, so until then, remember one thing about this new version-lock feature: you don't have to use it if you don't want to.
"...there is no proof that implementing this in other browsers would hurt them."
In order to implement this in a browser all future versions of a browser must implement past versions of rendering OR sacrifice market share to web apps that no longer work.
Let's assume, for example, that there's a FF=3 and a FF=4 flag - and Firefox 3 and 4 ONLY implement their respective rendering engines. Now when a user develops a site and adds FF=3 to their head it'll work fine UNTIL all their users upgrade to Firefox 4, at which time their apps are no longer using their pristine FF=3 mode but whatever Firefox 4 dictates, causing them to break.
The reason why this works so well for Internet Explorer is that they are perfectly content with bundling past versions of rendering engines with the browser - up until some undisclosed point. It's very possible that we'll have an IE 12 that'll still be able to render IE 6 pages. Other browsers don't have this luxury.
I would argue that the security implications of distributing 6 simultaneous rendering engines, each with their own quirks and security loopholes, is much more of a concern than any benefit that simultaneous bundling could provide.
I think you're making some assumptions about this functionality that may not necessarily be true. A rendering engine mode could be nothing more than a sequence of bits that turn features on and off; it needn't be a completely separate core. Turn off the border-box bit and turn on the content-box bit for standards mode.
We've just been given a little peak into how this feature work, I think it's best to reserve judgement as to the relative goodness/evilness of it until more information comes out. A lot of the negativity seems to swirl around assumptions people are making the feature rather than facts.
I don't see what the hubbub is about. Microsoft's solution benefits everyone. They gives developers what we want, and IE keeps the backwards compatibility. I see a win win situation here.
"remember one thing about this new version-lock feature: you don't have to use it if you don't want to."
Sorry, but that's not correct. You HAVE to use it if you want the IE8 rendering engine. Otherwise it defaults to the IE7 engine. That right there is the biggest problem with the idea.
@Kevin - You just proved that you don't have to use it. It's your choice, whether or not you want to use standards mode IE. If you don't want to use it, you don't have to. Oh, and you can also trigger standards mode by using an HTML 5 doctype.
Post Comment
Your e-mail address will never be shown, only your URL. Please, no HTML in your comments, as it will be automatically stripped out for security purposes.