10 is the one
Friday, 19. December 2008, 00:29:51
Apparently a lot of trouble.
As Andrew Gregory already noticed, we're the first browser ever to release with a two-digit version number. If websites assume that version numbers always have a one-letter "major" part and look for a single digit, they are going to "detect" Opera 1!
Since we released the first preview of Opera 10, we're seeing the bug reports come in. Web sites go belly up because of their bad sniffing. Some of them aren't even ashamed of it..
Thanks, Bank of America. Do you feel like it's 1995 again? Yeah, me too.
You'd think that with the intense development Microsoft has been lavishing on live.com they would have found somebody capable of writing a usable browser sniffer (or ideally a person clever enough to say "wait, we don't really need one - what if we just use feature detection instead?"). Think again..
..and for further evidence that their backend version detection is an odd piece of software engineering, read their cookies closely - Opera 9.62's request first, then Opera 10:
GET /mail/browsersupport.aspx Host: co109w.col109.mail.live.com User-Agent: Opera/9.62 (Windows NT 5.1; U; en) Presto/2.2.0 Set-Cookie: BrowserSense=Win=1&Downlevel=0&WinIEOnly=0&Firefox=0&Opera=1&OperaVersion=9.2&Safari=0; domain=.live.com; path=/
GET /mail/browsersupport.aspx Host: co109w.col109.mail.live.com User-Agent: Opera/10.00 (Windows NT 5.1; U; en) Presto/2.2.0 Set-Cookie: BrowserSense=Win=1&Downlevel=1&WinIEOnly=0&Firefox=0&Opera=1&OperaVersion=&Safari=0; domain=.live.com; path=/
Did you spot the missing version value? We really confused them by adding 0.37 to our previous value, didn't we?
Speaking of cookies, they are the main reason we added the feature that lets you hide Opera's identity. Back then in 1996 or so, some sites would do browser sniffing and send cookies only to known browsers. On the next page, if you didn't serve it cookies the site would say "hey, you don't support cookies so go away". What would Joseph Heller make of that, I wonder?
So, rewind to meet the catch-22 server, re-born at Bank South Australia:
GET /InternetBanking/ HTTP/1.1 User-Agent: Opera/9.62 (Windows NT 5.1; U; en) Presto/2.1.1 Host: ibanking.banksa.com.au HTTP/1.1 200 OK Set-Cookie: JSESSIONID=000019WTazsWAk-lB38OrmKD3kR:13l3ifhnq;Path=/ Set-Cookie: bhCookieSess=1;Path=/ Set-Cookie: bhCookiePerm=1;Expires=Sat, 20-Dec-2008 23:35:40 GMT;Path=/
..and Opera 10..:
GET /InternetBanking/ HTTP/1.1 User-Agent: Opera/10.00 (Windows NT 5.1; U; en) Presto/2.2.0 Host: ibanking.banksa.com.au HTTP/1.1 200 OK Content-Type: text/html;charset=ISO-8859-1 Content-Language: en-AU Date: Thu, 18 Dec 2008 23:34:37 GMT Connection: close
Um, I'm hungry. Where are your cookies? Predictably the next page looks like this:
This is probably just the beginning.
Will the web ever learn?
Mickeyjoe_irl, # 19. December 2008, 01:12:11
TreeGo, # 19. December 2008, 02:26:57
Yahoo also doesn't work.
匿名ユーザ, # 19. December 2008, 02:40:39
You're not quite the first. A lot of website are choking on Flash version 10.0
匿名ユーザ, # 19. December 2008, 02:45:39
just to screw with them call it Opera A
匿名ユーザ, # 19. December 2008, 02:57:33
I second the Opera A suggestion.
匿名ユーザ, # 19. December 2008, 03:12:25
Switch to roman numerals, they look cooler. Opera X.
匿名ユーザ, # 19. December 2008, 03:38:04
Surely Opera X makes most sense?
匿名ユーザ, # 19. December 2008, 03:40:45
...and what about opera 11??...back to the two digit issue again.
匿名ユーザ, # 19. December 2008, 03:47:09
@Mike:
We'll use hexadecimal! ...and then unicode glyphs!
匿名ユーザ, # 19. December 2008, 04:02:22
Why not Opera/010.0 ? No one is going to detect Opera 0.
And I second the feature detection, although to be fair if you're using Opera/1 your JScript will probably choke on feature detection code...
匿名ユーザ, # 19. December 2008, 04:15:51
Opera/9.99 [10.00] (Windows NT 5.1; U; en) Presto/2.2.0
or something thereabouts
Jere, # 19. December 2008, 04:29:52
Poltras, leading zeroes often signify octal (base-8), so 010 would actually be version 8.
匿名ユーザ, # 19. December 2008, 05:09:31
If I were you, I would reverse-sniff. I would build up a centralized list of web sites that do it, with the important strings "You are using an old browser", "Please update" and make Opera download that list and recognize when that is happening. When it is, I would make an unobtrusive pop-up (Firefox remember-password style) saying: "The site you are viewing is very badly built and that's why you probably are getting a message that your newly shiny browser is too old, do you want to trick it? Yes, trick it; No, it's fine" and when the user chooses tricking I would change the user agent to "Opera/9.99 [1X.XX, because you don't know how to count!".
As an added bonus you can search for any email addresses in the page and if one is found ask the user "Do you want to notify the owner of the website about their problem" and when "Yes", I would send them an email.
匿名ユーザ, # 19. December 2008, 06:09:33
Opera allready has such a list, And its used to force Opera to switch into "Identify as blah" or "Mask as blah" as needed for stupid websites, It also modifies a lot of websites via Javascript so that it works correctly for you, Of course, It can also be used to fix Opera errors in released versions.
see http://www.opera.com/docs/browserjs/
DD32, # 19. December 2008, 06:55:43
People use Opera?
匿名ユーザ, # 19. December 2008, 08:32:22
xErath, # 19. December 2008, 09:00:43
You ever wondered why windows 7 is version 6.1, or xp 5.1?
匿名ユーザ, # 19. December 2008, 09:06:04
* /Opera[\/ ][1-6]/ -> "Version is too low" but it matches "Opera 10"
* UA.chatAt(6) > 6 -> "Version is high enough" but it fails to match "Opera 10", "Opera X", "Opera A".
* UA.substring(6,7) > 6 -> "Version is high enough" but it fails to match "Opera 10", "Opera X", "Opera A".
We see all sorts of sniffers based on these patterns, and most make some arithmetic check using the > or < operators. Both implicitly cast to a number, but always return false when working with NaN. We can't break the way arithmethic operators work just to force sniffers to work
The idea of fudging the UA string to contain two version numbers has been done plenty of times before. IE still claims to be Mozilla/4.0. Firefox still claims to be Mozilla/5.0. But they were doing that to be compatible with another browser's UA string. We are trying to be compatible with our own.
Our UA string patterm means that Opera/10 is the next logical step. We could hack it like Jere suggested, and we did look into that. But it forces sites to jump through ridiculous hoops just to get Opera's version number for legitimate uses (there aren't too many, but stats are a common usecase). And then we might have to do it again when sites start relying on the hack approach:
Opera/9.99 [10.00][really 11.00] (Windows NT 5.1; U; en) Presto/2.2.0
Opera/9.99 [10.00][really 11.00][actually 12.00] (Windows NT 5.1; U; en) Presto/2.2.0
Opera/9.99 [10.00][really 11.00][actually 12.00][OK_I_lied_it's 13.00] (Windows NT 5.1; U; en) Presto/2.2.0
At some point, someone has to bite the bullet. And it looks like we are biting. We still have to change to version 10 soon, because it is the next logical step. So we have to work with the consequences. This comes down to our Open The Web project, who contact these sites, pointing out their mistakes, and suggesting alternatives. For example, those that like to use this:
UA.substring(6,7) > 6
Can just use this:
UA.substring(6) > 6
Or:
parseFloat(UA.substring(6)) > 6
This is partly what alphas are for - to give Web sites a chance to see what's on the horizon, and prepare for it. Maybe this will clear a path for the future, when others reach the magic two-digit numbers, but I doubt it.
Cover us, we're going in!
tarquinwj, # 19. December 2008, 09:45:50
This is a problem which is common for Flash as well - once Flash 10 was launched, they started running into precisely these issues.
匿名ユーザ, # 19. December 2008, 10:05:06
Banksa is in the past.
Cheap fees sure, but I moved away from them.
匿名ユーザ, # 19. December 2008, 10:47:50
We use this:
Opera/([0-9]+)(\.([0-9]+))?
匿名ユーザ, # 19. December 2008, 10:53:27
This is furthers my belief that web devs are, mostly, retarded. Web dev is the Special Olympics of programming.
匿名ユーザ, # 19. December 2008, 11:00:21
My vote for "Opera MX" (the "X" is for "extreme").
Alternatively, you could go with the dewey decimal system.
匿名ユーザ, # 19. December 2008, 11:04:36
There's some good news, too! The site that started it (for me, anyway) has just advised me that they have updated their code to handle two-digit version numbers, and I've just confirmed that. Yay!
And it only took six months.
One down, far too many to go...
Andrew Gregory, # 19. December 2008, 12:03:55
Opera 90 would work up to version 99, it should be long enough for IE and firefoxto get there and then all the websites have to make the change.
匿名ユーザ, # 19. December 2008, 12:21:26
Well, it's obviously your fault for sticking with the same naming system for an entire 10 versions - a preposterous course of action in today's modern, dynamic and ever-changing internet.
匿名ユーザ, # 19. December 2008, 13:27:36
MTKnight, # 19. December 2008, 13:46:40
d4n3, # 19. December 2008, 14:04:32
Take the TeX approach. The version number of TeX approaches Pi and with every release they add another digit.
Maybe 9.9 = 10, 9.99 = 11, 9.999 = 12, etc ...
匿名ユーザ, # 19. December 2008, 14:24:44
I'm having the same issue with Flash 10 on a few sites. Most of them seem to be using a string compare since they identify my flash version as 10 and suggest I upgrade to at least flash 7.
匿名ユーザ, # 19. December 2008, 14:25:41
How about 9+1, 9+2, and so on.
匿名ユーザ, # 19. December 2008, 14:26:23
I can't even log into my other websites with Opera:
sprint.com
uboc.com
匿名ユーザ, # 19. December 2008, 14:40:08
How about Opera X ?
匿名ユーザ, # 19. December 2008, 15:06:06
How about you call it opera x?
匿名ユーザ, # 19. December 2008, 16:25:49
Originally posted by Anonymous:
http://my.opera.com/hallvors/blog/show.dml/2834389#comment6622253
d4n3, # 19. December 2008, 17:13:16
TreeGo, # 19. December 2008, 18:04:10
I just want to quote myself:
Originally posted by FataL:
FataL, # 19. December 2008, 18:32:04
"Do Opera users care if you call yourself version 10 or 9.64 or 9.635 or 9.7 or whatever?"
If you noticed from the cookie, it detected 9.62 as 9.2, so yes, it matters. They can't do 9.635 or even 9.63. They already can't do 9.62, but it hasn't mattered yet as site operators aren't selecting based on minor version number. But we're already at x.6, so that leaves only 3 versions of Opera before they hit 10.0 anyway.
Websites need to allow multiple digits for both major and minor version numbers. Period. Opera's going to hit this problem soon enough, it may as well be now. Someone has to drive "innovation" even if by innovation we only mean "doing it right."
匿名ユーザ, # 19. December 2008, 18:44:45
Would Opera X work?
匿名ユーザ, # 19. December 2008, 19:01:48
Opera X - but then again, you'll probably get sued by Apple.
Now, a serious suggestion: Name it Opera Pavarotti, in honor of the greatest tenor in modern times.
匿名ユーザ, # 19. December 2008, 20:08:50
Opera X - but then again, you'll probably get sued by Apple.
Now, a serious suggestion: Name it Opera Pavarotti, in honor of the greatest tenor in modern times.
匿名ユーザ, # 19. December 2008, 20:09:15
qwo, # 19. December 2008, 20:40:39
what increase the version of Opera to 90.0 ? ;-)
匿名ユーザ, # 19. December 2008, 21:46:14
@qwo: I think you misunderstood. The problem was not using parseInt or parseFloat, but rather what you use it on. In the examples Tarquin posted above that would be a substring of the UA string (in the cases where it breaks Opera 10 this substring is only one digit long).
_Grey_, # 19. December 2008, 23:37:10
Off the top of my head, I can think of the following software products that have gone to 11 and haven't (yet) changed to another scheme or name:
OpenSuSE Linux.
Windows Media Player.
Some long-running video game series.
I'm trying to think of any others...
Kelson, # 20. December 2008, 00:45:34
I beg to differ from your view of a slippery slope. A hackish UA string such as the one I proposed will indeed require accommodation by everyone who (legitimately) wants to know the version number. However, I theorize that sniffers will learn to parse – if not an unlimited sequence of digits – at least a two-digit (plus decimals) version number from the given location, and thus increments to the version number should be safe up to version 99.
I understand that Opera Software sticks to their principles about an open Web rather obstinately, and while that is a sincerely good intention, this problem really is self-induced. It would be naïve to assume that the problematic browser-sniffing can be gotten rid of during the alpha/beta phase – new problem children might (and will) keep popping up, and the problems they cause could have been avoided.
Browser sniffing and website incompatibility in general has always been one of the biggest reasons people choose not to use Opera. browser.js and override_downloaded.ini are a great aid, but their cure comes with a significant latency. For many years, Opera defaulted to the fake MSIE user agent string, which meant that stat generators had to learn how to detect Opera. You realized that usability was a bigger priority than legitimate uses of browser sniffing. Please don't alter your stance.
Jere, # 20. December 2008, 04:38:19
The basic problem, IMO, is that the average web developer is careless and poorly trained. Things really need to be made simpler for them. Adding multiple different version numbers to the UA string won't help. Opera's addition of MSIE to their version string was criticized by quite a few people as simply muddying the waters and making it more difficult to correctly handle Opera.
I think this two-digit version issue affects relatively few sites, and tends to be a trivial fix for the site. I don't believe it's worth making a mess of the UA string again. There are bigger issues for Opera to work on.
BTW, the number of people who have made suggestions like "Opera X" and "Opera A" (here, on my blog, on reddit, etc) really highlight the typical thought processes going on in web design.
Andrew Gregory, # 20. December 2008, 06:42:06
User-Agent: Opera/9.6*1.042 (Windows NT 5.1; U; en) Presto/2.2.0
匿名ユーザ, # 20. December 2008, 07:27:26
didn't exist before.
It is not a result of changes to rendering in a more/less spec-compliant direction.
It is the result of changing a header value that bears no significance to the user, as long as everything works as intended. This is an initiative by the browser's vendor.
Loss of acclaim by a handful of makers of legitimate browser-sniffing code should weigh far less than uncountable end users who might become victims of failed detection. Besides, criticizing the spoofed MSIE UA string is rather pathetic. You still need to find how the UA string is formatted by each browser you want to detect, and the only additional thing Opera's fake identification demands is that you search the string for Opera before MSIE. Agreed, my proposal would not be quite as simple to handle, but maybe it could if done in the same fashion:
Opera/9.99 (Windows NT 5.1; U; en) Presto/2.2.0 Opera/10.00
After years of detachment from web dev I can't think sharply enough to conceive something more elegant. There is not much more I can add, you've seen my suggestion and that's all I have to offer.
Jere, # 20. December 2008, 09:08:59