
Big Sur is both 10.16 and 11.0 - miles
https://eclecticlight.co/2020/07/21/big-sur-is-both-10-16-and-11-0-its-official/
======
RJIb8RBYxzAMX9u
I don't understand why -- and do educate me on why I'm wrong -- software don't
just use an internal and external version number. Version numbers may have
started as a technical label with precise meanings, but they've been a part of
branding and marketing for a while now. It's futile to fight it[0].

Let the former be a monotonically increasing (say 64-bt) integer, and the
latter be a free-form string. This way, marketing folks are free to call one
version "macOS 10.16 Big Sur", followed by "macOS 11.0 Big Sur Pro Max",
"macOS 10.32 Pro SE", etc. w/o developers pondering over whether "Pro SE" >
"Pro Max". As for API, maybe something like getProductVersion() for the
internal version, and getProductName() for the external version. Heck, be
facetious and let the latter return a string like "!!! DO NOT USE FOR VERSION
COMPARISON USE getProductVersion() INSTEAD !!!\07\07\07macOS 10.16 Big Sur".

Yes, lazy developers will get it wrong, similar to how they use
gettimeofday()[1] instead of clock_gettime(CLOCK_MONOTONIC, ...)[2]. In their
defense, often software switch between versioning conventions such that what's
the "right" thing to do is unclear.

[0] Such appropriation is everywhere. Don't get me started on how Porsche
Taycan, an electric car, has a "Turbo" model. It probably doesn't even come
with blinker fluid standard.

[1]
[https://pubs.opengroup.org/onlinepubs/9699919799/functions/g...](https://pubs.opengroup.org/onlinepubs/9699919799/functions/gettimeofday.html)

[2]
[https://pubs.opengroup.org/onlinepubs/9699919799/functions/c...](https://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_gettime.html)

~~~
js2
macOS/iOS have this concept already:

CFBundleVersion: The version of the build that identifies an iteration of the
bundle. This key is a machine-readable string composed of one to three period-
separated integers, such as 10.14.1. The string can only contain numeric
characters (0-9) and periods.

[https://developer.apple.com/documentation/bundleresources/in...](https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion)

CFBundleShortVersionString: The release or version number of the bundle. This
key is a user-visible string for the version of the bundle. The required
format is three period-separated integers, such as 10.14.1. The string can
only contain numeric characters (0-9) and periods.

[https://developer.apple.com/documentation/bundleresources/in...](https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring)

Android similarly has versionName and versionCode.

The problem is that no matter what, someone somewhere is going to parse
something that was never intended for non-human consumption. Or code ends up
making assumptions that it shouldn't about a machine-readable version.

I have code which parses CFBundleVersion. It assumes the version follows
Apple's docs. But guess what? CFBundleVersion is just a string and nothing
enforces Apple's guidance so I was surprised (I shouldn't have been) to have
to deal with an internally distributed iOS app that had the word "debug"
tacked on to the end of its CFBundleVersion.

~~~
joshstrange
Small side note:

Android's "versionCode" is an ever-increasing number, you must submit a higher
versionCode than your previous build.

CFBundleVersion can be set back to 0 with each CFBundleShortVersionString
change.

Normally I just set both to a build number on whatever CI I use (for something
like a cordova cross-platform app) and then increase
CFBundleShortVersionString & versionName using the tag name (or a custom
version name I give a release).

~~~
lilyball
CFBundleShortVersionString must increment too though. So if you join
“${CFBundleShortVersionString}.${CFBundleVersion}” the whole thing must
increment, and this explains why CFBundleVersion can revert when
CFBundleShortVersionString increments.

------
klodolph
Note that this is how Windows has worked since 2013.

If you ask what version of Windows you are running, for example with
GetVersionEx, Windows will report Windows 8.0. This is true _unless_ your
application marks compatibility with a newer version in its manifest, at which
point Windows will report whatever the newest version in your manifest is, or
whatever version Windows actually is, whichever of the two is older.

~~~
richardwhiuk
It's kind of annoying from an analytics perspective, because you need to
upgrade the manifest (and thus the compatibility) to find out how widely
adopted a version is, so you can find out if how much effort it's worth
putting into validating it as a platform.

~~~
wolrah
> so you can find out if how much effort it's worth putting into validating it
> as a platform.

I don't understand the logic here. We're talking about the new version of your
target OS. You will presumably always need to support it eventually.

IMO if you're large enough to have a testing and validation process at all,
you should be including at least the public beta builds in those tests.. By
the time it hits RTM if you don't at least know if your software works you're
doing it wrong.

Also, if your software is regularly breaking with OS releases and you're not
doing something that requires you to be deep in the internals, you're almost
certainly doing something significantly wrong and should figure out what that
is. The only software I consistently experience breakage with on updates is
also the one where their tech support insists that we're being paranoid for
refusing to give their users local admin privileges just to run it. I don't
think for a second that's a coincidence.

~~~
toast0
> I don't understand the logic here. We're talking about the new version of
> your target OS. You will presumably always need to support it eventually.

Maybe not, you might be able to skip a version that had poor adoption. Windows
ME, Windows Vista, IE7 and TLS 1.1 never had a very high market share, because
people put off updating so long that better things came along.

------
cpeterso
The User-Agent string for Big Sur's Safari running on Apple Silicon (ARM)
still says "Mac OS X 10_16" and, curiously, claims to be "Intel":

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16) AppleWebKit/605.1.15 (KHTML,
like Gecko) Version/14.0 Safari/605.1.15"

~~~
m45t3r
This makes sense since it should avoid two issues:

\- Sites that try to detect mobile by looking at "ARM" in user-agent string

\- Sites that try to parse the macOS minor version for some reason and would
be confused to see something like "11_0"

BTW, user-agent is a hell anyway. Just looking at this user-agent that OP
posted, macOS still identifies itself as "Mac OS X", still is based on
Mozilla/5.0(!), still identifies itself as KHTML enginee (compatible with
Gecko), and so on...

~~~
infogulch
Oh my god can we please kill the user agent string already? Every time any new
combination of browser/os/platform is created it claims that it's as some
other user agent from an established browser because sites are lazy and abuse
user agent string to determine capability. Meaning they have long lost all
meaning and we should just dump them.

~~~
AnonC
> Oh my god can we please kill the user agent string already?

Browser makers tried to do that by providing feature detection, but the weight
of legacy code and developers already used to using the user agent strings has
made killing it impossible.

Edit: As pointed out in another comment here, it seems like Google is killing
it (or planning to). [1]

[1]: [https://www.zdnet.com/article/google-to-phase-out-user-
agent...](https://www.zdnet.com/article/google-to-phase-out-user-agent-
strings-in-chrome/)

------
nameoda
Got to admit - that's a simple yet clever solution.

~~~
greatgib
Quite the opposite, it is a complex mess.

~~~
GekkePrutser
I agree, this is not good. I manage Macs in MDM and I already saw that in some
actions they show up as 11 and in others as 10.16. sw_vers tends to report
10.16 but UIviews tend to report 11.0. MDMs are complex machines and they
don't always do every operation the same way.

Why is this bad? Well for one example, because sometimes you use version
numbers not exactly. Consider the statement: "Applies to 11.0 and higher".
Depending on how the OS identifies itself this will be valid or not. On the
_same_ OS.

Or consider reporting, if under some conditions the Mac identifies itself as
10.16 and in others as 11, you're going to have them in 2 different buckets
even though they're the same thing.

Really, they should have made a choice, one or the other. If software wasn't
compatible because of this it should just be updated. Apple never said it
would always be 10.x.

I don't really understand why they're doing this as Apple normally has no
issue telling developers to fix it or stuff it. They never cared about
backwards compatibility before. If having 11.x was not that important to them
to upset a lot of stuff, they should have just stuck with 10.16.

~~~
gregoriol
Wouldn't "10.16 and higher" work for both 10.16 and 11?

~~~
tobr
What if next year is 12.0 and 10.17?

~~~
klodolph
I don’t think this is a plausible scenario. You might also ask, “What if next
year Apple releases Mac OS 9.3?”

~~~
steviedotboston
Don't get me excited now...

------
ludwigvan
Makes sense, 16 is 1 in Base 16, so 10.16 = 11.0 :)

~~~
kbenson
So, there was A.F, then it incremented bu 0.1 to B.0. Checks out, except for
their weird insistence to use a decimal representation for what is now
_obviously_ a hexadecimal scheme. ;)

------
dindresto
Why did they even go with 11 instead of just dropping the 10, making Big Sur
macOS 16?

~~~
dindresto
To the people downvoting this comment: By saying that 11 is what 10 was to Mac
OS 9 implies the same substantial changes made to the whole system which is
not the case here, at all. Mac OS 10 / OS X / macOS was a completely new
system based on NeXTSTEP (or at least, completely different from Mac OS 9). It
is still the same operating system, just in the usual upgraded fashion
(although this time with more visual changes). By dropping the 10, Apple would
have stated that macOS is just considered the successor to Mac OS (9) and the
previous major "10" is already implied by the name. The 11 just makes no sense
considering there has already been an 11th OS X.

~~~
Doctor_Fegg
On the other hand, MacOS 7.6 to MacOS 8 was not much more than a rebadging and
a few bundled widgets. 9->X was a once-in-a-lifetime architectural change and
not historically typical of Mac system software major versions.

------
exikyut
Oh, Linux can do this too!

    
    
      $ uname -a
      Linux h0nk 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2 (2020-04-29) x86_64 GNU/Linux
      $ setarch --uname-2.6
      $ uname -a
      Linux h0nk 2.6.79-9-amd64 #1 SMP Debian 4.19.118-2 (2020-04-29) x86_64 GNU/Linux
      $ _
    

Of course, I shudder to think about the situations this would actually be used
in.

~~~
account42
The difference here is that the default behavior is to report the actual
version and it is up to the user to enable the compatibility hack for broken
software.

------
sixstringtheory
> Big Sur will identify itself as both version 10.16 and 11.0 according to
> context. This should put the minds of many at rest

Not mine. It's an extra piece of cognitive burden and another opportunity for
misconfiguration.

~~~
crazygringo
Welcome to all technical migrations ever.

The ease of mind of the current developer is far less important than software
not breakly widely for users because previous developers made bad assumptions
about version strings.

~~~
sixstringtheory
Making policy to avoid the consequences of prior bad practices does not sound
like a recipe for encouraging good practices moving forward. In terms of
technical debt, it's like taking out a loan to pay off a credit card. I worry
this will just lead to baking in more bad assumptions as developers hurry to
get this off their plate.

I wonder why they don't announce a deprecation of the old versioning schema,
and give developers time before switching, instead of just doing both at the
same time with little to no warning. They've done that with lots of other
technical migrations and even then, there is still plenty of controversy–see
Catalina 32-bit support. Is there any reason to believe that doing a migration
outright is safer, when the stepped approach has already proven difficult?

The least charitable guess I can come up with is that this was a mistake that
they can't walk back for technical reasons, so are just fixing forward.

If it were up to me, I'd announce that a future version of macOS will
increment the major version and that  will be moving to
semver/calver/whatever-other-protocol, and do it when the current place name
marketing strategy runs its course, as did the cat name marketing strategy.
That would also give a few more years to get any major UI/system changes ready
to drop for macOS 11. Just my 2¢.

~~~
crazygringo
The issue is old software continuing to work without having to be updated.

Giving more "time" solves nothing for all the programs out there that cannot
or will not be updated for whatever reason.

This wasn't a mistake on Apple's part, it's just working around bad
programming practice by developers. But there's no reason why users should
suffer for it.

~~~
sixstringtheory
If they instead didn't move to 11 at all, what would stop working? What is the
thing they are rushing to solve before things stop working? I think I'm
missing something there.

I agree with users not needing to suffer, I'm not advocating for a hard break
here.

Edit to add: is it necessarily a bad thing for unmaintained software to die?
Keeping them around sounds like a great way to accumulate security
vulnerabilities.

~~~
saagarjha
Damned if they do, damned if they don't…if Apple broke all the old software
here, people would be up in arms about how they should have added a "legacy
mode" for these applications.

------
lupinglade
This is not correct. It is being reported as 10.16 only on x86 and only
temporarily. It is noted as such in the release notes. Final build will be
11.0.

~~~
saagarjha
It is reported as 10.16 on Intel, and the final build will present itself as
11.0 unless the application is linked with an older SDK or you set the right
environment variable.

------
jorams
I don't really understand why they add this complexity. Supposedly it's to
avoid breaking backwards compatibility, but they break all kinds of backwards
compatibility on every release anyway.

------
fpgaminer
Is there context for this? Are apps breaking when the major version of the OS
changes?

~~~
thought_alarm
It's the first time in the 20 year history of Mac OS X that the major version
number has changed. They're simply protecting against the likely possibility
that some apps don't bother to check the major version.

Going forward, expect the major version number to change each year, like iOS.
But for apps built against older versions of the SDK, the major version will
always be 10.

~~~
jon-wood
How is Mac OS X two decades old? It feels like just yesterday I started my
first real job, developing websites on a computer running Mac OS 10.1.

~~~
DaiPlusPlus
It’s because the fundamentals of the macOS user-experience haven’t changed
much since OS X’s introduction of the dock and their fancy GUI effects: the
“genie” window minimise is still there! And generally speaking, macOS’s
aesthetics have been consistent too - we only saw Dark Mode added very
recently, for example. Apple has also been very conservative about adding
major user-visible features to macOS lately - but that’s more attributable to
them devoting their resources to iOS instead of macOS.

Windows, on the other hand, updates its appearance (and adds (or removes)
gimmicks) with each major release - even completely upending the UX
fundamentals in Windows 8.

Also consider that we used to have to reformat/reinstall computer OSs more
regularly in the past - and having to do reinstalls makes you think about your
computer UX as you spend time changing the settings from the defaults to your
custom preferences. I remember having to reinstall Windows 95-98 every 6-9
months, and Windows XP once every year or so. Since Windows 7 things have been
a lot more stable - my current Windows 10 install would have been ~4 years old
now if it weren’t for me losing all my documents in the October 2018 update...
(all I got was $400 from MS, ugh)

------
madeofpalk
(Minor site feedback, if the authors/owners are here: please consider adding
pointer-events: none to the "drop cap" decorative first letter so it doesnt
obscure text selection of the actual article.)

------
dmitshur
Is there any confirmation if next year we should see macOS 12 or 11.1?

I hope it’s the former, as that will make yearly updates to macOS more
consistent with iOS, iPadOS, tvOS, and watchOS.

~~~
saagarjha
It's likely that it will be macOS 12:
[https://github.com/WebKit/webkit/commit/805c4f790d01d8579a2a...](https://github.com/WebKit/webkit/commit/805c4f790d01d8579a2a14b8c11a26f241a61a13)

~~~
Wowfunhappy
Ew, I do _not_ like that!

I couldn't tell you why but it greatly bothers me.

~~~
saagarjha
Perhaps it’ll improve the security patch situation we have now where they
differ by just build numbers, though.

~~~
Wowfunhappy
They could fix that if they wanted by just adding another decimal.

------
Razengan
I wonder if the real reason that Windows skipped version 9 was to "catch up"
to Mac OS "Ten", and whether Microsoft will jump to 11 too now.

~~~
rubber_duck
AFAIK Windows skipped 9 to avoid issues with bad version testing mistaking it
for 9x (95, 98).

~~~
DaiPlusPlus
I don’t believe that for one moment.

If you ask Win32 for its version number you get a VERSION structure with
Major/Minor/Build fields - not a string.

Windows faked its reported version information to software for compatibility
purposes since Windows XP (opt-in) and since Windows 8 (opt-out, using
application manifests) - so any program that doesn’t claim support for Windows
8, 10, etc is stuck in “Windows Vista mode” - so _even if_ software was doing
an osMarketingName.StartsWith(“Windows 9”) check it would be straightforward
to make it work.

~~~
Someone
Reading [https://www.gaijin.at/en/infos/windows-version-
numbers](https://www.gaijin.at/en/infos/windows-version-numbers),
major.minor.build doesn’t uniquely identify a Windows version.

Windows 7 and Windows Server 2008 R2 both are 6.1 build 7600, for example.

Also, suppose you check the version for compatibility checking, what do you do
if you get a version that you don’t know about, say “6.4, build 7709”? You can
give up and declare your program doesn’t work with this version, but that may
lead to lots of support calls when Microsoft rolls out a service pack. So,
instead, programs try to guess from the version string what OS they run on.

And yes, ideally, programs check for features ([https://docs.microsoft.com/en-
us/windows/win32/sysinfo/opera...](https://docs.microsoft.com/en-
us/windows/win32/sysinfo/operating-system-version)). Unfortunately the world
isn’t perfect.

------
musicale
That is kind of crafty. I wonder if they intend to continue this with macOS 12
or to return to single version numbers?

------
burtonator
I found that my iPad PRO lies about its user agent and will pretend to be
MacOS by default. They don't even provide you with a hint to detect that it's
a lie.

~~~
snazz
Yes, user agents are a mess (see this comment for non-Apple examples:
[https://news.ycombinator.com/item?id=23910637](https://news.ycombinator.com/item?id=23910637)).
They're not a good way to detect features as a web developer.

------
agustif
Im on the beta and it takes a lot to boot it gets semi-stuck on like 80% for
almost a minute..

Need to backup and do a clean install I guess

what can it be?

~~~
zitterbewegung
Do you have full drive encryption on? On my MacBook 12 2016 that seems like it
gets stuck on initially.

~~~
agustif
If it's filevault. i've it disabled. didn't happen before big sur fwiw

