5 ms·
TL;DR "GCC is licensed under the GPL license. clang uses a BSD license, which allows it to be used by projects that do not themselves want to be GPL." For exa
by CalChris 6y ago
TL;DR
"GCC is licensed under the GPL license. clang uses a BSD license, which allows it to be used by projects that do not themselves want to be GPL."
For example, Apple can keep their internal backends (GPU, some ARMv8 details) proprietary.
- spijdar 6y agoInterestingly, I've seen some internal Apple stuff get sent upstream to LLVM. One example is ILP32 support for AArch64, which is apparently used in the Apple Watch. It looks like all of Apple's modern SoCs are 64 bit only, and in order to reclaim some memory on constrained devices, they're using ILP32 and a 32 bit address space, with 64 bit registers and such. https://lists.llvm.org/pipermail/llvm-dev/2019-January/129788.html https://lists.llvm.org/pipermail/llvm-dev/2019-January/12978...
- ender341341 6y agoIt's honestly not that surprising, keeping the difference between their fork and upstream minimal makes it easier for them, so for things that they don't consider to be their 'secret sauce' it's easier to have the community involved in maintaining it (and everybody ends up winning).
- CalChris 6y agoYes, but that is Apple's choice rather than a licensing requirement. Apple upstreams a ton of stuff, AArch64, GlobalISel, .... But they do this by choice.
- tinus_hn 6y agoSure, but integration like llvm is integrated in Xcode would be impossible without open-sourcing Xcode.
- saagarjha 6y agoThey get upstreamed for the most part, just very slowly. There's a lot of pointer authentication stuff shipping in their toolchains currently that isn't upstream.
- arp242 6y agoIt's not just Apple that was rather miffed with gcc around that time; and it really wasn't just because of the license. See e.g. https://undeadly.org/cgi?action=article&sid=20070915195203#pid_52 https://undeadly.org/cgi?action=article&sid=20070915195203#p...
- mshockwave 6y agonot really...Apple upstream most of their AArch64 backend implementation, just like PlayStation upstream most of their (PS4) toolchain code. The rationale behind this is that maintaining a separated downstream actually has a (surprisingly) high cost.