New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
darwin.apple_sdk: update to 10.13 #46699
Conversation
cc @copumpkin |
Only updating the sdk isn't an option because CoreFoundation is still at 10.10, but @copumpkin has made some pretty exciting progress there recently. |
I haven't figured out exactly how it all connects together, but there's two different CoreFoundation right? An impure one and a pure one. I assume the impure one is this one, from the SDKs, and the pure one is one built from source? Are you saying we can't update the frameworks because they'd use the 10.10 CoreFoundation that is still from source? |
@uri-canva thanks for the contribution! I'd take a look at #37403 since @matthewbauer also tried something similar. Since then he's added a package for
In short, changes like this have far-reaching implications and touch a bajillion packages, so we have a fairly high bar for merging them. So just to set your expectations, I wouldn't expect this to get merged in the next few weeks (because of 1 above, and because I'll be on vacation for a couple of weeks starting next Saturday) unless one of the Darwin maintainers suddenly has far more free time than we normally do 😄 |
Also, to answer your specific question: yes, there are two |
I introduced |
While it may be true that newer SDK will break things, it is usually really obvious looking at Hydra. Making breakages reproducible means we can just revert the bad commit. This is one of my favorite things about Nix! I would shoot for using 10.13 SDK TBH. Apple is usually pretty good at not breaking old code so I think it should be okay. I know of a few things introduced in SDK that is already being used in the wild. Plus if anyone wants to use older macOS versions, they can just use the 18.09 or 18.03 channel. That can just be in the release notes. |
Thanks for the clarifications @copumpkin, that helped. I was also a bit uncertain whether it would be better to update the stack from the bottom up when I added I will work around the need for an updated Apple SDKs in #46700, so it's not blocked.
This is related to the impure CoreFoundation right? Because if the whole stack was pure it wouldn't matter at all what version the host macOS was, since everything would be built by Nix? Or is this about source compatibility of the derivations? |
Was hoping that this patch would fix issues I'm having with |
@lionello because that stuff is governed by a completely separate set of packages in apple-source-releases. This is only used as a last resort. The apple-source-releases thing was the next thing I was going to look at, although I'm going on vacation soon so might not get to it for a bit. Out of curiosity, what's missing in 10.11.6 that affects coreutils? We've been intentionally hiding some comparatively new symbols for libsystem in particular because we want to remain compatible with the last 3 or so major macOS revisions, so even if we update libsystem you might not get what you want for a while. |
|
Ah, so it looks like Basically, the issue we're guarding against is that The other option would be to somewhat purely "fork" our stdenv for each major macOS version, but it would mean a massive amount of rebuilds (and we're already pretty short on Mac builders) for comparatively low benefit, since the only real differences arise from subtle symbol changes in libsystem. |
Thanks again for all the context, it's been very helpful. |
Motivation for this change
10.10 SDKs don't support type arguments in Foundation classes, leading to "type arguments cannot be applied to non-parameterized class" errors.
Based on 377cef8.
WARNING:
This will cause mass rebuilds on Darwin, and should be merged into staging I think, rather than master, please advise whether I should submit the PR against staging instead (it has merge conflicts between master and staging so if I submit it against staging it won't apply cleanly on master and vice versa).
Things done
sandbox
innix.conf
on non-NixOS)nix-shell -p nox --run "nox-review wip"
./result/bin/
)nix path-info -S
before and after)