跳至主要内容

macOS 内核之 OS X 系统的起源

原始Link:https://justinyan.me/post/4078 

非常感謝!

 

前面的文章都在讲内核代码细节,实在有点费脑,这次我们来聊点轻松的历史故事吧。现在我们已经知道 macOS 的内核主要是由 BSD 和 Mach 组成,但是为什么是这样的混合设计呢?

Amit Singh 的 Mac OS X Internals 一书在开头就介绍了从 Apple OS X 诞生的历史,几年前刚买这本书的时候我还觉得为啥讲这么长的故事一直不进入“干货”部分。现在回过头来看,正是作者介绍了这段历史,后面内核中一些有点疑惑的地方才顺理成章。

本文主要来自 Amit Singh 书中所述,再加上我查阅的资料所写。年代久远,如有谬误,烦请诸位不吝雅正。

一、苹果公司早期(1972-1991)

乔布斯(Steve Jobs)和史蒂夫·沃茲尼克(Steve Wozniak) 1976 创办苹果公司,关于这家公司的故事已经广为流传,OS X 的诞生也与乔布斯后来的回归息息相关。我们知道乔布斯离开苹果后创办了 NeXT 公司,也知道今天我们开发的 iOS/macOS 系统跟 NeXTSTEP 系统有千丝万缕的关系。但是乔布斯一回归 NeXTSTEP 就变成今天的 macOS 了吗?并不是,历史的道路是非常曲折的。

Steve Jobs Apple II

时间回到 1977 年,乔布斯在 West Coast Computer Faire 发布了 Apple II 这款个人电脑,这是苹果公司对外发售的第一款消费级个人电脑。这款产品大获成功,也让两位创始人成为百万富翁。

1984 年 1 月 22 日,苹果在超级碗(Super Bowl)中场休息时播放了一个堪称历史经典的广告——《1984》,以此发布新产品 Macintosh 计算机。

但是在苹果公司内部,与 Macintosh 研发的同一时期,乔布斯还带领了一个团队开发 Lisa 电脑(1983 年发布)。现在我们知道这是一个失败的产品,并且乔布斯也于 1985 年被董事会赶出了苹果,后来自己创办了 NeXT 公司。

一晃四年过去,1988 年苹果的团队在开会讨论下一代操作系统应该带上什么特性。他们在白板上用三种颜色的便利贴表示不同的 idea:

  • 蓝色是对现有系统的改进,最终将合入 System 7 版本
  • 粉红色则代表革命性的特性: 面向对象特性,内存保护,轻量级多线程多任务处理等等
  • 红色是比粉红色还要革命的超前特性

当时 Macintosh 上跑的系统版本是闭源的 System 6,1988 年 4 月发布,苹果自家的很多产品都使用这个系统。在这个阶段,苹果的图形界面操作系统依然还是处于比较领先的地位,市面上有 GUI 的操作系统还不算多,做得好的更没几个。但是苹果的下一代系统 System 7 的研发却出现了问题,一连好几年没法发布。

这时候隔壁家微软已经在 1990 年发布了 Windows 3.0 (1.0 和 2.0 市场反响都一般),借此一炮而红,成为当年最流行的图形界面操作系统。

1991 年苹果终于发布了 System 7 版本,但是这些“蓝色”的 idea 不过是对现有系统的改进,并没有特别大的突破。

而微软在 Windows 3.0 成功后,又继续在操作系统上发力。当时微软内部有一个代号为 Chicago 的项目,原计划在 1993 年发布。但是项目一直延期,最终在 1995 年才终于面世。这款产品就是广为人知的 Windows 95。除了家用系统,微软在 1993 年也发布了面向服务器的 Windows NT 系统,自带网络服务, NTFS 文件系统,支持 Win32 API。

反过来看苹果,却陷入了深深的危机。1998 年开始苹果一直在探索自家操作系统未来的方向。除了已经发布的“蓝色” System 7,“粉红色”的部分苹果与 IBM 合作,成立 Taligent 公司试图研发下一代操作系统,但是该项目一直没有产出,直到最后公司被 IBM 收购也没有对外发布过任何系统。

至于更加激进的“红色”项目,代号为 Raptor,则无疾而终。个中细节在网络上未有记录,只在《Mac OS X Internals》一书有所提及。可以说 1990 年代的苹果,正在一步步走向深渊。

二、苹果在操作系统上的尝试(1991-1997)

面对微软的挑战,苹果做了很多操作系统的探索和尝试,内部开发与外部合作兼备。当时的 CPU 还不像今天基本只剩 Intel 和 AMD 两家(手机端基本都是 ARM),Macintosh 的机器使用的是摩托罗拉 68K 系列的 CPU,而 Windows 则使用的是 Intel 的 x86 系列 CPU。68K CPU 虽然能提供 Intel 486 一样的能力但是发热比 486 高,这时候如果苹果也开始迁移到 Intel 平台那可能历史就改写了。

Intel 的 CEO Andy Grove 还找过苹果,期望能让 Macintosh 支持 Intel CPU。但是当时苹果评估之后觉得 Intel 的 CISC (复杂指令集) 设计未来肯定打不过 RISC (精简指令集),所以没有投入 Intel 的怀抱。他们选择了与 IBM, 摩托罗拉合作成立 AIM 联盟,研发 RISC 的 PowerPC CPU。

1994 年苹果发布的高性能机器 Power Macintosh 首次搭载了这颗芯片,在市场上获得不错的反响,在 9 个月内卖出超过 100 万台。但是长期来看当时没有选择 Intel 是个错误的决定

2.1 Star Trek 项目 (1992-1993)

但是研发 PowerPC 的同时,苹果也没有放弃 Intel x86 架构。1992 年他们跟 Novell 公司合作,打算把 System 7 移植到 x86 架构上。苹果有操作系统经验,Novell 则有跨平台经验。但是 1993 年中,PC 价格战开始后因为业绩压力董事会把 CEO John Sculley (也就是那位著名的卖可乐的 CEO,也是他把乔布斯赶走的)辞退了,新任 CEO Michael Spindler 对 Intel 不感兴趣于是这个项目就被取消了。

2.2 Copland-Mac OS 8 (1994-1996)

Michael Spindler 在 CEO 的位子只坐了 3 年,他在职期间发布了 PowerPC 倒是挺成功的,但是后来的 Newton 和 Copland 操作系统却均是失之作。

苹果一直以来都自信自家的产品能提供远超其他产品的用户体验,但是随着 Windows 95 的发布这种差距在缩小,并且随着 PC 价格的下降苹果的性价比已然极低,于是苹果急于让自家的操作系统提供远超微软 Windows 的能力。

从 System 7.6 开始,Macintosh 的操作系统正式改名为 Mac OS 7.6。1994 年苹果宣布 Mac OS 8 将提供非常革命性的新特性,项目代号为 Copland。

Copland 的目标包括拥抱 RISC 让整个系统原生支持 PowerPC 架构,集成并改进苹果现有的技术比如 OpenDoc,ColorSync 等等。保留现有的 Mac OS 界面并提供可自定义的能力。扩展系统能力,允许跟 DOS 和 Windows 系统协作。支持多用户登录。以及一些其他革命性的特性。

一开始这个项目在公司内是非常激动人心的,1995 年还对 50 个 Mac 开发者放出了 Beta 版。但是从那以后,Copland 就再也没有更新过,也从来没有正式对外发布过。

Mac OS 8 Copland DR

当时的苹果公司以及负债累累,John Sculley 辞职的时候苹果公司还有 20 亿美元的现金与 2 亿美元的负债。到了 1996 年,有超过 500 名工程师投入到 Copland 项目中,光这个项目一年就要花去 2.5 亿美元的预算。那一年苹果亏损 7.4 亿美元,CEO Michael Spindler 被辞退,Gil Amelio 上任,该项目被正式取消。

Gil 后来在他的 On the Firing Line: My 500 Days at Apple 一书中是这样描述这个项目的:

just a collection of separate pieces, each being worked on by a different team… that were expected to magically come together somehow…

Copland 项目虽然失败了,但是它让苹果重新思考了自家操作系统的定位,同时感受到了强烈的生存危机,毕竟从 1991 年发布 System 7 到 1997 年之间,苹果一直没能发布一个正式的大版本。

此时的苹果急需寻找一款足够优秀的操作系统来拯救苹果。这时候收购一个操作系统公司的选项浮出水面。差不多是时候乔布斯要出场了,但是在他出现之前,还有另外一家公司成为苹果的候选。

三、收购与转折(1996-1997)

1996 年 Gil Amelio 上任后苹果已岌岌可危。当时考虑过跟微软合作,开发基于 Windows NT 的 Apple OS。同时也考虑采用 Sun 公司的 Solaris 系统,或者收购 Be 公司的 BeOS。

Be 公司也跟 Apple 颇有渊源,甚至有点狗血。BeOS 的创始人 Jean-Louis Gassée 曾经是苹果公司欧洲运营负责人。1985 年 Gassée 得知乔布斯准备把当时人还在中国的 CEO John Sculley 赶走的时候,通知了 John Sculley,于是 Sculley 召开了董事会讨论这件事情。当时乔布斯在苹果内部可谓是众叛亲离,这是他自己盲目自信带来的后果。当时他利用自己的权威给 Macintosh 部门很多资源,员工的收入都比隔壁 Apple II 高得多,但实际上 Apple II 才是真正贡献公司利润的部门。1985 年初连创始人史蒂夫·沃茲尼克也离开了苹果,连带着很多高层也相继离开。所以最终董事会站在 Sculley 这边,反而把乔布斯赶走了。

John Sculley 成功把乔布斯赶走了之后,就让 Gassée 主管 Macintosh 产品。1988 年 Gassée 主管苹果的高级产品开发和全球市场,有传言称他要取代 Sculley 成为 CEO。不过 1990 年他就被 Sculley 和其他董事会成员要求离职了。

1991 年离开苹果之后 Gassée 创办了 Be 公司,带走了一堆苹果员工。他们开发了 BeOS,能在 PowerPC 上跑,目标很明确就是希望苹果可以收购他们,取代前面说的已经快挂掉的 Mac OS。BeOS 的特性很多,首先可以在 PowerPC 运行,然后支持内存保护,抢占式多任务,支持对称多处理等等。但是,BeOS 当时还没有完全实现,也并没有经历过市场的考验。

1996 年苹果给 Be 开价 5000 万美元(Be 公司的总投资大约 2000 万美元),但是 Gassée 非常自信地给出 5 亿美元回价。苹果又协商给 1.25 亿,Gassée 回 3 亿,苹果再开价 2 亿,但是 Gassée 仍不接受,给了个最终价 2.75 亿。

于是交易告吹。

苹果于同年底宣布以 4 亿美元收购了乔布斯的 NeXT,1997 年 2 月正式完成收购,乔帮主回归苹果,7 月份说服董事会辞退 Amelio,自己成为公司 CEO,开启了苹果的新世纪。

四、NeXT 篇章

NeXT 的操作系统 NEXTSTEP (也写作 NeXTstep, NeXTStep) 跟 BeOS 不一样,它是经历过市场验证的。苹果当时的 CEO Amelio 还戏称这场收购是用 "plan A" 取代了 "plan Be"。

最终 NEXTSTEP 与 Mac OS 的结合诞生了如今我们使用的 Mac OS X (macOS)。不过并不是说乔布斯一回到苹果这系统就整合完了,他的回归到 OS X 诞生大约隔了 3 年。

4.1 NEXTSTEP(1985-1997)

1985 年乔布斯离开苹果的时候,带走了 5 个苹果员工创办 NeXT 公司,专做面向教育的产品。四年后,1988 年 10 月 12 日,乔布斯在旧金山市区的 Davies Symphony Hall 发布了 NeXT Computer,跑在上面的操作系统就是 NEXTSTEP。

NeXT 公司的创始团队还包括来自 CMU Mach 内核的团队的成员 Avie Tevanian。他是 Mach 内核的主要设计者和开发者之一。所以 NEXTSTEP 系统从第一天起就是基于 Mach 和 BSD 内核进行开发。当时发布的第一个版本采用的是 Mach 2.0 版本和 BSD 4.3 版本。Avie Tevanian 后来也成为苹果公司软件工程的高级 VP,2003 年当上 CTO,2006 年离职。

NEXTSTEP 系统提供了图形界面和 Unix 风格的命令行操作。可以说今天我们见到的 macOS 的很多特性都来自于 NEXTSTEP。比如说:

  • 可以 "hide" 应用窗口,而不是完全关闭
  • 在多个应用之间通过 Drag and Drop 传递复杂的对象(比如富文本和图片)
  • Service 菜单,虽然现在应该用的人不多,但是每个 App 的全局菜单下拉后都有一个 Services 的菜单,里面有当前 App 相关的 service 以及全局的 service
  • 一直都在的 Dock
  • 采用 Objective-C 作为原生开发语言
  • 带有 Interface Builder 辅助界面开发
  • 一堆开发 Kit 比如 Application Kit

1992 年,NEXTSTEP 发布了可以跑在 x86 架构上的版本。当时它们可以支持在 68K(摩托罗拉), x86(英特尔), PA-RISC(惠普), SPARC(Sun)等多种不同的芯片上运行。并且可以把多种架构的代码打包成一个 fat binary,也就是我们今天在 iOS 上常见的所谓 Universal Binary。

4.2 OpenStep(1993-1997)

NeXT 公司还和 Sun 公司合作开发了 OpenStep。这是一套能跑在 SunOS, HP-UX 和 Windows NT 上的面向对象的接口。基于这个接口,一个精简版的 NEXTSTEP 就可以跑在支持这个接口的机器上。1994 年 OpenStep 发布了第一个版本。

不过没多久 NeXT 公司就转而专注在 WebObjects 技术上了。1996 年乔布斯还在微软的 Professional Developers conference 演示了这一技术: [Microsoft Professional Developers Conference 1996 Keynote Speaker: Steve Jobs](Microsoft Professional Developers conference)

简单说这个技术就是用 Java 开发网站的技术。这里有一份官方文档有兴趣的读者可以看看。

这项技术在 NeXT 被苹果收购之后也用在了部分苹果产品上,但是从 2008 年开始就不更新了,2016 年官方宣布中止开发。据称目前还用于 Apple Store 以及 iTunes Store 的一部分,不过除非内部负责该项目的开发者,不然无从考证了。

五、Mach 的历史

我们知道 Mach 是 NEXTSTEP 以及后来的 OS X 非常重要的组成部分。它是由 CMU (Carnegie Mellon University) 开发的微内核。它的前身是 CMU 开发的 Accent 内核,Accent 的前身则是 UR (University of Rochester) 开发的 RIG (Rochester's Intelligent Gateway) 项目的一部分。

5.1 Rochester's Intelligent Gateway (1976)

1975 年一群来自罗切斯特大学(University of Rochester)的学者在开发一个智能网关系统,叫做 RIG (Rochester's Intelligent Gateway)。这个项目跑在 Aleph 系统上,这个系统跑在 Data General 公司的 Eclipse 小型机上。

这个内核的主要功能是提供 IPC 能力(interprocess communication),也就是我们常说的“进程间通信”。我们可以从 Aleph 的 IPC 抽象上看到 Mach IPC 的设计。系统采用 Message 在多个进程间传递信息,采用 Port 来对应信息的接收方。跟后来的 Mach 设计是一样的。但是当时这个系统有几个非常严重的基础缺陷,比如说:

  • 没有虚拟内存换页支持
  • 一条消息最多只有 2KB (因为当时的硬件限制)
  • 效率很低的 IPC 通信因为 message size 就 2KB
  • 没有网络设计

关于这个系统的论文可以在这里下载,有兴趣的读者可以看看。

5.2 Accent (1981-1985)

RIG 项目的其中一个成员——也是上述论文的作者之一——Richard Rashid 在 1979 年转到 CMU 当教授。在 CMU 工作的其中一个项目就是 Accent 内核,从 1981 年开始正式启动。这个内核面向的是网络操作系统。作为一个面向通信的系统,Accent 也采用了类似 RIG IPC 通信方式的设计,不过做了很多改进:

  • 支持虚拟内存,进程有 4GB 内存可供使用
  • 强大的虚拟内存管理设计,甚至连内核自身都能被换出,除了部分关键内存被 wire 到物理内存上(还记得我们之前分析内存接口的时候有一个 wire 类型的内存占用吗?)
  • Cop-onwrite 技术支持更大的消息体
  • ports 的设计具备语义性和能力描述(应该指的是后来 Mach Port 的 rights)
  • 消息体通过一个中间进程传递(跟后来的 Mach Port 设计非常像了)

看起来 Accent 比 RIG 好多了,但是这个内核设计的时候是跑在 PERQ 工作站上的。虽然它拥有很多厉害的特性但是设计的时候非常依赖硬件,也不支持 Unix 软件运行。

为了支持 Unix, Richard Rashid 开始了 Mach 项目,并于 1985 年发布了第一个版本。这位厉害的学者因为 Mach 一战成名,1991 年加入微软,后来成为微软的 VP 直到 2012 年。

关于 Accent 的论文可以到这里下载

5.3 Mach (1985-1994)

Mach 内核的设计目标之一是要兼容 Unix 系统。在这个项目启动的时候,Unix 已经存在了 15 年之久,有大量的 feature 被集合到这个巨大的内核里。

Richard 甚至把 Unix 戏称为"所有新特性或功能的垃圾场"(dumping ground for virtually every new feature or facility)。所以 Mach 项目就是要设计一个可以为其他操作系统内核基础的一个微内核,他们的目标包括:

  • 提供完整的多进程支持
  • 分离现代硬件相关架构实现代码,支持多种硬件架构。
  • 支持透明性与分布式操作
    • 原文是 Support transparent and seamless distributed operation
    • 这个我没太理解,猜测和分布式操作系统是类似的意思。理解的读者朋友可以留言指点一下。
  • 精简内核特性,降低复杂度,给出最小的抽象接口,让 App 或者其他操作系统可以在 Mach 内核上运行
  • 兼容 Unix
  • 解决 Accent 系统中的一些缺陷与不足

Mach 内核设计的时候主要 focus 在 CPU 支持与内存管理上,没有考虑支持文件系统,网络接口或者设备 I/O 接口。当初他们的设想是,真正的操作系统可以作为一个用户态的程序跑在 Mach 内核上。Mach 内核采用 C 语言开发,这意味着可以很轻易地移植到各个平台。

Mach 内核开发的时候以 4.3BSD 为基础进行开发。Richard 由于有 RIG 和 Accent 的经验,在 Mach 内核的设计上可谓驾轻就熟。1986 年正式对外发布的时候,他们在论文上称这是"为 UNIX 开发的一个新内核"。

当时选择新的 Mach 内核作为自家操作系统内核的,不止 NeXT 一家。1994 年苹果还没收购 NeXT 之前,在 Copland 项目中也用到了作为 Mach 3.0 作为系统内核。但是在对外公布的测试版中却极其不稳定。这个内核项目叫做 NuKernel,当然后来也随着 Copland 项目的结束也无疾而终。

Mach 内核的基础抽象

在前面的文章中我们也提到过 Mach 内核的一些基本抽象,这里还是简单介绍一下:

  1. task 表示一个或多个线程资源的集合,资源包括内存,ports(翻译成端口好像不太合适), CPU 核心等等。我们可以简单理解为大家熟悉的“进程”。
  2. thread (线程)是一个 task 的基本执行单元。task 负责提供线程的运行环境,多个线程共享相同的资源。这点与 Accent 不同,Process 被进一步分为 task 和多个 threads。
  3. port 跟 Accent 的 port 很像,也是一个内核维护的消息队列,用于 IPC 通信。在 Mach 里一个 port 表示为一个整数。
  4. message (消息)就是用于 IPC 的结构体,可以在不同的 task 之间通信,也可以在同一个 task 里的不同 thread 通信。
  5. memory object 可以看成是映射到一个 task 内存空间的的一个数据集合(包括文件数据)。Mach 的内存管理分为 pmap 物理内存层和 vmmap 虚拟内存层。需要 PMMU 硬件支持换入换出,现代 CPU 都集成 MMU 了,当年的 MMU 还是外置的。

当年 CMU 做了一个非常重要的决定,就是 Mach 内核开源且无任何 licensing 约束。这意味着任何人都可以免费发行 Mach 内核。

5.4 MkLinux (1996)

1996 年 12 月苹果宣布收购 NeXT 公司, 但是在那之前,2 月份苹果就已经开始了一个特别的项目:把 Linux 移植到 PowerPC 平台,让 Macintosh 机器也能跑 Linux

这个项目的产品叫做 MkLinux, 由 OSF (Open Software Foundation) 和苹果公司联合开发的,目标是让 Linux 内核跑在 Mach 3.0 内核上。

OSF 早期的成立是为了给 UNIX 系统提供一个开放标准。在 CMU 开发 Mach 2.5 版本的时候,OSF 宣布用于其开发的 OSF/1 系统,并将 host Mach 内核的未来版本。事实上 Mach 3.0 版本是从 CMU 开始,后来也是由 OSF 开发完成。当时 NEXTSTEP 用的是 Mach 2.x 内核。

1996 年在 WWDC 上苹果公司正式宣布将把 Linux 移植到 Power Macintosh 机器上,名为 MkLinux (Microkernel Linux)。

这个项目后来也随着 OS X 的整合而终止,交回给社区维护。但是这个项目对苹果整合 NEXTSTEP 帮助不小,在官方的 Kernel Programming Guide 有曰:

OS X is based on the Mach 3.0 microkernel, designed by Carnegie Mellon University, and later adapted to the Power Macintosh by Apple and the Open Software Foundation Research Institute (now part of Silicomp). This was known as osfmk, and was part of MkLinux (http://www.mklinux.org). Later, this and code from OSF’s commercial development efforts were incorporated into Darwin’s kernel.

这也是为什么我们看 XNU 代码里面,Mach 的部分都放在 osfmk 目录下。目前 MkLinux 社区也没什么声音了,最后一个发版本在 2002 年。

P.S. osfmk 就是 Open Software Foundation Mach Kernel 的缩写。

5.5 Mach 内核的性能问题

前面我们提到 CMU 开发 Mach 内核时嫌弃传统 UNIX 内核什么都干,过于臃肿。所以设计目标是要取代 UNIX,让 UNIX 跑在 Mach 内核的用户空间里。这个特性在 Mach 3.0 真正实现了。但是众所周知 Mach 内核并不提供文件系统和网络实现,所以依然需要和 UNIX 做大量的数据交换。这种交换的方式就是通过 Mach 的 IPC 通信。而让几乎所有进程都在两个空间之间做 IPC 通信是非常低效的。

所以 NEXTSTEP 系统修改了 Mach 内核的实现,让 Mach 和 BSD 都跑在同样的内核空间上,同时让用户空间发起的文件、网络请求等本来要通过 IPC 调用的接口都改成 system call。

六、OS X (1997-)

1997 年 1 月份 Macworld 上的演讲是乔布斯回归后的第一次登台,讲了一堆苹果过去十年犯下的错误之后,宣布 Rhapsody 项目,很有救世主之风。

同年 WWDC 是乔布斯第一次演示了 Rhapsody 的 demo。在他登台之后,现场响起了绵延不绝的掌声。

Rhapsody 基于 NeXT 的 OPENSTEP 开发,可以认为是 Mac OS X 的过渡产品。经过漫长的研发阶段,终于在 2000 年 12 月正式发布第一个 Public Beta 版。这期间大概的时间线是这样的:

  • 1997 Rhapsody 项目开始
  • 1999 发布 Mac OS X Server 1.0
  • 2000 发布 Mac OS X Public Beta
  • 2001 发布 Mac OS X 10.0

其中在 1999 开始开源了系统的核心部分,名为 Darwin。其核心就来自 NEXTSTEP 的 XNU,也就是 Mach/BSD 混合内核。Mach 部分更新了 OSFMK 的 Mach 3.0 和部分来自 University of Utah 的 Mach 4 项目,BSD 部分更新了 FreeBSD 项目的代码。早期苹果甚至提供了 Darwin 安装包,可以作为一个独立系统安装到 x86 和 PowerPC 机器上。不过现在只开放源代码了。

2000 年乔布斯在 Macworld Expo 上首次介绍了 Mac OS X,演讲风格非常乔帮主,有兴趣的朋友可以看看: Macworld San Francisco 2000-The Mac OS X Introduction (Pt.1) - YouTube

严格来说现在我们接触到的 macOS 内核,官方叫做 Darwin,它的核心是 XNU,可以独立安装。严格意义上 XNU 和 Darwin 并不完全相等,较真地讲 XNU 只是 Mach/BSD 部分。在前面的文章里我基本上把 Darwin 和 XNU 当做同义词,这并不严谨。但是根据我的考证,目前 Darwin, XNU 和 macOS Kernel 基本等同于一个意思,只要读者朋友不会产生歧义即可。

使用 uname -a 可以查看自己的系统版本:

Darwin xxx.local 19.0.0 Darwin Kernel Version 19.0.0: Thu Oct 17 16:17:15 PDT 2019; root:xnu-6153.41.3~29/RELEASE_X86_64 x86_64

Mach 内核最初的设计是一个微内核,但是现在 Darwin 已经是一个什么都干的宏内核(Monolithic kernel)了。在看这段历史的时候颇有一种天下大势,分久必合,合久必分的感觉。想想从 1971 年第一个 Unix 版本到现在(2019 年)已经 48 年过去了,OS X 10.0 也过去 18 年了。2016 年,苹果在 WWDC 宣布 OS X 改名为 macOS。

风云变幻几十年,既有技术的发展也有商业的博弈,很多今天看起来完全看不懂的代码,都是当年历史遗留的未解之谜。XNU 代码里的注释,也有历史的痕迹:

/*
 * Well-known UDP port, debugger side.
 * FIXME: This is what the 68K guys use, but beats me how they chose it...
 */
#define    KDP_REMOTE_PORT     41139   /* pick one and register it */

至少现在我终于明白,什么是 68K guys 了。XDDD

内核系列文章

参考资料

 


Popular posts from 产品随想的博客

产品爱好者周刊 第21期:你好,2022!

  Products 玛拉蒂家具/座椅: https://www.maratti.com.cn/ 上海的一家办公家具供应商,公司实际坐过,非常舒服 DocuSign:  https://www.docusign.com/ 给PDF电子签名,看评价有不错的声誉 https://bridges.torproject.org/ 获取Tor网桥 塞冬: https://www.zhihu.com/people/qiancai_saidong 此人的长文分析,挺有insight,来自北大 公众号平台已沉默 客观来说,韩国有什么地方超越了日本和中国? - 塞冬的回答 - 知乎 https://www.zhihu.com/question/60428819/answer/369420091 高端造船、芯片闪存、显示技术 Design 折叠屏设计的一些思考: 10多年前互联网的网站设计: https://mp.weixin.qq.com/s/OdFjta4Wetp1p67bRrmYqw https://archive.ph/TdI1L Business & Market data 未来人口四倍于中国的非洲,我们该如何面对: https://mp.weixin.qq.com/s/7V2IgW3db1uRR3_wa8S1OQ 在数十年后,非洲也会是类似于印度、东南亚那样的机会 周深在节目中唱歌:一般2首,120W+ 一个有些违反认知的事实是,1966年的上海综合工业实力媲美台湾、香港。 https://metrics.torproject.org/userstats-relay-country.html Tor的运营系列数据 牢记:中国还是一个人均中位数年收入只有2.2万元、90%的三口之家年收入低于20万、20%的三口之家年收入低于1万8的发展中大国。 全国人均GDP尚未达到1万美元(欧洲落后地区水平),最富裕的京沪人均GDP也刚摸到2万美元门槛(欧洲中等偏下水平) 美国家庭收入中位数是42万人民币(税前),家庭税前年收入75万人民币可以打败3/4的美国家庭,120万可以打败90%,160万可以打败95%(2017-2018,基于2014美国普查数据预估,如下图) 超低生育率养成记:  https://mp.weixin.qq.com/s/C80z...

树莓派打造淡入闹钟,让电台轻轻的叫你起床

 原文地址:https://www.hscbook.com/article/raspberrypi-alarmclock/,对作者表示感谢 16年入了一个树莓派B+版折腾了一下就放在角落里积灰了,我这天天总睡懒觉的人被冰冷的闹钟吓得激醒是非常痛苦的,某天打扫房间发现了被我打入冷宫的树莓派就顺手拿出来打造成淡入闹钟+晨起天气预报+晚间电台播放。 简介 · 早上7点定时从低音量的 青苹果 电台(早上电台没有节目,只有音乐)逐步提升音量轻轻的音乐声叫你起床,3分钟后语音播放今天的天气预报,一个小时后结束播放。 · 晚上10点开始低音量播放 青苹果 电台(现在电台播放情感节目)提醒你准备碎觉了,最后一个小时候结束播放并对你说声晚安! 准备工作 必要材料 1.男/女,聪明大脑一块 2.五指手一双 3.能上网的树莓派一个 4.音响一套 安装树莓派系统 本文采用的是树莓派官方指定系统,小白of圣手党推荐使用好方便照葫芦画瓢是吧。 这里就不教了,网上一搜一大堆的教程。 ·  百度经验 ·  树莓派入手体验和系统安装 ·  树莓派入门之装系统 安装必要程序 Vlc 播放器 执行 sudo apt-get install vlc Mplayer 播放器 执行 sudo apt-get install mplayer Cron 计划任务 执行 sudo apt-get install cron 开始部署 获取代码 下载我上传的代码  Github   Coding 将 Morning 文件夹上传到树莓派的 Home 文件夹里 修改文件 申请和风天气KEY  申请地址 ,申请百度开发者语音转换a/s key  申请地址 修改 Morning/weather.py 文件第31/65行处的“和风天气KEY”替换为你的和风天气KEY 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 ... else : fp = open(fn, 'w' ) url_city = 'http...

产品随想 | 周刊 第40期:献出心脏,直到高墙倒塌

标题来自本期的一个链接,觉得充满理想主义,献给大家! Products Movie Robot   https://github.com/pofey/movie_robot 定时自动从豆瓣电影的想看、在看、看过中获取影音信息,然后去PT站(支持多家站点)自动检索种子,找到最佳资源后按豆瓣电影分类提交到BT下载工具下载。在下载前,会自动检查你的Emby中是否已经存在。 工具超赞,一次搭建,可以很长一段时间躺平,但针对我这样对4K、HDR有高要求用户,可能不大行 Plash   https://github.com/sindresorhus/Plash Make any website your Mac desktop wallpaper 将任意网站,定义为Mac桌面 https://github.com/sindresorhus/Plash/issues/1,网友给的一些网站,也比较有意思 HomeBank   http://homebank.free.fr/zh/index.php 自由、开源的会计软件 GnuCash   https://www.gnucash.org/ https://github.com/Gnucash/gnucash 自由开源,多平台的财务软件,且有很好看的官方App,since 1998 beancount   https://github.com/beancount/beancount Beancount: Double-Entry Accounting from Text Files. 纯文本的复式记账工具 rimerc: rimer's dictionary & config   https://github.com/Bambooin/rimerc Rime输入法在各个平台的配置 Natural Selection Labs   https://github.com/NaturalSelectionLabs DIYGod主导的聚焦Web3的项目,非常有雄心,保持关注! PineTab   https://www.pine64.org/pinetab/ The Open Source ARM 64-bit Tablet 自由开源的64位平板电脑(在28...

产品爱好者周刊 第7期:1984

 产品爱好者周刊 第7期 Products Procreate: 艺术创作App https://procreate.art/ 与iPad, Apple Pencil搭配,可以创作出十分绚烂的画作 Callin: a social podcasting app. iPhone only for now. 创始人是PayPal的COO,红杉A轮 The Motley Fool:  https://www.fool.com/ 查看公司财报数据电话会议纪要 Pantherbar Windows上的PopClip Rivos Inc:  https://semianalysis.substack.com/p/rivos-inc-a-chip-off-the-old-block 一家RISC-V创业公司,创始工程师团队非常豪华,都有几十年的芯片设计经验 BackUp: https://archive.md/79FWx https://poet.so/ 将Twitter转换为好看的截图(预设模板) Ventoy: https://github.com/ventoy/Ventoy U盘启动制作工具,几乎能启动所有的系统 Thread Reader: https://threadreaderapp.com/ 能将Twitter Thread转化为一个完整的网页Link,以方便按顺序查看 可以通过在Twitter里@+unroll,来触发,会得到一条私信链接 Design 台积电发展历程的可视化: https://theinitium.com/project/20210915-project-taiwan-tsmc-semiconductor-history/ 端传媒可能是最好的中文互联网媒体了 News Privateer Space:Steve Wozniak准备新开的太空公司,充满期待,这是一个热爱开源、分享的技术大师 https://www.businessinsider.com/steve-wozniak-privateer-space-company-elon-musk-apple-cofounder-2021-9 Ideas Apple's Mistake:  http://paulgraham.com/apple.html 备份链...

Steve Jobs on the iTunes Music Store: The Unpublished Interview

A candid talk with Apple's CEO on a landmark day in its history. By Laura Locke  |  Wednesday, December 7, 2011 at 1:15 am Steve Jobs announces the iTunes Music Store. On April 28th, 2003, moments before I was about to interview Steve Jobs at San Francisco’s Moscone Center, I was jittery. Anticipation? Nerves? Excitement? You bet. All of those visceral emotions were firing. Knowing Jobs’ storied reputation as an irascible and exacting Silicon Valley CEO had me on edge. But I had prepared a tight set of questions. Secretly, I was hoping he might enjoy the line of inquiry. In turn, I would have a lively and candid report for my editors at TIME. What I didn’t know was that the interview was taking place on what would turn out to be one of the most important days in Apple’s history: The launch of the iTunes Music Store. Once again, Ste...

2018各行业应届生薪资不完全样本往期汇总-职场红领巾

文章来源自职场红领巾公众号2018.4.21日推送,在此表示感谢 产品岗 百度商业产品 14K*14 拼多多产品管培 12K*14 今日头条产品 16K*18 头条PM整个Package接近300K/年 美团产品Offer 14K*16 base上海 百度产品研究生 11.5K*14.6 base 上海 京东产品17K*13 百度产品 220K/年 网易 产品培训生 硕士 15K*18 SP base杭州 不知名互联网公司校招PM 12K*15 base北京 技术岗 微软 软件工程师 本科 260K/年 蚂蚁金服算法工程师 20K*16 拼多多开发本科400K/年 商汤科技本科技术岗 14K/月 税前 海康威视研究院 算法工程师 220K/年 微信算法岗 SP 360K/年 的package 今日头条 程序员 研究生 10K/月 base北京 滴滴程序员 16K*16 亚马逊 小四年经验 研发 50K/月 Facebook应届毕业生  软件开发工程师   打包 115k$/年(30%-40%税) base湾区 京东算法 普通Offer 234K/年 运营岗 滴滴北京运营岗 硕士 12K*15 奖金另算 网易游戏运营 150K/年 左右 网易运营 8K*13(奖金0~3个月) 网易新闻运营8K/月 腾讯游戏运营 本科6K/月 上海京东时尚本科8K/月 京东运营岗 11K/月 base北京亦庄总部 今日头条 渠道营销运营 6K/月(加房补) 网易考拉 活动运营 13K*16 OFO城市运营管培13K*14 爱范儿运营 8K/月 滴滴长三角某二线城市运营管培生 薪资 7.6K*13 +每个月40%绩效 货车帮 数据运营 12K/月 卡宾电商 管培 10K/月 含浮动绩效 曹操专车 运营管培生  加各种补贴税前5.4K/月  base杭州 京东金融海龟回来8K/月 北京蓝港互动...

万物皆可RSS

All Credit to: 原作标题:可能是目前最全的RSS订阅源了 原作链接:https://www.runningcheese.com/rss-subscriptions 以下为节选: 一般网站和博客: 1). 通常在顶部菜单、右侧菜单、底部菜单等地方会有RSS图标。 2). 如果没有,可以尝试在网站地址后面加上/rss或者/feed,有时会出现在二级域名里。 3). 如果还没有,可以使用奶酪制作的小书签来自动查找RSS订阅源, 订阅到Feeder  , 订阅到Inoreader , 订阅到Feedly 4). 如果还是没有,可能网站没有提供RSS订阅。可以借用  Fivefilters.org  或者  Feedity.com 来制作订阅源。 5). 对于一些只提供了摘要RSS的网站,可以使用  FeedEx.Net  来制作全文RSS。 论坛: 一般会有 RSS 图标,如果没有,在网址后面加上 ?mod=rss。 比如网址  http://bbs.kafan.cn/forum-215-1.html ,其 rss 地址为  http://bbs.kafan.cn/forum-215-1.html?mod=rss 微博: https://rsshub.app/weibo/user2/博主ID,比如  https://rsshub.app/weibo/user2/1195230310 微信公众号: 在  瓦斯阅读  搜索要订阅的公众号名称,就会有专门的RSS订阅地址。 简书: https://rsshub.app/jianshu/user/作者ID,比如  https://rsshub.app/jianshu/user/yZq3ZV B站: https://rsshub.app/bilibili/user/video/UP主ID,比如  https://rsshub.app/bilibili/user/video/2267573 贴吧: 精品贴订阅:https://rsshub.app/tieba/forum/good/贴吧吧名(支持中文),比如  ht...

树莓派3开无线热点变身为智能无线网关(IPv4+IPv6)

原文地址 树莓派3开无线热点变身为智能无线网关(IPv4+IPv6) ,对作者表示感谢 无线上六维不是梦,折腾了两天终于终于弄好了~撒花~ 这个暑假一直在外实习,回到学校发现实验室已经没有了我的位置。。悲催的被赶到另一个实验楼,这个实验楼主要放的是各种服务器,因此IP比较紧张,以前我自带一个交换机,IP地址随便用,而且都是有线,IPv6默认都可以用,但这边我只分得一根网线,只有一个固定的IPv4的IP,倒是IPv6没有限制(不过后来测试发现还是有些限制)。对于我这么多设备根本不够用嘛。正好看到树莓派3上市了,自带wifi,CPU升级到A53,是服务器级的U了,立刻买了一个回来,当作我的网关。 这里我用树莓派搭的其实是一个NAT的路由器,把WAN的ipv4和ipv6都共享给内网LAN ,由于是在学校,我的IPv4的地址是固定的,而IPv6的地址动态分配(前缀是固定的),所以不要盲目跟着教程做。这里使用的树莓派是3代树莓派,系统是2016-09-23的raspbian jessie,板载wifi,不需要考虑驱动的问题,如果不是,那么先自行解决驱动问题,这里WAN外网是eth0,LAN内网是无线wlan0,如果接口不一致请自行替换,后面不再做解释。 准备工作 整个过程分为两步,先开IPv4的热点access point,再共享IPv6的热点access point,热点都不是采用bridge方式进行的连接。 固定IP(IPv4) 后面的树莓派默认使用dhcpcd进行ip的配置,因此网上好多关于配置树莓派固定IP的方法都是有点问题(很早的时候是配置/etc/network/interfaces), 我们现在配置dhcpcd的配置文件进行固定IP的配置 ,打开配置文件/etc/dhcpcd.conf 1 sudo vim /etc/dhcpcd. conf 里面内容不少,感兴趣可以查一下,这里直接拖到最下,根据自己的情况加入下面的内容 1 2 3 4 interface eth0 static ip_address= 211.187 .224 .79 / 24 static routers= 211.187 .224 .16 static domain_name_servers...

产品随想 | 周刊 第103期:站在艺术和科学的交会点

"If work is to become play, then tools must become toys." 30-plus years of HyperCard, the missing link to the Web   https://arstechnica.com/gadgets/2019/05/25-years-of-hypercard-the-missing-link-to-the-web/ 其中最宝贵的是这句教训:"I grew up in a box-centric culture at Apple. If I'd grown up in a network-centric culture, like Sun, HyperCard might have been the first Web browser. My blind spot at Apple prevented me from making HyperCard the first Web browser." MOVIE-WEB   https://github.com/movie-web/movie-web A small web app for watching movies and shows easily 随机搜索了下,命中率非常高,很好用诶 LunarBar 的开发   https://github.com/LunarBar-app/LunarBar/blob/main/DEV.md 用心的文档,能够看到 NeXT HQ   https://allaboutstevejobs.com/pics/pics_places/next/next_hq 可惜没有看到传说中的悬浮楼梯 Peter Q. Bohlin   https://en.wikipedia.org/wiki/Peter_Bohlin?useskin=vector 这位居然参与了这么多Apple Store的设计!!! The San Remo's board voted in 2000 to impose a six-month time limit for apartment renovations, imposing heavy fines on resid...

[海外建筑生活] MIT建筑系

原文链接: [海外建筑生活] MIT建筑系 发表于:寄托天下 2009-1-18 作者:dadazhe 前些日子和版大聊天,他让我写点关于mit的情况. 趁着寒假的尾巴,随便介绍点. mit的建筑系分为marchI marchII 和Smarch, 分别是三年半,两年半和两年. 前两这都是naab认证的,也就是说毕业以后可以考注册建筑师. smarch比较特殊,分为五个方向,你必须选择一个,分别是 urbanism, computation, theory&history, building technology, visual arts.