> Monolithic repository might have been a tool that helped enforce it,
> but that's not what made it happen. It's the decision that ABI could
> be broken that did.
Well, there are probably some subtle details which I'm missing, and may be
you are totally right.
The way it looks to me is as follows:
They are "happy to break kernel ABI compatibility" because the repository is monolithic - they break ABI, they immediately fix user space apps.
> There is no "transitional" stage, when the kernel is already patched, but no user space apps are ready for those changes yet. It all happens at once.
What about third party apps? It's not a fully self contained system, there are binaries out there running on openBSD that the openBSD devs have never heard of, and they were broken by the change.
BSDs simply don't guarantee ABI stability, so no third party app should ever make a syscall directly. It all goes via libc. So, yes, from that perspective, it is a fully self-contained system.
In practice, third-party apps sometimes think that they know better, and get broken. Anything written in Go, for example:
Sure they do guarantee the ABI stability (within major release), but the main thing here is that FreeBSD - like pretty much any other operating system, but differently from Linux - maintains the stability at the libc level, not at syscall level.
And it's a guarantee that is, essentially, useless for any purpose other than the interaction between the base system and the kernel - i.e. not for third party software.
Good point.
The way BSD people look at this issue - 3rd party apps are sort of out of consideration.
I think they actually consider it to be self-contained.
[UPD] But I haven't checked how NetBSD handled y2038. It might be that they didn't break the ABI. In some parts, I think, OpenBSD/FreeBSD/NetBSD just converted time_t to an unsigned 32-bit int.
Well, there are probably some subtle details which I'm missing, and may be you are totally right.
The way it looks to me is as follows: They are "happy to break kernel ABI compatibility" because the repository is monolithic - they break ABI, they immediately fix user space apps.
E.g. NetBSD time_t 64-bit commit: https://marc.info/?l=openbsd-cvs&m=137637321205010&w=2
They patched the kernel:
and fixed broken user space at the same time:...
...There is no "transitional" stage, when the kernel is already patched, but no user space apps are ready for those changes yet. It all happens at once.
-ss