苹果为什么只开源 OS X 的内核,而不开源 GUI?
来自知乎 @ibuick 的回答:
1. GUI 开源的后果就是你以后就能看到各种“自主知识产权”的,长得像 OS X 的 Linux,以及其他各种不知所谓的 Mod。更为重要的是,那时候开发一个 GUI 的 Hack 更为简单,比如你现在在 Bartender 里看到的那样,那时候不再费劲吧啦的反相工程,可以直接写出 Menu Extra 的替代品。到那个时候,系统各类毛病铺天盖地,OS X 长的五花八门,这也是 Apple 不愿意看到的。值得一提的是,OS X 桌面环境在操作系统里面算是领先的,这东西舍得开源么?一旦开源,连带 iOS 的好多东西都暴露出去了,得不偿失。
2. 驱动程序是不开源的,但是驱动框架 IOKit 是开源的。IOKit 的一个好处就是它是个 OO 的框架,你可以直接通过继承获得你想要的特性而不必从头开始。
3. GUI 层又称 Aqua 层,基于 Cocoa,在系统的架构的最顶端,也是直接面向用户和大部分应用程序开发者的层面。当然了,OS X 还支持 X11,如果你说这个的话,这东西是开源的。
4. IOKit 在 Mach 层,如果你有一点了解,OS X 剥离 Cocoa ,Carbon 相关的东西,剩下的叫做 Darwin,这是个 Unix 操作系统。OS X 之所以能够通过 SUS 认证,Darwin 是关键,这里包括 POSIX 兼容,Unix 线程,进程实现。它的内核叫做 XNU,这是个混合内核,XNU 包含两个部分,BSD 和 Mach:BSD 实现了POSIX,Networking,Filesystem 等,而 Mach 实现了最为基本的多处理器支持,虚拟内存,分页,调度,IPC,RPC 等。在 Mach 的基础上,就是 IOKit 和各类 Kext 了。整个 XNU 部分,跑在内核态。
5. Linux 我不懂,不过它原来是个 Monolithic 巨内核,这个跟 OS X 有很大区别,不知道现在什么样子。它这种实现性能要好一些。
推荐你看几篇文章: