打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如此复杂的linux操作系统的开发过程是怎么实现几十万个完全互不相识的开发者如此步调一致的协同的?

哦,为什么我觉得各位讲的Linux来自某个高魔的平行世界呢?

在本世界里,Linux能够成功,是因为它贯彻了如下两个核心原则。

原则一:做一件事,把一件事做好。

原则二:明确,不要含糊。

做一件事,把一件事做好

这实际上就是所谓的unix哲学

这实际上也是“高内聚、低耦合”这个软件工程第一原则的形象化表述。

举例来说,unix/Linux下有一个标准程序叫yes,它的作用是连续不断的输出y。

嗯,思路很简单,很多程序会提出一些问题,要求用户回答Y(yes)或者N(no),这很烦。有时候我们只需要一路Y就足够了——于是就有了这么个程序。

很无厘头,是吧。

但它完美契合unix哲学:做一件事,把一件事做好。

它就连续输出y,这难道还不够好吗?

类似的,写内核,进程调度模块就是进程调度,就只做这一件事,并把这件事彻底做好。

只做这一件事,意思就是进程调度只做进程调度,不要管虚拟内存;把这件事彻底做好,意思就是要支持一切优秀的进程调度算法、处理好包括惊群问题在内所有问题。

你看,这也并不容易。

当系统的每个模块、每个组件都只做一件事、并把这件事做到极致时,是不是其他人就可以信赖你了?

对吧,最好的进程调度器就在这里,你干嘛不配合它?

那么,Linus先写了内核(包括内存管理、进程调度等部分),质量上佳、功能完善;然后,其他人是不是就可以在这个稳固的基础上,开发驱动程序、内核模块以及shell了?

最终,Linux系统的确复杂,代码量/模块数目/功能点可以说是史无前例的;但,它的每个功能、每个模块,都简单、清晰——只做一件事,把一件事做好。

如此一来,是不是每个开发者都可以定下心、不用担心其他、专注于“做自己的事,把事情做好”?

你要每个模块都想搞“大而全”,一个功能在不同人不同层级的不同模块实现了八千遍,只因为这个功能可以“变现”——这些破玩意儿还可能配合的起来吗?

因此,只做一件事,把一件事做好,这就是Linux能够成功的核心秘诀。

明确,不要含糊

前面提到了unix哲学“只做一件事,把一件事做好”,这很好;但问题来了:达到什么标准,才算是“做好”?

你看,我要觉得“大而全就是好”,那是不是就彻底乱套了?

答案很简单:明确,不要含糊。

比如说,yes,它就是反复输出y,也可以输出用户指定的其他字符串——它的行为是可以预测的,它的参数是清晰明确的,没有任何含糊之处。

类似的,我们知道,rm -rf 是极其危险的一个命令,它的作用是删除指定目录以及其子目录下的所有文件。每年都有无数新手rm -rf了自己的根目录、搞死了自己的系统,甚至把某些小公司搞破产……

那么,我们是不是应该让rm -rf多一些提示、多一个挽回机会?

答案是:不行!

因为rm的作用就是删除文件或者目录,-r参数就是递归删除,-f就是强制删除无需提示——你改了,看似安全了,但实际上就把命令的作用/含义搞含糊了。

比如说,用户可能会说,为什么rm -rf /sbin时会提示后才执行,但rm -rf /var/www/data时无提示就执行了?我搞网站运营的,这玩意儿是最值钱的东西!反而是/sbin,删了就删了,我覆盖安装一下就能恢复,/var/www/data可是无法恢复的!

尤其是,如果在机器A上面,你用alias把rm搞“安全”了;那么在机器B上,你是否可以习惯性的认为rm安全?

清晰,明确,危险的东西就该让它危险,这才能确保整个系统状态清晰、每个命令每个操作结果都可以预测——而这个清晰、精确、可预测的整体状态,又有助于尽快暴露缺陷、免得藏匿bug。

类似的,进程控制块的定义,kernel module的接口标准/行为规范,一切都有清晰、明确的成文标准;只要你符合标准,哪怕写出了bug,也可以在运行时通过rmmod命令清出内存、不影响内核其它部分。

最复杂、最困难的内核都能如此,何况那些更简单、风险更小的UI界面。

当然,正因为UI设计不得不迁就不够专业的用户、使得“明确,不要含糊”的标准不能彻底贯彻——即所谓的“傻瓜界面”——这才使得它的GUI部分不够稳定。

原因很简单,“傻瓜”所以就必须包容、就必须允许一些模棱两可的状态、就必须猜测用户动机然后做一些“模糊”操作——而这些,就使得系统状态不够明确,就有了含糊余地,然后自然就难以保证正确性了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Ubuntu 删除目录命令
linux rm rmdir
LinuxSense ? linux删除目录的命令
linux系统下完全卸载Jenkins
rm:如果能重来,我选rm -rf /*
rm -rf之后磁盘空间没有释放的解决方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服