A chapter of unnecessary detail

In our second chapter of “The problem with User-Agent strings” is a fascinating story about the browser wars. It’s a tale where the User-Agent string takes centre stage, revealing its unpredictable nature and the need for vigilance when relying on it. 

The tale starts with me buying a new car back in 2016. Now, I didn’t pick this car—a Volvo V60—because it had an entertainment system with a built-in browser, but it definitely was one of the first things I checked out after I took it home. Priorities.

Nowadays, having a proper browser in your car isn’t a big deal, but it was still relatively rare back then. When I got home, I put the browser through its paces. And it was horrendous. It was slow. It couldn’t render modern web pages. The one redeeming thing this browser had was its User-Agent string. Or, actually, it’s two User-Agent strings.

It had one string that was accessible by JavaScript:

Mozilla/5.0 (VCC; 1.0; like Gecko) NetFront/4.2

NetFront—and not the good, WebKit-based version available on the Nintendo Wii U or PlayStation 3. 

It was the horrible version that made even Internet Explorer 6 look good. In the early 2000s, it was quite a popular browser in Japan, and it was used on various devices, such as assorted models of flip phones, PDAs, and even the PlayStation Portable. And in the Volvo Center Console, or VCC as it is called in the User-Agent string.

But the biggest surprise was that it used a completely different User-Agent string in the request headers sent to the server. So that is the first lesson in this tale of woe: Browsers can have two different User-Agent strings. 

So what about the second User-Agent string:

Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 Bork-edition [en]

It says it is Opera 7. And Internet Explorer 5.5 – no wait – Internet Explorer 6. So maybe it is not NetFront?

No, it is definitely NetFront. The second User-Agent string is just simply one big lie. This isn’t a case of separating the lies from the factual data. It is all lies. Another lesson learned: sometimes, you cannot get any accurate data from a User-Agent string.

Bork Bork Bork

That leads to the second part of this tale. Where does this second User-Agent string come from, and what does Bork-edition mean? 

First of all, the User-Agent string is copied over from Opera 7:

Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 [en]

Microsoft Internet Explorer is mentioned twice because of the same old reason we’ve read about in the first chapter. Web developers often build two versions of their websites: one for Netscape and one for Internet Explorer. Opera just wanted to ensure it got the same version as Internet Explorer, as that browser was the most advanced. Compared to Internet Explorer 6, Netscape 4 was a relic of the past.

But what about Bork edition?

Back in the early 2000s, there was MSN or Microsoft Netwerk. Everything web-related that Microsoft owned was basically placed under the MSN umbrella. It was an ISP, a chat app called MSN Messenger, a popular webmail client and much more. Microsoft even made a special browser for MSN users called MSN Explorer. 

And it was a news site. A very popular news site. That website got a makeover in 2001 in the style of the Windows XP. We weren’t yet in the age of building sites according to web standards. Microsoft built it for their web browsers: Internet Explorer and MSN Explorer. However, they did make sure it also worked in Netscape 6.

However, other browsers like Konqueror and Opera were not so lucky. In fact, Microsoft blocked these browsers from accessing the new site by looking at the User-Agent string. After some negative news coverage, Microsoft quickly updated the website and allowed other browsers to access MSN.

But in 2003, Opera users suddenly noticed that MSN looked weird. The text was clipped, basically making the site unusable. A quick investigation by Opera’s engineers showed that it was not a bug in Opera or perhaps a lack of standards support in Opera itself.

In fact, if you changed the User-Agent string in Opera to be identical to Internet Explorer, it worked. It rendered just fine. 

MSN analysed the browser’s User-Agent string and served a different CSS file to specific browsers. Internet Explorer was served one version, Netscape 6 was served another, and Opera was served a third. This was no uncommon practice at that time, so I don’t want to claim that it was nefarious in itself. But Opera certainly seemed to think so at the time. In any case, the CSS file served to Opera users was broken. 

So, Opera released a special version of its browser. One that fooled the User-Agent check that MSN used and allowed its users to access MSN again. But it also did something else. 

It changed the text to be completely unintelligible. 

Opera 7 Bork edition was a protest version designed to bring attention to this problem. It made MSN look like it was written by the Swedish Chef of The Muppets. Bork, bork, bork, bork. Bork bork bork. Bork. Bork bork. Bork!

And it worked. MSN was fixed shortly after. 

But how did this User-Agent string end up in my Volvo? To this day, I still have not found an answer to this question. Volvo is Swedish. So is the Swedish Chef. Maybe some engineer at Volvo was a fan of The Muppets. Perhaps when he or she reads this story, they will think: “Oh crap, this never was meant to go to production”.

Continue with Trouble happens when you update a version number