Why do all browsers' user agents start with "Mozilla/"? (2008)
38 comments
·June 22, 2025impure
Mozilla should start charging a licensing fee for starting your user agent with Mozilla/ Money problems solved!
wvbdmp
In a way it seems like a classic trademark violation, tricking people (or their servers) into thinking your product is someone else’s. I wonder if there are actual agreements about this these days.
rileymat2
The mark in this usage has gone unprotected for so long, I doubt there would be any success with that.
Also, I doubt tricking servers would indicate creating consumer confusion with the trademark.
userbinator
See Sega v. Accolade for a precedent of why that likely won't work.
im3w1l
Adversarial compatibility is pretty nice though, I don't think we should do away with it.
GuB-42
Google would have to pay a lot of licensing fees then...
> Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36
It is Mozilla (nope), Linux (yes, in a sense), Android (yes) AppleWebKit (not Apple and not WebKit), KHTML (nope), Gecko (nope), Chrome (yes), Mobile (yes), Safari (nope).
So maybe they owe something to Mozilla, Apple and KDE.
technothrasher
Not all browsers (e.g. "Lynx/2.9.0dev.12 libwww-FM/2.1") :)
RainyDayTmrw
In a similar way: Why was there no Windows 9? [1]
[1]: https://www.pcworld.com/article/435584/why-windows-10-isnt-n...
DecentShoes
This is a straight up lie and it's very obvious.
Windows reports its version numbers as a series of integers or by bools from helper functions, not as a string, and if there was any code that did you could easily work around it by having it report "Windows Nine" or "Windows v9" or whatever.
https://learn.microsoft.com/en-us/windows/win32/api/sysinfoa...
https://learn.microsoft.com/en-us/windows/win32/sysinfo/vers...
Gigachad
There’s also no reason that the public facing name has to be the same as the internal name. They could have called it Windows 9 and internally reported it as anything in the apis.
Its basically standard in software to do this when the actual name for something comes out near the end or changes often so you don’t have to update all the code to reference the new name.
bigfatkitten
> There’s also no reason that the public facing name has to be the same as the internal name. They could have called it Windows 9 and internally reported it as anything in the apis.
This is what they were doing at the time anyway.
Windows 7 was 6.1, Windows 8 was 6.2, Windows 8.1 was 6.3.
chuckadams
An alternate reason that doesn’t require such stretching of credulity around one broken piece of software is that MS already had two products starting with “Windows 9” and that people were likely to confuse them, whether end users or someone updating a catalog.
uxjw
TL;DR: Some code looking for Windows 95 or 98 only looked for "Windows 9" to match both, and would have matched Windows 9.
Now Apple has the year in the OS version we'll have people wondering in a few years what happened to iOS 19-25.
DecentShoes
This is false, Windows reports its version as a series of integers, not as a string, and if there was any code that did you could easily work around it by writing "Windows Nine" or "Windows v9" or whatever.
danielheath
I worked on a codebase that had this bug, so I’m not sure where you’re getting “this is false” from.
We sold software that was installed long-term at customer sites, and they weren’t going to update it until they needed to, so the bug persisted in production well after we fixed it.
anamexis
Has anyone tried running a generic User-Agent on a standard modern browser? (By "generic", I mean one that does away with this whole compatibility dance.) I'm curious how much would break or degrade.
arp242
Opera Presto didn't use it, and had a User-Agent like:
Opera/9.80 (X11; Linux zvav; U; en) Presto/2.12.423 Version/12.16
Didn't seem to cause that much problems.It did keep the version at 9.80, presumably because >=10 must have caused problems somewhere.
userbinator
Unfortunately, everything that does fingerprinting/"bot detection" will get triggered.
Gigachad
All of the privacy stuff straight up breaks the internet these days. Try using a VPN and half the time CDNs straight up refuse to serve you the JS files so sites like supermarkets or flight booking websites load broken or show some generic forbidden error.
Blanking out the user agent would have to be pushed by either Apple, Google, or Microsoft. And out of those I feel like only Apple would do it. iCloud private relay doesn’t end up breaking websites since companies care about not degrading the experience for Apple users and make sure the site still works.
usr1106
Ironically Cloudflare blocks the real Mozilla derived browser on this Linux phone, so I can't access SO anymore. (Turnstile was broken a long time. It finally got fixed half a year ago. Now I note it does not even come up any more, just a static message that I should throw away my phone^W^W^W^W upgrade my browser. No idea whether Cloudflare or SO is to blame.)
userbinator
No surprise, CF is in bed with Big Browser. There are workarounds but I won't go into detail here since "the walls have ears"; suffice to say that the "bot" scraping companies still have no trouble getting around it.
shmerl
Really weird and convoluted reasons for it. A better question is why it was never fixed / renamed to proper names.
wolrah
> A better question is why it was never fixed / renamed to proper names.
Because the reason it is the way it is in the first place is compatibility with sites that are doing things objectively wrong already, which makes it really hard to get them to change.
The problem is that poorly designed systems limit access or disable features based on a user-agent allowlist, which is never the right answer. There is no right way to do it because it's always wrong, but people choose to do it anyways.
I'm personally a fan of treating broken sites as broken, but I understand that realistically any "alternative" browser has to deal with all the broken sites designed for whatever came before it because otherwise most normal users won't consider switching.
If I were made King of the Internet for a day and able to enforce any changes I wanted on everyone, all the major browsers would have to change their user-agent string to something totally unique on the same day, intentionally breaking any sites that are doing it wrong for everyone so the broken sites are forced to fix their own nonsense. That'd come maybe two or three decrees down the line from "All ISPs are required to provide a globally routable IPv6 block in accordance with RFC 6177, providing only CGN IPv4 is a capital offense".
wombatpm
When my site says Best viewed in Netscape, I mean Netscape Navigator. The rest of the world may have moved on, but static HTML 3.2 with the blink tag is forever.
Gigachad
Personally I’d get rid of the user agent entirely. Stop sending it and let sites query available features rather than check the specific browser version.
fredoralive
To avoid breaking stuff basically, easier to have ugly UA strings than persuade every site that does weird UA parsing to fix themselves.
The main exception to this was Opera back when it had its own engine, which did use Opera at the start of its fairly clean default UA string. Then when they reached version 10 they had to make the primary version 9 with a second real version later in the string as sites couldn’t cope with two digit version numbers…
imiric
I miss Opera. It's a damn shame that it was so badly mismanaged, and ultimately sold off to investors, which further buried it into irrelevance. It now survives on gaming-oriented gimmicks and shady promotions. I hear that Vivaldi is supposed to be a continuation of it, but from what I've seen it's just another Chromium clone with a closed-source UI, without any distinguishing features.
Opera in the late 90s / early 2000s was excellent. It was lightweight and snappy. Among the first to support tabs. The Presto engine was the most performant on machines of the era. The trialware/adware was annoying, but the browser was solid. The built-in email client was decent as well.
In 2009 they launched a very interesting web server / sharing feature with Opera Unite, which unfortunately didn't gain traction.
Opera Mini was the best mobile browser for a few years as well, before smartphones took off.
fredoralive
Amen brother.
My personal big thing was the ability to "minimise" / deque tabs, a legacy of the really early version of tabs that were basically based around the concept of the Windows task bar (and MDI), not tabs. I'm not a Firefox user as it's the least worst option, and there used to be Firefox extensions that mostly (but not quite) did it, but Mozilla naturally broke it as part of their general view that making Firefox worse will somehow make it popular[1].
Also mouse gestures. Again, you can kinda do it with Firefox, but random stuff like the home shortcut screen don't support it nowadays because???
Also, I want a status bar. I don't care if it's old fashioned, but I want one.
Sorry if this is becoming a Mozilla / Firefox gripe fest.
[1] I don't think Opera had a nice preview view for RSS feeds, but Firefox did. Then they broke it for random reasons? Gee, raw XML is so much better than a sensible view, thank you Mozilla!
FirmwareBurner
>It's a damn shame that it was so badly mismanaged
I think even the best management in the world wouldn't have helped it survive the onslaught of Google's Chrome and their massive war chest in that time. It's like a team of girl scouts versus the NBA.
JdeBP
Possibly, but it wouldn't be the first time that people took a field that was supposed to be an originator name and made it something else entirely.
There's a field in the Volume Boot Record of disc volumes, in the PC compatible world, that was supposed to be the name of the OEM whose software formatted the volume. It was (and is) a few bytes of identifying human-readable text. Operating systems ended up doing string comparisons and parsing numbers, and breaking in odd ways, including not even recognizing their own handiwork, when operating system vendors did not use the name of the first vendor.
* https://jdebp.uk/FGA/volume-boot-block-oem-name-field.html
It has probably been long enough since MS-DOS 3.3 and in turn the Browser Wars that someone is right now failing to learn from history and making this mistake anew, yet again, somewhere.
madeofpalk
They did in the new UA api https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/...
ExoticPearTree
Probably because now if you come with a different User-Agent you might get blocked by a WAF or a load balancer. Too much history to just forget overnight.
ronsor
Backwards compatibility at all costs
nreilly
Maybe we should move to something like termcap for browsers? /s
null
(2008)
The post popular answer includes: History of the browser user-agent string related discussions:
2022 (87 points, 20 comments) https://news.ycombinator.com/item?id=31246438
2019 (62 points, 22 comments) https://news.ycombinator.com/item?id=21085388
2018 (558 points, 168 comments) https://news.ycombinator.com/item?id=16525559
2013 (100 points, 32 comments) https://news.ycombinator.com/item?id=6674812