- From: Charles McCathie Nevile <chaals@yandex-team.ru>
- Date: Thu, 13 Feb 2014 14:37:20 +0100
- To: "Adrian Roselli" <Roselli@algonquinstudios.com>, "Julian Reschke" <julian.reschke@gmx.de>, "Travis Leithead" <travis.leithead@microsoft.com>, "public-html@w3.org" <public-html@w3.org>, "Predrag Stojadinovic" <predrags@nvidia.com>
On Thu, 13 Feb 2014 12:09:22 +0100, Predrag Stojadinovic <predrags@nvidia.com> wrote: This is long, and may not make you any happier. It certainly doesn't hold out hope that browsers will make the change you are asking for. But it attempts to explain why things are the way they are. [...] > Let me also say to Charles that yes, the comments were objective, thank > you, but unfortunately I also have to say that they are illogical. One > example is the Opera 9.8 issue you mentioned, where it simply makes no > sense to mess up the navigator.appVersion attribute value in order to > accommodate bad sniffers. That decision is doing more harm than good. Quite possibly. However it was a matter of commercial survival for Opera. The cost of giving developers the power you are asking for was that far too many sites would stop working due to developer error, and therefore users would abandon the browser. So the logic applied was the rather basic logic of self-interest. Which is the logic applied by all browsers in this case. > Let me also answer the one question that Charles posed which is relevant > to the issue at hand, namely “how to ensure that if you rely on a > feature, and it isn't present in the user's environment, you can adapt > what you do, or at least inform the user about the problem?”. > > The answer is certainly NOT the Navigator object. The answer IS feature > detection. OK. Let's establish this as a common point of agreement... > [...] Anyone who argues that browser detection should be used instead of > feature detection is simply wrong. But so is anyone who claims that > browser detection should be completely disabled: because it is also an > undeniable fact that feature detection is not the ONLY thing that > browser detection CAN be used for. There are examples of good use of > browser detection. There are actually examples where browser detection > is not only good but also necessary, and I gave those examples and I > will give a few more below. In passing I will note that "mobile browser detection" isn't one of them. Yandex - a company that makes a lot of front-end tehcnology and has many thoughtful and hard-working developers recently had to fix an issue for Firefox because we were sniffing for mobile devices - wrongly. Which is not unusual - browser sniffing for mobile devices has turned out to be awful for users. > It is like when some idiot hangs a piano to his Harley and drags it over > endangering both himself and all the by-passers, that we then ban all > Harlies because they can be mis-used… Not quite - because the people enforcing the ban in this analogy would be Harley-Davidson. A more accurate analogy to the situtation would be if a quirk of the road rules required motorcycles to have a towing hitch, which people had often used to tow inappropriate loads, *and* if the motorcycle manufacturers were regularly held liable for the damage done by these loads. And the response is something like having a towing hitch, but connecting it with something like post-it adhesive, so if you try to put a load on it, it will fall off immediately. *Obviously* this removes a useful functionality from the product. But if the liability cases are putting the manufacturer's business at risk, they're likely to judge that as better than going out of business. > Here is an actual case that really did happen to me: [...] > So, how does feature detection solve this problem? > > It doesn’t. But browser detection did. But so would testing in a few browsers. Many people argue that there are only 3 or 4 browsers you need to test in, but this is patently untrue. There are several concurrent versions of IE in use, markets like the BRICS have browsers that American and European developers have never heard of or which aren't important in those markets. But there are still exponentially fewer browsers in use than there are developers who are making mistakes. Most browsers now employ a *team* of people to deal with developers' mistakes (for example, that is Karl Dubost's job at Mozilla, and before that he did the same job at Opera). Despite this extensive commitment of resources, browsers can afford to blow off most developers, whereas most developers cannot afford to blow off most browsers. Their judgement is that it is easier for developers to test in multiple browsers than for browsers to patch all the sites that get this wrong. This is reinforced by simple economics, and a cursory analysis suggests they have made the right call for them, and for users. > My other two previous examples where feature detection does not help, > but browser detection does, were both acknoledged as valid but then > simply ignored. Why? I believe one was determining when a browser is mobile, and the same answer applies. I must have missed the other example. If I find some time I'd be happy to look at it and see what is going on. > I think someone actually said the way to go is to file a bug against the > browser. This is a ridiculous suggestion. No, it isn't. But you are right that it won't necessarily solve your problem very fast. [...] > What options are there for the developer of a high traffic website at > that moment? > > a) To bother ALL users with a message saying “If you are using FF > 47.3 then…” ? I agree, this isn't all that clever. Although it has the minor benefit of also deterring people who were thinking of switching to FF 47.3 if they think your site is more important than the one that wasn't working with their current browser. > b) To just file a FF bug and HOPE that his FF users will not leave > and go to his competition until FF fixes the bug ? If you *just* do this, and the problem is serious, you're not being very smart :) But as you noted, filing a bug is still a sensible thing to do. > c) To rewrite his entire code in order to handle this one FF bug > all over the place ? (IFF this is even possible to do) (and also do so > whenever any bug in any browser occurs) If this bug has a big impact on your business, then you should indeed do this. The Web as a platform gives better "market access" for your effort than pretty much anything in history. And at W3C we work to make this so, and even improve it. But there is no "natural right" that things should be easy. W3C has no real enforcement mechanism to change the Web - it succeeds by doing things well more than badly, and producing results that are sufficiently better than the alternatives for enough people that they keep working on the Web. > d) OR to just add one simple line of code very quickly and handle > it: > > a. if(navigator.browserName===”Firefox” && > navigator.browserVersion===”47.3”) { xyz.inform(“…”); } All other things being equal, this would indeed be the best option for developers to have. But all other things are not equal. > Apparently, from reading the answers here, options a), b) and c) are > somehow preferable to d)…? "Preferable" only makes sense if you look at who is doing the preferring. And for browser makers, the answer is "yes, unfortunately it is preferable to make life a bit harder for good developers, because the impact of letting bad developers do (d) is really really bad. Especially for us, but also for the Web at large, which makes our enlightened self-interest a reasonable thing to push for". > I honestly fail to see how we can even be discussing this. > It seems as if you treat web-apps the same way as desktop apps: wait for > the upgrade and hope for the best…? There are some differences. Desktop OSes (other than Linux distributions) don't really work to provide compatibility with each other on a common platform. The cost of changing browsers is non-trivial, since it requires learning a new interface, dealing with a slightly different set of functionalities, and downloading some code. In a large organisation doing something important like running a factory, the re-training, and the security analysis, add significantly to the cost. Large organisations spend literal millions of euros to safely change from one free product to another, and the cost of inefficiencies or downtime introduced can often be an order of magnitude greater. Nevertheless, all of this is chump change compared to the cost of changing operating systems. But in large part "if you want to make a product, then making it work is your responsibility" applies to both types of system. The rapid evolution of browsers brings benefits to the Web, but it obviously doesn't come with no cost to anyone. > Charles and Adrian, what problems does browser detection cause for the > users? Sites that don't work. *LOTS* of them. When there is no good reason. In very many cases the user's browser supports what the site actually uses, *and* what the site is using is unnecessary and irrelevant to the user's needs. But the massive bug lists for site compatibility are real, and generally only the tip of the iceberg. > Please give me an example, but one where the problem is not caused by a > bad developer. As far as I know, there are no problems in this class. But then, problems for users are only caused by a few players - bad browsers, bad developers, bad infrastructure, bad hardware. Of those, bad developers are far the most numerous (without implying any judgement on the good/bad ratio in any of these groups). For browsers, these problems are generally the ones that have the biggest impact on competition (bad networks tend to affect everyone equally modulo issues of net neutrality, bad hardware likewise and is usually dealt with fast by programming around it - the same thing you don't want developers to be forced into). They are also generally the ones that are most expensive to fix, so a way to reduce the frequency they appear can be fairly expensive (e.g. in goodwill from developers like you) and still a net win. > How does keeping the Navigator object artificially wrong keep many sites > on the web from breaking? It allows browsers to provide compatibility by rendering simplistic browser-sniffers inoperative. Simple sniffers are easier to deal with, and perceived as more likely to be the cause of problems since people capable of implementing complex browser-sniffing are considered *more*likely* to get it mostly right. This lets browsers focus more effort on implementing the things that sites actually rely on, instead of *exponentially* increasing their already significant investment in finding, debugging, and getting every incorrect browser-sniffer changed. A corollary is that browser-sniffing is more complex than necessary, which makes the compatibility groups' job harder. The "market consensus" is that this is still cheaper than the alternative. > This claim really makes no sense. I don’t see any death spiral here, I > only see attempts to justify doing something wrong in order to prevent > some bad programers from doing something wrong while at the same time > completely ignoring all the good programers that will do something > right. I don't think anyone suffers from the illusion that making the Navigator object ineffectual makes life easier for all developers all the time. I understand that you don't see the "death-spiral". It is clearly visible in the balance sheets of all browsers, where masses of code and developer time is spent dealing with site compatibility, and large amounts of that comes from something as simple as mis-use of the Navigator object for browser sniffing. > You are mis-using bad developers to justify bad specification. (pun > intended) I don't know if what is "justified" in any absolute sense - although in my judgement it is logical. Let's put that in perspective. Yandex is used by nearly every russian who is online. Adapting our many services to all the browsers used is expensive work, and we'd love to reduce that cost. But we understand the argument. I am running our own browser. YaBrowser 14.12 (get it at browser.yandex.ru/beta </plug>). For the simplistic test case attached it gives [[[ appVersion: 5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.68 YaBrowser/14.2.1700.9974 Safari/537.36 appName: Netscape userAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.68 YaBrowser/14.2.1700.9974 Safari/537.36 ]]] > These are the facts of the matter: > > 1) There are very important problems that can occur, which feature > detection simply cannot solve, ever. Agreed. > Browser detection allows developers to quickly handle these problems and > inform their users about it. I agree that there are a class of problems for which this is true. > Why is everyone simply ignoring this fact? Is it not true? Are my > examples false? I don't think anyone ignores, or argues that these 2 statements are not facts. > 2) Preventing bad developers from making mistakes is noble and fine > but ONLY when it does not affect all the other good programmers in a > negative way. On this we have a serious disagreement. It is unclear to me what sort of argument would convince a software manufacturer to allow their software to be used in such a way that it puts their business at risk. And that, for browser sniffing from the navigator object, is about how the issue is settled. > And 1) proves that this in fact is the case. Not in any logic scheme I know of. You're somehow relying on an assumption that isn't documented, but appears to be "browsers should make it easy for developers to do whatever they want". Developers would love that, just as browsers would love to work with the rule "any site which fails to conform to relevant standards will be closed down". But neither of those apply in reality. > Feature detection is not sufficient. Feature detection is the best > solution for feature detection, as is a UHAUL truck for carrying a > piano, but not much of a chick-magnet… > Web-apps are not desktop apps. With browsers changing daily, web > developers have to react, FAST. Sure. And with developers and other browsers innovating, so do browsers. In fact they don't just react, both groups actually create new things. > Bad programmers doing bad things is a bad reason to have a bad Navigator > object or to ban it all together. Perhaps. But the alternatives appear to be far worse. > The Navigator object, if defined properly, would be a very useful helper > for GOOD programmers when handling problems for which feature detection > is not sufficient. > Much like a Harley is a way better chick-magnet than a UHAUL truck… > > It really is that simple. Unfortunately not. I don't know if you've done any A/B testing with women (or any reasonably large set of people) who own pianos, comparing telling them you will move their piano a) by dragging it behind your Harley b) in your UHAUL truck. I haven't, but I'll bet a fair bit of money on the outcome of any moderately objective version of such a test. Likewise, nobody stops people from taking an open-source browser codebase, and modifying the information it gives to be brutally honest. But every browser I know, whether it started doing that (as many did) or not, has concluded that it is a bad idea. And arguments based on cost/benefit to the browser seem to run very clearly and strongly in a single direction. Because we are all interconnected here. Which means our problems don't exist in isolation. Which means the solution normally has to deal with various complicating factors, and possibly isn't the one we would have chosen for a simpler ecosystem. cheers Chaals -- Charles McCathie Nevile - Consultant (web standards) CTO Office, Yandex chaals@yandex-team.ru Find more at http://yandex.com
Received on Thursday, 13 February 2014 13:37:57 UTC