Martian Headsets

By Shamus Posted Thursday Mar 27, 2008

Filed under: Links 42 comments

Joel Spolsky has a tremendous piece on why webstandards have failed to standardize the web, why making IE8 fully compliant will make it both perfect and useless, and how web developers are pretty much doomed to continue making web pages that must be tested against an army of browsers to ensure even the most basic, low-level, half-assed sort of compatibility. He also talks about why fixing Windows Vista involved breaking so many old applications.

Found Via Steven.

 


From The Archives:
 

42 thoughts on “Martian Headsets

  1. mark says:

    Great read!

    How come firefox doesnt have the problems IE has? Why can’t IE8 mimic firefox by default?

  2. Luke Maciak says:

    Oh man, that thing again.

    Here is the thing – Joel can talk about martian headsets all he wants but the sad truth is that web standards are where they are because Microsoft is not interested in implementing them.

    Joel acts as if web standards were some mysterious conventions that are passed via oral tradition and only the seventh son of a seventh son can recite them from memory during the winter solstice celebration.

    But this is not true. There is a very detailed spec out there which spells out exactly how browser should parse and render things. There are also tons of papers, guides and standardized test suites which you can use to make sure you are doing the right thing.

    Yes, there are test suites and tools to check that you are conforming to the standard. Joel apparently never heard about any of them because he is to busy coding in wasabi – a language his company created in order to write a specific tool. Yes, he is one of those guys – he builds a language to build a tool. :P

    In my experience it works like this: I create a nice CSS layout for the page. I open it in Firefox and it looks great. I open it in Opera and it looks great. I open it in Konqueror and it looks fine. I look at it in Safari, and all is well. I open it in IE6 and it’s broken. I open it in IE7 and it is broken, but in a different way. This is the problem.

    How come all the browsers out there render the pages correctly (or almost correctly) but to get IE working I either need to use some crazy hacks or just detect the user agent send it a separate stylesheet? Because they other guys actually try to conform to the standards – MS does not.

    I think that whole article was a troll cleverly designed to bring him tons angry mobs from slashdot, digg and reddit. :P

  3. Shamus says:

    “How come firefox doesnt have the problems IE has? Why can’t IE8 mimic firefox by default?”

    That is very much against their nature. They want to drive standards, not follow them.

    I think the important point in the article – regardless of what MS has done in the past, is that there is no solution for them. If IE8 suddenly began working like FF, millions of existing pages would detect the IE browser and employ hacks to route around IE6 and IE7 issues – which would no longer be a problem in the new FF-like IE8. Those pages would break.

    There is no way forward that does not break existing pages (lots of them) or deepen the quagmire of deb development and require ever more browser-specific hacks.

  4. Luke Maciak says:

    Also, translation of Joels argument from MS FUDspeak to English is located here.

  5. Shamus says:

    “Yes, there are test suites and tools to check that you are conforming to the standard. Joel apparently never heard about any of them because he is to busy coding in wasabi[…]

    He talks about exactly that in the article, in a couple of different places.

    At any rate, I think Joel agrees with you – this mess is one of Microsoft’s own making. But that doesn’t get anyone any closer to a solution.

    If they begin conforming, web pages break.

    If they keep doing what they’re doing, they further muddy the waters.

    On the upside, the problem is being mitigated by the fact that IE is losing market share. :)

  6. Luke Maciak says:

    Well, let them break. It wouldn’t be the first time. We already need to differentiate between IE6 and IE7 which do not render web pages the same way.

    They didn’t really care about this stuff when they broke compatibility with IE6 in IE7. Why are they are worrying about it now?

    Before IE7 got released and pushed out via Windows Update everyone was in mad rush fixing the IE6 only websites knowing they will break. Yes, we knew it because MS made beta and release candidate copies available to developers. We knew what to expect so we fixed it.

    Now everyone is using that Google maps example to show why IE8 should not be standards compliant. Do you think a company as big as Google would actually sit back and do nothing about this? If it’s still broken when IE is shipping they will fix it.

    Yes, it will be messy at the beginning, but in the long term a standards compliant IE will benefit us all.

    I think MS is making all this noise about the issue because they are afraid that once IE is standards compliant they loose the vendor lock-in angle. It would mean the end of IE-only web pages. And then one of their main competitive advantages over alternative browsers is gone.

  7. Shamus says:

    Luke: Now that I’m thinking about it… maybe I’m misunderstanding you above, so let me back off the “he talked about that” and turn it into a question:

    There are ways to test your adherence to the standards? Can you point me to where I can find out more about how that works? I’m having trouble picturing how you’d go about something like that. It seems like, in order to show how the standards should work, you’d have to write an implementation of them.

    What am I missing here?

  8. Blurr says:

    So if IE8 will emulate IE7 by default, what’s the point of spending time and money creating a new browser when its new features are only going to be used by a tiny percentage of web pages?

    No, really, is a new version really needed?

    Also,
    That is very much against their nature. They want to drive standards, not follow them.

    The only standards I see them driving are inefficiency and buggy software.

    Also also: I can’t see my insertion cursor when I’m editing. (FF 2.0.0.13)

  9. Christopher says:

    On the upside, the problem is being mitigated by the fact that IE is losing market share.

    That’s the solution in my opinion. I think we should begin a world wide marketing campaign against IE. The more people use standards compliant browsers, the less we have to worry about non-compliant browsers.

    Also the more developers who create standard pages, the better off we’ll be. Eventually those old sites will either be fixed or go away. Eventually the standards will work. The cream will rise to the top, so to speak. But this will take years if not decades.

  10. Luke Maciak says:

    @Shamus – here are just few links to test suites and comparison tables:

    http://www.w3.org/Style/CSS/Test/CSS1/current/
    http://quirksmode.org/css/contents.html
    http://quirksmode.org/dom/compatibility.html
    http://code.google.com/p/html5lib/source/browse/trunk/testdata/

    Oh, and my favorite:

    http://www.webstandards.org/action/acid2/

    Joel says that the W3C spec is confusing, and he might be right. But it’s not like there haven’t been volumes written about interpreting the spec.

    W3C knows what the spec should be like. They can look at your implementation and say whether or not you implemented it wrong.

    Also, there exist an implementation that is 100% standards compliant as it was developped by W3C folks – it’s called Amaya:

    http://www.w3.org/Amaya/

    So we know exactly how these things were supposed to work. Joel’s article almost reads as if the W3C spec was some ancient manuscript – I mean he compares it to religious scriptures at one point.

    The difference is that people who wrote religious scriptures are long dead by now, and we can’t ask them to interpret the tricky wording here and there. W3C is still around and doing quite well – and they are more than happy to clarify these things and even show exhaustive examples if you care enough ask them.

    :)

    @Blurr – same here, no cursor in edit mode. It’s something that the plugin is doing.

  11. John Lopez says:

    Actually, the solution is pretty easy. IE8 will show up as… IE8. Not 7 or 6, but version 8. Which means that for a short time there will be problems, but web designers can quickly turn quirks mode *off* for IE > 7.

    CSS tweaks based on the version numbers aren’t uncalled for historically either; seems like a mountain out of a molehill.

  12. Andy P says:

    It seems like, in order to show how the standards should work, you'd have to write an implementation of them.

    Yes. Which doesn’t exist. Firefox or otherwise.

    Luke appears to be somewhat deluded on that front.

  13. ryanlb says:

    Blurr: That’s been the web standards community’s point – why a new version if it defaults to the previous. MS has changed the default to be the updated IE8 engine.

    Shamus:
    There are code analyzers that can tell you if you’ve written well-formed HTML/CSS based on the specs. They’ll let you know if you’ve got unclosed tags, or non-standard tags, or if you’re missing required attributes, etc. I rarely used them now, because I learned to write standards compliant, well-formed, correct code. I don’t often check my work beyond making sure it renders properly in FF and IE6/7. Usually it’s not too difficult to get IE7 to match FF – in fact, it’s so much easier than IE6 was that I wouldn’t mind if IE was never updated again. Anyway, as far as well-formed code glaring rendering differences usually point out when I make a mistake, so I haven’t been validating my web code for quite some time.

    Google HTML Validation or CSS Validation for more info, and links on where to do it. When I do do it, I use the Web Developer Toolbar add-on for FF which has built-in links to validators.

    IE7 is hugely standards compliant, well, at least when compared to IE6, and it’s really not that bad. I expect IE8 to be even better, but it really doesn’t deserve as bad a rap as IE6 did.

    Anyway, that’s what conditional comments are for – I wish other browsers implemented that, for when there are rendering differences between versions of those browsers. I can easily target IE6 and not 7, but for differences between FF1.5 and FF2 there’s no way to do it (as far as I know, but I don’t support pre FF2. I hope FF3 doesn’t cause problems).

  14. Luke Maciak says:

    It seems like, in order to show how the standards should work, you'd have to write an implementation of them.

    Yes. Which doesn't exist. Firefox or otherwise.

    How about Amaya? Not a real browser, but it is a working interpretation nevertheless. :P

  15. Luke Maciak says:

    Btw, I just wanted to clarify that I’m not a Spolsky hater or anything. He wrote some really good stuff about software development over the year.

    Some of his stuff however (like this article), I don’t agree with.

  16. scragar says:

    There are more standards out there than just HTML(HTML4 = current version, HTML5 soon with any luck – let’s organise all these plugins) standards, there’s CSS(CSS2 = current, CSS3 will be much better), XHTML(which ofcourse IE6 doesn’t like, IE7 screws it up royaly, yet every other browser handles perfectly), XML(same as XHTML really, why can’t M$ catch up already?), javascript(with firefox 3 comes JS 1.8, opera supports 1.7 and khtml+webkit both support 1.6, why is IE7 still using a slow incarnation of 1.4?)…

    IE is behind on all of the systems(Fx3, Opera9, safari and Konqueror all have some HTML5 and CSS3 understanding), and what it does understand it does badly and slowly.

    Wonder if there will be a day when there can be a single rendering engine, and you just upgrade that instead of your whole browser, with just 1 engine to worry about you would never need to worry about cross compatability again.

  17. Cadamar says:

    ryanlb – All those valuators do is make sure that you’ve closed all of your tags and used quotes everywhere that you should. It doesn’t, for example, make sure that when you use a alpha-transparent PNG file that you used the filter:progid:DXImageTransform.Microsoft.AlphaImageLoader in order to support f’ing IE6.
    Using the analogy from the article, those violators only make sure that your headset plug is the right size and shape. But that doesn’t mean that it won’t explode when you plug them into a player.
    What is required is a browser that absolutely and without question is 100% W3C standard compliant and does so 100% perfectly. The problem is that it is impossible to create such a thing because the standards are incomplete, overly complicated, and in many places left open to interpretation.

  18. Adam says:

    Very very good read. Thanks for the link.

  19. Cadamar says:

    Wonder if there will be a day when there can be a single rendering engine, and you just upgrade that instead of your whole browser, with just 1 engine to worry about you would never need to worry about cross compatability again.

    That’s precisely what Java, Flash, and now Silverlite are trying to do. Single rendering engine ported to multiple platforms so that one version of the code can be processed the same regardless of platform.
    You can’t do that with web browsers. Somebody would have to build the engine and port it to all OS platforms and force all browser manufacturers to use it. If there is money to be made (say through licensing the engine to the browser makers) then there will have to be competition or somebody will yell “MONOPOLY!!” and now you’ve got competing engines (who will interpret the incomplete standard differently) and we are right back were we started.

  20. Vegedus says:

    Interesting. I’m no programmer, but I understand enough about webdeveloping to understand the article. One thing though…

    “If IE8 suddenly began working like FF, millions of existing pages would detect the IE browser and employ hacks to route around IE6 and IE7 issues – which would no longer be a problem in the new FF-like IE8. Those pages would break.”
    Wouldn’t the obvious solution be for IE8 to declare itself “not an IE”? Like “Hey code, I’m IE8, but you can just act as if I was Firefox or any other standard compliant browser.”

    If all the other browsers can work around the IE specific extra code, why could a new version of IE not do the same?

  21. Luke Maciak says:

    @Cadamar – did you take a look at the test suites which I few comments posted above?

    They are designed to tell you whether or not your browser is implementing the spec properly.

    What is required is a browser that absolutely and without question is 100% W3C standard compliant and does so 100% perfectly. The problem is that it is impossible to create such a thing because the standards are incomplete, overly complicated, and in many places left open to interpretation.

    No they are not. There are official interpretations, and test suites which show give you a picture of how a given snippet of code should look.

    If you do not understand something you can hit up the W3C folks and ask them – they have mailing lists and message boards and support lines dedicated to just that:

    http://www.w3.org/WAI/contacts

    Seriously, we have been working with these standards for years now. People have been discussing them, and developing tests and guidelines and hammering out the details.

  22. Chris Slee says:

    Standards exist. The standards are complete. The standards are simple to understand. There is a reference implementation. There are test suites to determine compliance with standards.

    It really doesn’t get much simpler than this.

    1. Alan McFarlane says:

      Chris could you please drop me an email, I have some information on a Knife seminar in Jan 14th 2011 that I want to share with you.

      (Used to work with you at L and fought at the recent swordplay 2010)

      My email is [email protected]

      Cheers, Alan McFarlane

  23. The chickens come home to roost. Microsoft produced busted versions of IE that didn’t comply to basic HTML standards for years. Now they want to produce a browser that does comply to standards, but apparently they’re just as incompetent at doing that.

    The irony is that the majority of pages displaying incorrectly in IE8 are displaying incorrectly because they are specifically saying, “Hey! IE! You’re a busted, worthless piece of shit! Now, here’s what we need to do to make you display this page correctly.”

    If the IE8 team is serious about actually making their program respect the extant web standards, that’s great.

    But welcome to the world you created for every other browser developer: You’re stuck dealing with all the buggy, piece-of-shit implementation issues you saddled us with in previous versions of IE.

    In other words: Congratulations Microsoft, you’ve discovered why standards are useful. But apparently you’re still expecting the rest of the world to bend over for you.

    Here’s a better idea: When a webpage has a piece of code that says “here’s how the buggy, piece-of-shit versions of IE need to handle this page” respect that piece of code and have those pages display in accordance with the buggy, piece-of-shit versions of IE you released in previous years.

    Meanwhile, IE8 can enter the new glorious age of doing it right. (If you’re actually serious about doing that. Which I doubt.)

    How tough can that be, really?

  24. Eric Meyer says:

    Specs are not simple– if they were, I wouldn’t have my current career. Most specs do not have exhaustive test suites; arguably, none do. Even more arguably, such a thing is impossible. And there are no reference implementations, just a bunch of implementations of varying accuracy.

    Amaya is in no sense a reference implementation, and it comes nowhere close to being a 100% standards compliant browser. Its implementation of CSS, to pick one fairly important example, is at about Opera 5 levels, which puts it only about seven years behind everyone else, including IE. It may implement XHTML 100% correctly (maybe), but there’s a lot more to the web than handling markup. And while it may have a good SVG implementation, that has current-web relevancy somewhere between diddly and squat.

    This is not to say that every browser has ever been as perfect as it could have been. They’ve made some really bone-headed mistakes in the past. The IE team has made more than most and done less than most to catch up, but they’re not alone on that field.

    The IE team is in a tough place, as Joel (and others) observed. How they get from here to somewhere better will be a very interesting story indeed.

  25. tussock says:

    Wait, am I still supposed to care what Microsoft’s malware does to the “can’t find firefox.com” folk’s web browsing experience?

    PS: Linux rocks.

  26. Luke Maciak says:

    Amaya is in no sense a reference implementation, and it comes nowhere close to being a 100% standards compliant browser. Its implementation of CSS, to pick one fairly important example, is at about Opera 5 levels, which puts it only about seven years behind everyone else, including IE. It may implement XHTML 100% correctly (maybe), but there's a lot more to the web than handling markup. And while it may have a good SVG implementation, that has current-web relevancy somewhere between diddly and squat.

    You are right. I take back my comments about Amaya. I actually installed the damn thing, and run it through some tests and it’s indeed not where it should be. The Acid2 test failed so badly I was actually laughing. :P

    I agree, specs are not simple and not every spec has an exhaustive test suite. But we do have a good idea as to how things should be.

  27. Chris Arndt says:

    Now to play a quick intellectual game.

    You know the first internet browser you ever used?

    Remember it?

    It doesn’t work now.
    Period.

  28. Hugo Riley says:

    I think the important point in the article – regardless of what MS has done in the past, is that there is no solution for them. If IE8 suddenly began working like FF, millions of existing pages would detect the IE browser and employ hacks to route around IE6 and IE7 issues – which would no longer be a problem in the new FF-like IE8. Those pages would break.

    So they should phase out IE and name it different. If they make standard compliant browser, it deserve a new name; like Internet Conquistador. Then we can test for IE and IC will be so good that no testing will be required.

  29. Cthulhu says:

    As long as it doesn’t restart my computer without asking me in order to update itself (like some Microsoft products), I don’t frankly care what IE8 does, since I can download real, working browsers for free.
    FF FTW.

  30. Winter says:

    There is also “Reality Distortion Field”, which pretty much sums up my feelings.

    MS has some sucky problems to deal with, but they are the author of those problems…

  31. Chris Arndt says:

    On a more serious point, this fits into my Grand Point regarding Technological Progressives.

    Capitalists who are Men of the Left.

    Leftists.

  32. Chris Arndt says:

    How much goshdamn work did I farking lose because Microsoft restarted without asking?

    How many hours did I lose?

    I would punch Bill Gates in the teeth given the opportunity. I promise you that.

  33. Viktor says:

    All I need IE to do is render firefox.com properly. Anything else is just overkill. Maybe if it’s bad enough I can even convince my parents to start using a working browser.

  34. Luke Maciak says:

    If they make standard compliant browser, it deserve a new name; like Internet Conquistador.

    LOL

    Let’s take it even further and name the damn thing in a logical progression like so:

    IE7 = Internet Explorer
    IE8 = Internet Conqueror
    IE9 = Internet Colonist
    IE10 = Internet Separatist
    IE11 = Internet Citizen

    :mrgreen:

  35. Phlux says:

    @Justin Alexander:

    “But apparently you're still expecting the rest of the world to bend over for you.”

    Actual, what they’re doing is asking you to STOP bending over for THEM and start bending over for the W3C.

  36. mockware says:

    Aw yes. The idealistic programmer – the reason I hate getting new hires straight out of school. You have to spend a few months explaining to them why things can’t be the way they should be.

  37. @Phlux. I have no idea what you’re trying to say there. There’s no need to “bend over” for the W3C. That’s the playground everyone else is playing in.

    Microsoft, with previous versions of IE, designed a new playground and forced everyone designing webpages to make sure that their webpages would work in Microsoft’s playground, too, because Microsoft was too damn lazy/incompetent/malicious to design a browser that complied with the standards.

    Now Microsoft wants to stop being lazy/incompetent/malicious… but they expect all the webpage designers to YET AGAIN redesign all of their pages to satisfy Microsoft’s inability to play nice with others.

    If Microsoft wants to clean up the mess they’ve made, that’s great. More power to them. But apparently their idea of “cleaning up our mess” is to make you clean it up for them.

    Bad Microsoft. No cookie.

    EDIT: I also recommend reading the link Winter provided. The solution for IE8’s woes is painfully simple. Microsoft deciding not to implement that solution is simply evidence that, their newfound understanding of the value of playing nice with others notwithstanding, they’re still lazy/incompetent/malicious.

  38. Dan Morrison says:

    @vegedus

    Wouldn't the obvious solution be for IE8 to declare itself “not an IE”? Like “Hey code, I'm IE8, but you can just act as if I was Firefox or any other standard compliant browser.”

    Those who do not learn from history are destined to repeat it.

    Have you ever inspected the user-agent string of IE?
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; ...

    The story is that once upon a time, back in 640×480 days, Netscape(2) introduced JavaScript. Developers started making cool stuff with it.
    IE(3) tried to do it also, but differently.
    The Netscape implimentation was always several steps ahead (or at least in a different direction) from IE, especially when it started playing with layers and DHTML (this is pre-DOM. IE actually went did the right thing by going down the DOM path)
    However, due to market share (at the time) and the pure difficulty of coding for more than one platform, a whole swathe of the early javascripts had a line like (pseudo-code)
    if (indexOf('Mozilla', navigator.userAgent) { ... actually do stuff }
    … because although IE of the time tried to run stuff, mostly it just broke things, so everyone just wrote for mozilla.

    Not long after the first flurry of javascripts – (usually just mouseovers and image-swaps, but occasionally DHTML menus) were invented, and installed all over the ‘net, IE eventually became able to swap images.
    … but nobody was running the code!

    So here’s the big fat deal. IE declared itself to be Mozilla! so as to break all the user-detection scripts!

    That actually mostly worked in the wild-west days of the net, but there were still implimentation details that had to be developed for, and now we have user-detection scripts that are 50-100 lines long, just to figure out what the browser can and can’t do.

    Many simple scripts started working, and IE users got to see the goodies that Netscape had been doing for a while (Good marketing move?) but more complex scripts started breaking, because IE wasn’t really Mozilla. And this was start of many web developers deep-rooted hate for IE. It deliberately broke things that used to work fine, and it looked like the programmers fault! Even though they’d already coded around it!

    Short answer (after the long history lesson):

    Lying about the user-agent leads to madness. Don’t do it!

    Phew, sorry for the rant, but I was one of the developers way back then, and still cannot get over the stupidity and dishonesty of that User-Agent fraud!

  39. Dan Morrison says:

    Sorry, double-post.
    Serves me right for using IE6 :-)

  40. Dan Morrison says:

    Sorry about the double-post. WordPress was rude to me a few times. Still dunno why. I didn’t press repost!

Thanks for joining the discussion. Be nice, don't post angry, and enjoy yourself. This is supposed to be fun. Your email address will not be published. Required fields are marked*

You can enclose spoilers in <strike> tags like so:
<strike>Darth Vader is Luke's father!</strike>

You can make things italics like this:
Can you imagine having Darth Vader as your <i>father</i>?

You can make things bold like this:
I'm <b>very</b> glad Darth Vader isn't my father.

You can make links like this:
I'm reading about <a href="http://en.wikipedia.org/wiki/Darth_Vader">Darth Vader</a> on Wikipedia!

You can quote someone like this:
Darth Vader said <blockquote>Luke, I am your father.</blockquote>

Leave a Reply to mark Cancel reply

Your email address will not be published.