Skip to content

Conversation

emilazy
Copy link
Member

@emilazy emilazy commented Jun 10, 2025

macOS 27 is going to drop Intel support, so we’re pre‐announcing the inevitable so that people can prepare. We don’t yet know exactly which Nixpkgs release will drop support for x86_64-darwin, but the 26.11–27.11 range, between the release of the first OS version to not support the platform and the release of the first OS version to not be able to fully emulate it, seems like a safe bet.

We already announced that we’re aligning our OS support policy with Apple’s starting in 25.11, so it’s very unlikely that we could justify making an exception to devote resources to x86_64-darwin support in 28.11 and beyond, after Apple stop releasing security updates for the platform.

However, the end of support in Nixpkgs may come sooner than that. Apple have announced that Rosetta 2 will be pared down by macOS 28 to not support emulation of arbitrary applications. We use aarch64-darwin builder machines exclusively and rely on Rosetta 2 to build packages for x86_64-darwin. As we try to keep the builders on the latest OS versions, that would mean that we’d lose the ability to build for x86_64-darwin around the release of 27.11, unless we held back on updating the OS on the builders for a year.

Additionally, x86_64-darwin is the slowest system to build due to our limited Mac builder resources and the emulation overhead. Dropping support will more than double our effective aarch64-darwin build capacity and benefit the whole project by reducing the bottleneck on world rebuilds during staging-next cycles. It’s hard to find good data on the relative market share, but the May 2025 Steam Hardware Survey shows over 80% of their macOS users already being on Apple Silicon. Therefore, I’d personally expect us to drop support in 26.11 or 27.11, given the trade‐off between the resources it will take to continue supporting x86_64-darwin and the number of users it is likely to benefit. (And I’m typing this on a Intel Mac myself…)


cc @NixOS/darwin-maintainers

Things done

  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)
    • sandbox = relaxed
    • sandbox = true
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • Nixpkgs 25.11 Release Notes (or backporting 24.11 and 25.05 Nixpkgs Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
  • NixOS 25.11 Release Notes (or backporting 24.11 and 25.05 NixOS Release notes)
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
  • Fits CONTRIBUTING.md, pkgs/README.md, maintainers/README.md and other contributing documentation in corresponding paths.

Add a 👍 reaction to pull requests you find important.

@emilazy emilazy requested a review from a team June 10, 2025 12:55
@github-actions github-actions bot added the 8.has: documentation This PR adds or changes documentation label Jun 10, 2025
@ofborg ofborg bot added the 6.topic: darwin Running or building packages on Darwin label Jun 10, 2025
@github-actions github-actions bot added 10.rebuild-darwin: 1-10 This PR causes between 1 and 10 packages to rebuild on Darwin. 10.rebuild-darwin: 1 This PR causes 1 package to rebuild on Darwin. 10.rebuild-linux: 1-10 This PR causes between 1 and 10 packages to rebuild on Linux. labels Jun 10, 2025
@sikmir
Copy link
Member

sikmir commented Jun 10, 2025

Intel Mac user is here)

@Aleksanaa
Copy link
Member

Intel mac users can become x86_64-linux users by then 😼

@sikmir
Copy link
Member

sikmir commented Jun 10, 2025

Intel mac users can become x86_64-linux users by then 😼

No support for MacBook Pro 13 in https://github.com/NixOS/nixos-hardware :(

@emilazy
Copy link
Member Author

emilazy commented Jun 10, 2025

Intel mac users can become x86_64-linux users by then 😼

Yes, I think that’s probably the best path forward for the hardware. Though I expect that MacPorts will continue building software throughout the support lifetime of macOS 26, if we drop the platform sooner than that; not so sure about Homebrew.

@sikmir I believe https://github.com/NixOS/nixos-hardware/tree/master/apple/t2 should work to run NixOS to run on your machine? But it’ll be a year and a half before the earliest Nixpkgs release I’d expect to lack support, anyway.

@khaneliman
Copy link
Contributor

khaneliman commented Jun 10, 2025

I would expect more community effort on adding support for nixos on the hardware with an announced deprecation, for those who aren't going to upgrade hardware.

@@ -3,6 +3,9 @@
## Highlights {#sec-nixpkgs-release-25.11-highlights}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->

- The `x86_64-darwin` platform will be deprecated within the next few years, in light of Apple’s announcement that macOS 26 will be the final version to support Intel Macs.
Based on Apple’s security support policy and our available build and maintenance resources, we expect the first Nixpkgs release without `x86_64-darwin` support to be between 26.11 and 28.11.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Realistically, I don’t think we’ll be able to maintain support past 27.05. 27.11 will release after macOS 28, which will have diminished Rosetta 2 support. Depending on what that looks like, it may not be feasible for contributors to build and test on x86_64-darwin. We could maintain x86_64-darwin as a cross target, but that comes with some pretty big caveats (like no Python support).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed that the last year of potential support here seems very unlikely to be worth the trade‐off, since we’d most likely have to hold the builders back and deal with limited ability to test things at a time when the platform will be on its last legs. Do you want me to tighten the end of the range to 27.11?

@emilazy emilazy force-pushed the push-kwzrumnypmwl branch 2 times, most recently from 95fc0fb to d0db927 Compare June 10, 2025 15:03
@emilazy
Copy link
Member Author

emilazy commented Jun 10, 2025

Updated to 26.11–27.11 based on discussion with Randy on Matrix.

@kubukoz
Copy link
Member

kubukoz commented Jun 11, 2025

Can we clarify what deprecation/support actually means in this context? Can packages still declare that OS as a supported platform even if there aren't going to be caches, CI builds etc?

@reckenrode
Copy link
Contributor

We may want to be more explicit: x86_64-darwin support will be removed once it is no longer possible to target it using Rosetta 2 on the latest OS release (because that’s what the builders will be running).

Updated to 26.11–27.11 based on discussion with Randy on Matrix.

If the limited Rosetta 2 works with nixpkgs, we might be able to continue support until 29.11. It depends on what exactly Apple means by that, which we (unfortunately) won’t know until the first beta with of macOS 28 is released.

@emilazy
Copy link
Member Author

emilazy commented Jun 11, 2025

Can we clarify what deprecation/support actually means in this context? Can packages still declare that OS as a supported platform even if there aren't going to be caches, CI builds etc?

Well, ultimately it just means what we’ll support – whatever you can get working might work, but it’s up to you to keep it working. But in practice, you’d have to build hundreds to thousands of packages to get anything running once the builders stop, and there’d be no expectation that any contributor avoid breaking the platform. In practice, I expect things would break quickly: we’d have no reason to avoid using AArch64‐only SDK versions in core packages or work around toolchain updates and Apple source releases that drop upstream support for x86_64-darwin, x86_64-darwin would be left out the next time we need to update the bootstrap tools, and there’s a non‐trivial amount of things for x86_64-darwin support across the tree that we’d want to clean up to reduce maintenance burden.

Once we do drop support it’s unlikely the Darwin team will want to devote our limited time to reviewing things related to it, so I’d expect we’d hard‐drop x86_64-darwin quickly and that it’d work about as much as any random triple configuration you can feed Nixpkgs (i.e., “if you’re an expert and have a free week you can probably get something running”). I can imagine some flexibility here if we drop full support before Apple does, however; maybe even continuing to build a handful of core packages so that the toolchain continues running, even if we stop building the entire package set. But I’m not sure how much value that would provide people in practice and it would probably send mixed messages about support that might not be helpful. Some important things like Wine still rely on x86_64-darwin for now, though, so it’s certainly possible there’d be some level of partial support, like i686-linux gets for Wine and Steam itself, if that doesn’t change before we decide to drop it.

Ultimately x86_64-darwin is going to become a retrocomputing concern within the next few years, and as much as I do appreciate retrocomputing it’s not something we have the resources to keep going. Darwin support in Nixpkgs stagnated for a few years and I wouldn’t want to see that happen again for the sake of an increasingly marginal platform. Not that I wouldn’t be delighted to see a Nixpkgs fork that brings back PowerPC too :)

(I don’t want to be dismissive of people still using the platform – I currently daily drive an Intel MacBook Pro! If I was just making decisions based on what’s convenient for me personally I’d stretch out x86_64-darwin support further, but it’s clear to me the writing is on the wall and we’re going to have to focus exclusively on aarch64-darwin in the relatively near future.)

We may want to be more explicit: x86_64-darwin support will be removed once it is no longer possible to target it using Rosetta 2 on the latest OS release (because that’s what the builders will be running).

Updated to 26.11–27.11 based on discussion with Randy on Matrix.

If the limited Rosetta 2 works with nixpkgs, we might be able to continue support until 29.11. It depends on what exactly Apple means by that, which we (unfortunately) won’t know until the first beta with of macOS 28 is released.

I don’t think that we definitely want to keep supporting it while Rosetta 2 works. Let’s say that in a year’s time the macOS 27 beta is out, and that (as I expect) indicators of Intel Mac usage seem to have dropped in response to the announcement (they’re already around the percentage of users we chose to cut off by aligning with Apple’s OS support policy). There are things other than Rosetta 2 that could make it hard to continue supporting it, e.g.:

  • New Swift release that can’t target x86_64-darwin (because Apple expects people still building x86_64-darwin binaries to be using old toolchains – hence the messaging around getting people on the Apple Silicon versions of apps) – especially if we start using Swift Build or the source releases begin to depend on it.

  • New LLVM release that can’t target x86_64-darwin – making us choose between splitting the LLVM versions and all the attendant headaches, holding back LLVM for all platforms, or dropping support. (I don’t expect this one to happen so quickly, but it’s not impossible.)

  • Source releases that expect an AArch64‐only SDK and are a pain to backport. (You did backport a lot of things for 10.12, so maybe this won’t be so bad? But IIRC you had to use a newer SDK for some of them anyway. I can certainly imagine Apple doing a spring clean for the source releases corresponding to the first OS to drop support. Are we really going to be able to maintain support in the source releases we rely on for a dropped platform for a year+, and will we really want to? The alternative is holding back the source releases for x86_64-darwin, which has its own trade‐offs; I don’t want to go back to Darwin support in general suffering because of the much less popular platform having old versions of everything.)

And there are benefits to dropping support. Hydra has been getting slower and slower with jobset growth recently and staging-next cycles are taking longer than they really ought to, which is pretty bad for keeping the channels going and making sure security updates get shipped in a timely fashion. Darwin builds are a big bottleneck there (every cycle usually ends with waiting for a whole bunch of them), and x86_64-darwin builds bottleneck Darwin builds. @vcunat has often ended up running early parts of the cycles with x86_64-darwin omitted to speed things up of late, and said that he expected dropping x86_64-darwin would help quite a bit, though I don’t know if we have hard measurements there.

I do think that we should make sure to give reasonable notice for dropping a platform like this, and 26.11 seems like the earliest release for that. But I wouldn’t want to pre‐commit to definitely continuing to support a platform that is now dying beyond that, especially since depending on Apple’s aggressiveness it’s possible that 26.11 will have to make tough decisions between dropping x86_64-darwin support and putting in a bunch of effort to patch things or letting aarch64-darwin stagnate in favour of it. It seems like a bad idea to commit before we know what the picture looks like in a year’s time. That’s why I picked the 26.11–28.11 range originally – it’s the earliest release that could be justifiable to drop it and might potentially have reasons to, and the last release that we’d support macOS 26 regardless.

I can’t really imagine a justification for making an exception to the policy of not supporting macOS releases that are out of Apple security support that we’re just enacting this release to extend support to 29.11. I’m not sure if I’m interpreting you correctly though – I thought you were saying we should commit to 27.11 as the latest release, but I’m happy to put it back to the 26.11–28.11 range if we’re not confident about that :)

@reckenrode
Copy link
Contributor

reckenrode commented Jun 11, 2025

I can’t really imagine a justification for making an exception to the policy of not supporting macOS releases that are out of Apple security support that we’re just enacting this release to extend support to 29.11. I’m not sure if I’m interpreting you correctly though – I thought you were saying we should commit to 27.11 as the latest release, but I’m happy to put it back to the 26.11–28.11 range if we’re not confident about that :)

I picked 29.11 because that would be the first version with macOS 28 (which is the first release with Rosetta 2 only for old games) as a minimum version in nixpkgs.

  • 25.11 = macOS 14 (SDKs: 14.4, 15.5, 26.x)
  • 26.11 = macOS 15 (SDKs: 15.5, 26.x, 27.y)
  • 27.11 = macOS 26 (SDKs: 26.x, 27.y, 28.z)
  • 28.11 = macOS 27 (SDKs: 27.y, 28.z, 29.a)
  • 29.12 = macOS 28 (SDKs: 28.z, 29.a, 30.b)

@emilazy
Copy link
Member Author

emilazy commented Jun 11, 2025

Fair enough, but that’d mean 28.11 and 29.05 would ship with a minimum version of macOS 27 but supporting a macOS platform that it can’t even boot on, right? That seems questionable to me. If we have to go down the i686-linux road of building a subset of stuff just for Wine running on Rosetta 2 that’s another matter, but full support in 28.11 seems hard to justify.

@bengsparks bengsparks mentioned this pull request Jun 23, 2025
13 tasks
@emilazy
Copy link
Member Author

emilazy commented Jun 23, 2025

@reckenrode I’m not sure how we should move forward with this. I’d like to get a preliminary announcement out with a range we feel pretty confident that the drop will be within. I’d be happy to revert this back to 26.11 to 28.11 if you think there’s a chance there’ll be the maintenance resources past 27.11. Going as far as 29.11 seems excessive since it seems extremely unlikely we’d want to keep maintaining it past the end of security support. 26.11 is the first release coinciding with the latest macOS dropping support and is the earliest possible release there could be things (e.g. source releases or other packages requiring the latest SDK if it drops x86_64-darwin support, changes in Swift/LLVM/… making x86_64-darwin harder to keep running) making us assess the trade‐off between the benefit of continuing support (given usage statistics and so on) and the cost of the resources it’ll take (e.g. bottlenecking staging-next cycles in Hydra, taking limited maintainer time when the latest OS can’t run on the platform, cache size growth). So I personally feel we should say 26.11 to 27.11 or 28.11 as the range where we expect some release will drop full support for x86_64-darwin, but I’m not sure if you agree or not.

@github-actions github-actions bot added the 12.approvals: 2 This PR was reviewed and approved by two persons. label Jun 23, 2025
macOS 27 is going to drop Intel support, so we’re pre‐announcing
the inevitable so that people can prepare. We don’t yet know
exactly which Nixpkgs release will drop support for `x86_64-darwin`,
but the 26.11–27.11 range, between the release of the first OS
version to not support the platform and the release of the first OS
version to not be able to fully emulate it, seems like a safe bet.

We already announced that we’re aligning our OS support policy with
Apple’s starting in 25.11, so it’s very unlikely that we could
justify making an exception to devote resources to `x86_64-darwin`
support in 28.11 and beyond, after Apple stop releasing security
updates for the platform.

However, the end of support in Nixpkgs may come sooner than that. Apple
have announced that [Rosetta 2 will be pared down] by macOS 28 to not
support emulation of arbitrary applications. We use `aarch64-darwin`
builder machines exclusively and rely on Rosetta 2 to build packages
for `x86_64-darwin`. As we try to keep the builders on the latest OS
versions, that would mean that we’d lose the ability to build for
`x86_64-darwin` around the release of 27.11, unless we held back on
updating the OS on the builders for a year.

[Rosetta 2 will be pared down]: https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment

Additionally, `x86_64-darwin` is the slowest system to build due to
our limited Mac builder resources and the emulation overhead. Dropping
support will more than double our effective `aarch64-darwin` build
capacity and benefit the whole project by reducing the bottleneck on
world rebuilds during `staging-next` cycles. It’s hard to find good
data on the relative market share, but the May 2025 [Steam Hardware
Survey] shows over 80% of their macOS users already being on Apple
Silicon. Therefore, I’d personally expect us to drop support in
26.11 or 27.11, given the trade‐off between the resources it will
take to continue supporting `x86_64-darwin` and the number of users it
is likely to benefit. (And I’m typing this on a Intel Mac myself…)

[Steam Hardware Survey]: https://store.steampowered.com/hwsurvey/processormfg/
@emilazy emilazy force-pushed the push-kwzrumnypmwl branch from d0db927 to 5fdda89 Compare August 7, 2025 14:21
@emilazy
Copy link
Member Author

emilazy commented Aug 7, 2025

After some discussion on Matrix in light of the upcoming demotion in Rust, I’ve updated the wording to be clearer about what the deprecation will mean, the potential of it happening in a staged manner, and 26.11 as the most likely release.

@nixpkgs-ci nixpkgs-ci bot added the 8.has: changelog This PR adds or changes release notes label Aug 7, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
6.topic: darwin Running or building packages on Darwin 8.has: changelog This PR adds or changes release notes 8.has: documentation This PR adds or changes documentation 10.rebuild-darwin: 1-10 This PR causes between 1 and 10 packages to rebuild on Darwin. 10.rebuild-darwin: 1 This PR causes 1 package to rebuild on Darwin. 10.rebuild-linux: 1-10 This PR causes between 1 and 10 packages to rebuild on Linux. 12.approvals: 2 This PR was reviewed and approved by two persons.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants