某乎大牛就系统原理问题撕逼全纪实

转自知乎答主:李方权,谢之易,侵删。

作为一名系统原理小白,免费上了一堂系统课。

起因:李回答了一个“为什么说雷电OS不是一款OS?MIUI是吗?”的问题,谢在下面有了自己的一个回答。于是,开始了一场漫长的“撕逼大战”。

个人认为李稍有抖机灵嫌疑,但也是有真材实料的,谢稍强,见仁见智。

 


谢之易:

 

MIUI 如果把不是他们自己做的部分拿掉,也就不能算一个OS 了。严格来说 Android 都很难算一个真正意义上的 OS。

 

李方权:

 

你这说法有点逗,那请致电苹果,要IOS和OS X不要使用UNIX内核,不要套用BSD,要么就别说自己是OS。照你说法,世界上根本没有Linux操作系统,因为目前的各发行版都是使用的Linux内核开发的软件套装而已。要说OS,常见系统中,怕也就只有微软的Windows因为使用的是自家的WindowsNT内核能被你认为是个OS了。

 

谢之易:

 

iOS 和 OS X 并没有使用 UNIX 内核,也没有套用 BSD。这两个系统的内核的前身是 NeXT OS,一个 UNIX-like 的系统,而 NeXT OS 的内核的前身是 CMU 大学的学术作品 Mach Kernel,同时系统接口部分引入了一些BSD 的库和 user space 代码。苹果拿起这些东西之后又做了很多工作,才形成了今天的 iOS 和 OS X,所以称之为苹果自己的操作系统是完全正当的。

 

Linux 本身也确实不能算一个完整的操作系统,严格来说它只是一个内核,系统接口部分实际上来自于 GNU 社区的贡献,所以开源社区也经常使用GNU/Linux 这个说法来指代一般人所说的『Linux 操作系统』。至于各个发行版,更加只是 GNU/Linux 这个操作系统的不同包装而已,发生版本身是不能称为操作系统的,就像我们不会说 Ubuntu 是一个操作系统一样。Android能不能算一个操作系统有点模糊,它的内核基本上是 Linux,不过 Google 做了很多工作避免 Linux 本身的 GPL 授权『污染』设备驱动这一块的代码,免除了很多公司商业上的顾虑,今天才能这么成功。拿 Java 虚拟机取代部分系统接口的工作也是比较实质性的。

 

MIUI 的话,据我所知,他们对 Android 系统本身没有做多少更改,基本上是在 Android 系统基础之上做了一些定制(有一阵子没关注了,情况若有变化烦请告知),是不能被称为操作系统的。这一点你从 MIUI 自己系统里还要报告 Android 版本号这一点就能看出来。

 

雷电 OS 这种恶劣货色我就不评价了。

 

李方权:

 

有点我不懂,Linux发行版使用Linux内核不叫操作系统。那Mach Kernel也不是苹果开发的啊,苹果拿别人的内核用别人的库,修修改改自己做了一套壳,那它和Linux的发行版性质上有什么区别,为什么OS X能叫操作系统Linux发行版就不能???你这不是双重标准么?

 

谢之易:

 

因为苹果不是『拿』别人的内核用,苹果(以及之前的 NeXT)是在 Mach 内核的基础上自己进一步开发,增加新特性支持新硬件删除旧代码。这么多年下来,OS X 内核里面当初 Mach 的代码只怕是都不剩几行了。所以我们可以说 OS X 是一个新的操作系统。

 

相应的,各个 Linux 发行版,比如 Ubuntu,那是真的直接『拿』GNU/Linux 过来用,核心和外围的 GNU 库基本不动,主要的贡献都在整合现有的软件使之对最终用户更加友好上面。所以大家说 Ubuntu 是 GNU/Linux 的一个发行版(distribution),而没有人说 Ubuntu 是一个新的操作系统。

 

MIUI 干的事情和 Linux 发行版类似,也是直接『拿』Android 的系统过来用,功夫下在整合外围的应用上。和 Linux 发行版相比,MIUI 对系统的修改可能多些,但是并没有达到质变的程度。

 

李方权:

 

不赞同你所说的苹果改了内核很多的说法,有原因的。

 

OS X使用的内核准确的说应该是XNU,一个由Mach加部分BSD代码发展而来的混合内核,其本质任然是Mach,我以前好奇试过给自己的联想装黑苹果,经常五国,找不到内核是比较常见的错误,而错误的提示上有非常明确的指出内核名称是Mach,你去百度上搜一下“mach_kernel”全是和装黑苹果相关的,苹果如果真如你据说已经把Mach的代码改的都没剩几行了,已经质变了,怎么会连内核名字都不改??名字都不改只能说明苹果自己也认为它根本就没动到Mach的核心代码,只是简单的封装了一下而已,没有改变Mach的本质。

 

还有,你对Linux的认识更是让人不敢苟同,你真的以为发行版就只是做做应用集合就完啦?你应该不知道Linux发行版其实可以分成几大分支吧,它们除了内核是一样的,对系统的管理甚至执行方式都是有很大差距的。根本不像你说的那样好像是随便凑一凑就能用这样。

 

谢之易:

 

你既然都知道 OS X 的内核是 XNU / Darwin,为啥还会以为它的本质还是 Mach?要知道 Mach 是个源自学校的学术性项目,最大的特点是微内核架构,核心模块之间的通信依赖 IPC,核心代码尽可能地放到 user space 去运行。XNU / Darwin 把这个基础结构都改了好么,把很大一部分核心重新改成宏内核结构回到 kernel space 运行,以过程调用来通信。这种情况下你说 XNU / Darwin 『根本没动到 Mach 核心代码』?就因为苹果保留了 mach_kernel 的文件名?太荒唐了吧?

 

Linux 的发行版分支多了去了,只要它们都还用的Linux kernel + glibc,就只能说是 GNU /Linux 的一个发行版而非一个操作系统。这并非是轻视制作发行版的技术含量,但是一码归一码,应用层面再有技术含量的工作,也不能被当做一个操作系统。

 

李方权:

 

首先,苹果将Mach微内核改成XNU这个混合内核并不能说明它在根本上对Mach做出了改变,调整的成分居多,但这个问题不太好界定,我们就不讨论这个了,我们换个思维方式。

 

首先,硬件需要有个操作系统才能正常工作这个你没意见吧。按你的说法,Linux只是内核,Ubuntu之类的发行版只是个软件套装。那请问,我家这台装着Ubuntu的笔记本使用的是什么系统?照你的说法,我这电脑上就没有系统,如果是我理解错了你的意思,那请你告诉我,我电脑的系统叫什么名字。

 

我还是认为,一个系统最重要的定义就是,它能否独立的驱动硬件正常工作,能达到这个目标的都叫操作系统。而以目前的技术架构,内核+系统调用的方式是比较主流的。一个软件套装如果都包含切实可用的内核和系统调用即可称为系统,不论技术来源。

 

谢之易:

 

『首先,苹果将Mach微内核改成XNU这个混合内核并不能说明它在根本上对Mach做出了改变,调整的成分居多,但这个问题不太好界定,我们就不讨论这个了,我们换个思维方式。』

 

这位知友,前面我已经说过了,XNU 相比 Mach,在基础的结构上都做了重要的改变。如果你不清楚微内核变成宏内核这个区别有多大,可以去选修一门操作系统的课程,或者在知乎上另外提问。非要把这个级别的变化说成『调整的成分居多』,属于信口开河了。

 

『首先,硬件需要有个操作系统才能正常工作这个你没意见吧。按你的说法,Linux只是内核,Ubuntu之类的发行版只是个软件套装。那请问,我家这台装着Ubuntu的笔记本使用的是什么系统?照你的说法,我这电脑上就没有系统,如果是我理解错了你的意思,那请你告诉我,我电脑的系统叫什么名字。』

 

你的笔记本安装的是 GNU/Linux 操作系统,使用了由 Ubuntu提供的分发安装工具和一些附加服务。

 

回过头去看看你自己的主答案,你这个回复已经和原来的答案渐行渐远了。按照你这个回复的逻辑,哪天雷电 OS 把 MIUI 的 ROM 直接拿过来打包在一起可以直接在小米手机上安装,是不是就能自吹『雷电 OS 是一个完整的操作系统』了?

 

李方权:

 

XNU不是宏内核,是混合内核,其整体上看起来像是单内核,但其本质仍然是偏向于微内核,所以我才说苹果只是调整居多,它没你想的改变那么大。

 

那问题又来了。以你的理论,GNU/Linux是不是个操作系统?

 

要知道Linux内核所有权是Linus Torvalds,而其上的软件套装来自于GNU组织,他们的技术来源不同,以你的理论GNU/Linux也同样不是一个操作系统。

 

谢之易:

 

『XNU不是宏内核,是混合内核,其整体上看起来像是单内核,但其本质仍然是偏向于微内核,所以我才说苹果只是调整居多,它没你想的改变那么大。』

 

你确定你清楚自己在谈论的这几个名词是什么意思吗?

 

微内核的本质是核心分成若干独立运行的模块,互相之间以 IPC 通信,一个模块挂了其他模块可以继续存活,此外一个常见于微内核的做法是尽量把原本运行于 kernel space 的东西挪到 user space来跑。这个结构稳定性上有优势,但性能不理想。

 

宏内核的本质是大部分核心紧密集成,核心模块之间直接过程调用,一处挂了整个核心就挂了,绝大多数逻辑运行在 kernel space。这个结构比较传统,性能上有优势但保证稳定性比较难。

 

你若真的弄懂了上面这两种结构,就会知道不可能存在什么核心『整体上看起来像是单内核,但其本质仍然是偏向于微内核』 …… XNU 就是为了避免 Mach 的性能问题,生生地把原来微内核中最基础的几个模块重新合成宏内核了,没记错的话甚至还像 windows 那样把 GUI 塞到 kernel space 来运行。它确实还带一些微内核的特征,比如 user space 的设备驱动,然而它和 Mach 已经有了本质区别了。

 

『那问题又来了。以你的理论,GNU/Linux是不是个操作系统?

 

要知道Linux内核所有权是Linus Torvalds,而其上的软件套装来自于GNU组织,他们的技术来源不同,以你的理论GNU/Linux也同样不是一个操作系统。』

 

GNU/Linux 当然是个操作系统,Linus 这货搞出了 Linux kernel,GNU 贡献了外围的系统接口,两者合一就是一个完整的操作系统 —— 我从来没有说过一个操作系统的所有组件必须来自一家。

 

但是 MIUI 不是一个操作系统,它在操作系统这个层面上基本上啥也没干,即没有改进 Android 使用的 Linux kernel,也没有改进包括 Dalvik 虚拟机在内的 Android 为应用程序提交的系统接口。MIUI 所有的工作几乎都发生在应用层面,专注于把Android / Linux 这个操作系统定制成广大人民群众更喜闻乐见的样子。这是很有价值的工作,但这不说明 MIUI 是一个操作系统。

 

李方权:

 

对于混合核心请点击链接,我就不多说了。

 

对于MIUI,你怎么就确定MIUI没有在操作系统层面上什么都没干?要知道,如果MIUI没有在底层修改任何东西,那它是不用开源的。因为Android本身只有系统骨架是GPL,其余是Apache,GSM更是必源的。可实际情况是,小米最终迫于压力开放了相关部分代码,小米不可能搞不清楚这些开源协议的,这也从侧面证实了MIUI有涉及系统骨架的修改。

 

谢之易:

 

『对于混合核心请点击链接,我就不多说了。』

 

逃避问题是不好的,我帮你把你给的维基链接内容贴过来:

 

混合核心(英语:Hybrid kernel),又译为混合式核心、混合内核,一种操作系统内核架构。传统上的操作系统内核可以分为微核心(Micro kernel)与单核心(Monolithickernel)两大基本架构。混合核心的基本设计理念,是用微核心的概念来设计,但是实作上则采用单核心的作法,结合微核心(Micro kernel)与单核心(Monolithickernel)两种设计方法,形成第三种分类。但是这种分类法受到一些批评,如林纳斯·托瓦兹认为这种分类只是一种市场营销手法,因为它的架构实作方式接近于单核心

 

我问你,把一个真正意义上的微内核 Mach kernel,改造成『用微内核概念来设计,但实现上采用宏内核做法』的 XNU,是不是对内核进行了实质性的改造?能不能用一句『调整的成分居多』蒙混过去?

 

『对于MIUI,你怎么就确定MIUI没有在操作系统层面上什么都没干?要知道,如果MIUI没有在底层修改任何东西,那它是不用开源的。因为Android本身只有系统骨架是GPL,其余是Apache,GSM更是必源的。可实际情况是,小米最终迫于压力开放了相关部分代码,小米不可能搞不清楚这些开源协议的,这也从侧面证实了MIUI有涉及系统骨架的修改。』

 

MIUI 需要开源是因为它用了 Linux kernel 的代码,具体点说,只要编译得到 MIUI ROM 的代码中包含了 Linuxkernel,哪怕小米没有改过其中任何一个字符,那么按照GPL 协议的要求,小米也需要开放 MIUI ROM 的源代码。明白了吗?我并没有深入研究过 MIUI 在操作系统层面究竟有没有做过什么。但事实是小米自己从未声称 MIUI 是个操作系统,连名字都叫 MIUI。引用维基上关于 MIUI 的词条:

 

MIUI (... ...), developed by Xiaomi Tech, is a stock and aftermarketfirmware for smartphones and tablet computers based on the free softwareAndroid operating system.

 

清清楚楚地写着 MIUI 是一个固件包(firmware),基于 Android 操作系统。所以如果你认为MIUI 真的在操作系统层面有实质性的工作,请拿出证据来。

 

李方权:

 

哈哈,实现概念并不一定改造很复杂好么,有时候一句代码的不同可以造就两个不同的产品,科学史上一个变量的不同造就完全相反的概念的事情还少么?当然我不是说XNU只是改了一句代码而已,我是说,它还没有到质变的地步,要知道,混合内核的本质仍然是微内核,XNU的本质,仍然是Mach,这也映证了,为什么苹果都已经开发出XNU了仍然延用mach_kernel的名称而不是xnu_kernel。

 

我没看过MIUI的源码,我不知道它改了什么,但我知道,Android应用层的代码是Apache协议的,如果小米只改了这些那它是不需要开源的,即使开源也只需要直接引用谷歌的项目即可。

 

另外,你也无法认定MIUI有没有操作系统层面有实质性的工作对不对。

 

谢之易:

 

你自己贴出来的链接里的内容:

 

混合核心的基本设计理念,是用微核心的概念来设计,但是实作上则采用单核心的作法,结合微核心(Micro kernel)与单核心(Monolithickernel)两种设计方法,形成第三种分类。但是这种分类法受到一些批评,如林纳斯·托瓦兹认为这种分类只是一种市场营销手法,因为它的架构实作方式接近于单核心

 

『要知道,混合内核的本质仍然是微内核』这种话你自己说出来不觉得脸红吗?

 

『我没看过MIUI的源码,我不知道它改了什么,但我知道,Android应用层的代码是Apache协议的,如果小米只改了这些那它是不需要开源的,即使开源也只需要直接引用谷歌的项目即可。』

 

最后重复一遍:小米只要用了 GPL 的代码,哪怕它一个字也没有改,按照 GPL 的规定也得开源。

 

『另外,你也无法认定MIUI有没有操作系统层面有实质性的工作对不对。』

 

实话实说,我没在这个问题上花过时间精力。小米自己都从来没有说过他们做得 MIUI 是个操作系统,名字都叫 MIUI (你知道什么是 UI 吧?),需要证明他们在操作系统层面与原生Android 和 Linux 有实质性差别的人是你。

 

李方权:

 

关于混合内核本质是不是微内核这个问题在很多其它资料都有讲述,随便搜了一下就搜到一则知乎的提问 ”Linux 为什么还要坚持使用宏内核? -Mac “,其下的回答中对于混合内核是不是微内核有激烈争论,但有一点十分确定,没有任何人说混合内核更像宏内核。而且混合内核本身就是一种时代发展的中间产物,像Windows NT当初也是宣称自己是微内核,后来又改成了混合内核。还没听说哪个内核从宏内核改成混合内核的。

 

[小米只要用了 GPL 的代码,哪怕它一个字也没有改,按照 GPL 的规定也得开源。]

 

这个说法是不严谨的,这样说吧,GNU/Linux是GPL开源的,那运行于其上的软件也必须开源么?这显然是不合理的,同理,如果MIUI只是一个应用集合,那它就不需要开源,就算它包含了Linux内核,那它也只需要开源系统骨架(Google自己就是这么干的)其应用层是不用开源的。

 

谢之易:

 

你真看过你引用的那个回答么?Linux 为什么还要坚持使用宏内核? - Mac 整个页面上提到混合内核一共四处,什么地方来的『对于混合内核是不是微内核有激烈争论』?

 

后面这一段更是莫名其妙,我一直说得是 XNU 内核相对于其前身 Mach 内核已经有了实质性变化,从一个教科书式的微内核变成了一个混合内核,什么时候说过『混合内核更像宏内核』?又什么时候说过『从宏内核改成混合内核』?

 

你有没有软件开发的常识啊?什么叫『用了GPL的代码』你不明白吗?

 

我写了一个程序,里面一行 GPL 的代码也没用,哪怕我跑在 GNU/Linux 上也不用开源。反过来,我写了一个程序,直接把 GPL 的代码拷贝到我的源码里面来用,那即使是跑在Windows 上也一定要开源,否则就是违规,懂了吗?MIUI 之所以必须开源,就是因为小米直接把 Linux 的 GPL 代码放进了他们的源码里面,没有这些个 GPL 代码,MIUI 这个 Rom 就生成不出来,懂了吗?

 

李方权:

 

你的理解根本上就是错的,一个系统不是一个单独的软件,它是一系列软件的集合(内核+系统调用+驱动+应用程序),其中不同的软件可以是不同的授权,即使他们打成一个包发布也是各负责各的授权,你不能因为内核是GPL就要求驱动也要是GPL。驱动程序之类的,它是集合在包里的吧,难道你就因为它在包里就把它给开源啦?硬件厂商还不和你拼命。

 

Google本身也是采用的混合授权的方式,Android可不是整个项目都是GPL,实际上Android除了和内核能扯上关系的系统骨架是GPL,其它都是Apache ,如果你觉得这样的授权方式有问题,请致电Google。

 

谢之易:

 

已经说过了,MIUI 不仅仅是打包了人家的东西,它直接使用了 GPL 的代码。通俗点讲就是直接把 GPL 代码放到了自己的代码库里。这一点从 MIUI 最初从 CyanogenMod (一个开源的 rom,对原生 Android/Linux 做了一些调整和扩展)那里分支出来的时候就已经是这样了。

 

我不想继续在这场争论上花时间了。现实是小米自己都不敢说 MIUI 是个操作系统,等你啥时候有了证据,能够证明小米在操作系统层面做了大量实质性工作以至于 MIUI 可以被认为是一个与 Android /Linux 不同的操作系统,再来和我争论吧。

 

李方权:

 

扯,你这回答能解释各软件各自授权互不影响的事实?

 

我也不想浪费更多的时间了,打住吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值