Apple is unwilling to publish the source code of proprietary non-Darwin applications and libraries in their OS. GPLv3 enforces copyleft upon anyone who links to a GPLv3 application. There is a risk that simply including or using bash4+ could infect the system with GPLv3 compliance requirements, forcing Apple to publish their proprietary source code. To Apple, this is likely seen as an unacceptable risk no matter the cost and therefore bash is replaced with zsh. I expect them to warn about removing bash in five or ten years or so.
EDIT: Linux is GPLv2 only and does not accept GPLv3 submissions. It is likely that your question can be restated as “Why are GPLv3 programs able to use syscalls in Linux without infecting the kernel with GPLv3 compliance requirements?”, and this is likely due to the clearly declared syscall exception as noted in their licensing docs:
I think it's not only about their proprietary source code, but also about restricting code that can run on your computer. Newer Macs have trusted boot, where the T1 / T2 coprocessor makes sure that system software has not been tampered with before booting. And every release seems to go further into the direction of verifying the code you execute.
As far as I understand it, if the GPLv3 clauses would apply, Apple would have to allow anyone to run their own, modified version of macOS on their computer, meaning Apple would need to provide a way for people to circumvent / disable all the secure boot architecture.
Also, things like "Activation Lock", where Apple requires your Apple ID password to re-install the OS (a theft protection feature) doesn't sound like it would be easy to reconcile with GPLv3.
I think they already allow modifications? Apple lets you disable System Integrity Protection [0], after which point you can make any modifications to the system. Only the T2 supports Secure Boot and it can also be disabled [1].
"Activation Lock" is an iOS thing. On Macs you can set a firmware password [2], but I don't see how that would conflict with GPLv3.
If a judge and jury find that the T2 chip, macOS, and bash4 were all integrated components of the software package “macOS” for the purposes of GPLv3 copyleft provisions, then Apple would be forced to share the source code of all software running on the T2 chip as well as all software it bundles with macOS.
While we can armchair legal this in either direction on how likely that judgement would be, they appear instead to have decided to never permit that risk to occur at all. I approve, too: if you don’t want to share every bit of source code in your product, don’t use GPLv3 in your product. It’s explicitly meant to be annoying like that, and any plausible effort to have your cake and eat it too risks being overturned by a court of law.
> There is a risk that simply including or using bash4+ could infect the system with GPLv3 compliance requirements, forcing Apple to publish their proprietary source code.
This seems dubious, since the FSF themselves make the statement that aggregates of differently licensed software are fine, as long as you comply with GPL for the GPL-licensed parts: https://www.gnu.org/licenses/gpl-faq.en.html#MereAggregation
> But if the semantics of the communication are intimate enough, exchanging complex internal data structures, that too could be a basis to consider the two parts as combined into a larger program.
All of macOS, since 10.0, is built on ever-more-interlocking systems of ‘intimate’ communication. As upthread points out, there’s a hardware chip that uses IPC to interlock with SIP to protect system files. The depth of IPC used to deliver a Macintosh appears to qualify the entire shipping OS for the “larger program” clause.
Setting IPC aside, it’s still easy to construct a case against GPLv3: If bash is included in an operating system release that can be downloaded like any other program on the Mac App Store, then it’s absolutely plausible to a layperson that the inclusion of GPLv3 in that program would - like any other program - infect it in its entirety with GPLv3’s copyleft requirements. macOS isn’t an aggregate software repository to its users, and a judge could easily be convinced to agree.
I’m not Apple’s lawyer, but I hope this helps convey what I imagine is part of their reasoning against it.
That's really not different at all from any other operating system. The "laypeople" in court have previously been perfectly able to consider even highly integrated OS components as separate from the whole - such as Internet Explorer in the case of the big old Microsoft antitrust lawsuit.
I think that a more likely reason is that Apple have plans for macOS that wouldn't play well with GPLv3's anti-Tivoisation measures.
At least we get diversity in our shells. I quite like that, it reminds me of the UNIX days when every OS was slightly different at the shell level, with different command line options for simple commands in Solaris/IRIX/HP-UX and those myriad of different IBM systems.
Can't have it too easy, can we? Or else anyone would be able to do our programmer jobs!
> Why are GPLv3 programs able to use syscalls in Linux without infecting the kernel with GPLv3 compliance requirements
Shouldn't this be the other way around? The concern would be with non-GPL programs making syscalls and getting infected with a GPLed kernel. The kernel isn't at risk of being infected.
I’m much more paranoid about GPLv3 infecting other code over an API than I am about GPLv2 infecting other code over an API, especially now that Linux has a clearly-crafted “no copyleft shall pass” fence erected on its syscall API.
OK, but how could the kernel possibly get infected? When you publish an API your code doesn't get infected by the viral licenses of anyone who writes code against it. That doesn't make sense.
What is wrong with GPLv3 for Apple and why is it okay in Linux?