Unix的前身是由贝尔实验室(Bell lab.)的Ken Thompson利用汇编语言写成的unics, 后来在1971-1973年间由Dennis Ritchie用C程序语言进行改写,称为Unix。
1977年Bill Joy发布BSD(Berkeley Software Distribution),称为Unix-like类unix操作系统。
1984年Andrew Tanenbaum开始编写Minix操作系统,开放源代码;
1984年Richard Stallman发起GNU 计划,倡导自由软件(Free software),强调其软件可以自由的取得、复制、修改与再发行, 并规范出GPL授权模式, 任何GPL(General Public License)软件均不可单纯仅贩卖其软件,也不可修改软件授权。
1991年芬兰人Linus Torvalds开发出Linux操作系统。简而言之, Linux成功的地方主要在于: Minix(Unix),GNU, Internet, POSIX及虚拟团队的产生。

Linux最早是由芬兰人Linus Torvalds设计的。 当时由于UNⅨ的商业化,AndrewTannebaum教授开发了Minix操作系统以便于不受AT&T许可协议的约束,为教学科研提供一个操作系统。
当时发布在Internet上,免费给全世界的学生使用。Minix具有较多UNⅨ的特点,但与UNⅨ不完全兼容。
1991年10月5日,Linus为了给Minix用户设计一个比较有效的UNⅨ PC版本,自己动手写了一个“类Minix”的操作系统。
整个故事从两个在终端上打印AAAA...和BBBB...的进程开始的,当时最初的内核版本是0.02。Linus Torvalds将它发到了Minix新闻组,很快就得到了反应。
Linus Torvalds在这种简单的任务切换机制上进行扩展,并在很多热心支持者的帮助下开发和推出了Linux的第一个稳定的工作版本。
1991年11月,Linux0.10版本推出,0.11版本随后在1991年12月推出,当时将它发布在Internet上,免费供人们使用。
当Linux非常接近于一种可靠的/稳定的系统时,Linus决定将0.13版本称为0.95版本。1994年3月,正式的Linux 1.0出现了,这差不多是一种正式的独立宣言。
截至那时为止,它的用户基数已经发展得很大,而且Linux的内核开发队伍也建立起来了。

Linux内核是由Linus Torvalds在1991年开发,unix由贝尔实验室的Thompson与Ritchie在1970年代开发,早于linux诞生20年。 在linux诞生之前unix就是一个非常稳定而成熟的操作系统了!
既然有这么个优秀的操作系统,为什么还会有linux的生存空间呢?本文就来聊聊unix和linux的历史!

1969年以前:Multics系统

回到顶部

早期的计算机并不像现在的个人计算机这样普遍,由于操作困难,非常不适合普通个人使用, 大多用于军事等高科技领域或者学术研究。 古老的计算机 当时的输入设备只有卡片阅读机,输出设备只有打印机, 操作系统为批处理操作系统,用户很难与操作系统互动, 程序开发人员需要将程序二进制代码通过打孔机打孔到读卡纸,打孔表示1,没打孔表示0。 最后将读卡纸插入卡片阅读机,卡片阅读机将程序信息读入计算机中运算。 如果程序有个小错误,就得重新打卡,程序修改调试非常困难,效率低下。 加上主机少,用户众多需要排队等待,非常耗费时间!
随着技术的发展,出现了键盘和鼠标这样的输入设备,大大提高了信息的录入效率。 但是由于操作系统的限制,如果有多人同时使用同一部主机,还是需要排队等待! 1960年代初期麻省理工学院(MIT)开发了划时代的兼容分时系统CTSS(Compatible Time-Sharing System), 可以让大型主机通过数个终端机(terminal)联机进入主机。 兼容分时系统可以说是近代操作系统的始祖!兼容分时系统使CPU在多个用户的工作之间来回切换, 让多个用户在某一段时间内分别使用CPU的资源,让用户感觉大家是在同时使用该主机的资源!
此时的终端机只有输入输出功能,本身不具备任何运算运算能力。比较先进的主机最多也只能提供30个不到的终端机。
为了增强大型主机的资源利用率,让主机资源可以同时被更多用户使用, 1965年左右,贝尔实验室(Bell)、麻省理工学院(MIT)及通用电器公司(GE)共同发起了Multics(MULTiplexed Information and Computing System)计划, Multics是一个全面通用的分时操作系统,目的是让大型主机可以同时提供300个以上的终端机。 到1969年前后,由于计划进度落后,资金也短缺,贝尔实验室判断Multics项目不可能取得成功,于是选择退出了该计划的研究工作。
但是该计划仍然继续在研究,最终Multics还是有成功的发展出自己的系统,完整的历史说明可以参考:
Multics计划虽然没有受到很大的重视,但是却培养出了非常多优秀的人才! 包括Ken Thompson、Dennis Ritchie、Joe Ossanna、Douglas McIlroy、Peter Neumann、Stan Dunten、Rudd Canaday等等
http://www.multicians.org/
Multics 分时操作系统的历史

1969年:Ken Thompson的业余作品Unics

回到顶部

贝尔实验室是隶属于美国电信大厂AT&T公司, 1969年贝尔实验室退出Multics计划。参与Multics项目的工程师们调回贝尔实验室后,面对实验室落后的仍以批处理工作的计算机环境,他们非常怀念Multics。 不过原本参与Multics计划的工程师人员已经从该计划中获得了一些灵感, Ken Thompson就是其中一位!
Thompson为了移植自己编写的太空旅游(space travel)游戏!希望开发一个小小的操作系统以供自己使用。 万般无奈的Thompson在库房里发现了一个闲置的DEC (Digital Equipment Corporation)公司推出的 PDP-7, 刚好没人使用,于是他就准备针对这部主机进行操作系统内核程序的开发。 最初运行Unix系统的DEC PDP-7 1969年八月份左右,Thompson有一个月的休假期,家里有妻儿本来Thompson应该是没时间的, 刚好Thompson的妻儿去了美西探亲, 于是他就有整整一个月时间好好的待在家将一些构想实现出来!
经过四个星期的奋斗,他终于以汇编语言(Assembler)写出了一组内核程序,同时包括一些内核工具程序, 以及一个小小的文件系统。在操作系统、Shell程序、编辑器和汇编程序上,他各花了一周时间。这个系统就是Unix的原型! 由于当时Thompson从Multics项目中获得想法,将Multics庞大而复杂的系统进行简化, Thompson将Multics庞大的复杂系统简化了不少,同实验室的朋友都戏称这个系统为:Unics。
而在这一年,地球另一端的芬兰,linus出生了。
Thompson的这个文件系统有两个重要的思想概念,分别是:
所有的程序或系统设备都是文件
不管建构编辑器还是附属文件,程序只有一个目的,就是要有效的完成目标。
这也就是著名的KISS(keep it simple, stupid)原则,即“简单原则”——尽量用简单的方法解决问题,这是“Unix哲学”的根本原则。 这些思想在后来对于Linux的发展有相当重要的影响!

1973年:Unix内核正式诞生

回到顶部

由于 Thompson 写的Unics操作系统实在太好用了,在贝尔实验室内部广为流传,并且经过多次改版。 但是因为Unics是以汇编语言写成的,高度依赖硬件,加上当时的计算机机器架构都不太相同, 所以每次要安装到不同的机器都得要重新编写汇编语言,很不方便!
Ken Thompson(坐着)和Dennis Ritchie在PDP-11前工作 后来Thompson与Ritchie合作想将Unics改用更高级的程序语言来编写。从而提高可移植性。 他们先选择了BCPL(简称B语言),然后又尝试PASCAL,发现编译出来的内核性能都不是很好,因为这些语言都不太贴近硬件操作。 于是,两人(主要是Dennis Ritchie)决定自己开发一套新的语言:这就是大名鼎鼎的 C 语言。 Dennis Ritchie将 B 语言重新改写成 C 语言,再以 C 语言重新改写与编译 Unics 的内核, 最后正名与发行出 Unix 的正式版本!
C 程序语言开发成功后,甚至一直沿用至今呢! 此时AT&T忙于其他商业活动,对于Unix 并不支持也不排斥。 此外,Unix 在这个时期的发展者都是贝尔实验室的工程师, 这些工程师对于程序当然相当有研究,所以,Unix 在此时当然是不容易被一般人所接受的! 不过对于学术界的学者来说, 这个 Unix 真是学者们进行研究的福音!因为程序代码可改写并且可作为学术研究之用嘛! 需要特别强调的是,由于 Unix 是以较高阶的 C 语言写的,相对于汇编语言需要与硬件有密切的配合, 高阶的 C 语言与硬件的相关性就没有这么大了!所以,这个改变也使得 Unix 很容易被移植到不同的机器上面喔!
1973年,Dennis Ritchie用C语言重写与编译Unics的内核,最后发行出Unix的正式版本。 “重写”说起来简单,实际上并不是简单的汇编到C语言的翻译,这里边包含了很多的发明和创造。 在此期间引入的“pipe”(管道)功能后来成为了Unix的一大优势,这种功能使得程序间输出结果的传递非常容易。 管道的概念是贝尔实验室的Douglas McIlroy发明的,后被很多操作系统大量拷贝,其中包括Unix的所有变体、Linux、DOS和Windows。 重写过的Unix很快就流行起来,此后便一直应用于生产领域。40多年过去了,虽然出现了很多的类Unix系统(例如Linux),但是他们都继承了Unix 中的基本思想,并且发扬光大。著名的类Unix系统包括Berkeley Unix、Minix、Linux、AIX、A/UX、HP-UX以及Solaris, 苹果的Mac OS X则是基于Berkeley Software Distribution(简称BSD)Unix。

1977年:Unix的重要分支BSD诞生

回到顶部

贝尔实验室隶属于AT&T,此时AT&T对于Unix采取较开放的态度。 Unix是以高级C语言写成的, 具有较强的可移植性的!只要获得Unix的源码,并且针对大型主机的特性加以修改, 就可以将 Unix 移植到另一部不同的主机上。 所以在1973年以后,Unix开始与学术界合作开发! 最重要的就是与加州大学伯克利分校(Berkeley)的合作了。 伯克利大学的 Bill Joy在取得了 Unix 的内核源码后,着手修改成适合自己机器的版本, 同时增加了很多工具软件与编译程序,最终将它命名为 Berkeley Software Distribution (BSD)。 BSD是Unix很重要的一个分支,Bill Joy也是 Unix 业者Sun公司的创办者! Sun 公 司即是以 BSD 发展的内核进行自己的商业 Unix 版本的开发。 后来可以安装在 x86 硬件架构上面FreeBSD 即是 BSD 改版而来!

1979年:AT&T发布支持x86架构带商业版权的System V第七版Unix

回到顶部

由于Unix的高度可移植性与强大的性能,加上当时没有版权纠纷,很多商业公司开始了Unix操作系统的开发。 他们将unix操作系统移植到自家的硬件平台上,从而推出适合自家硬件平台的unix系统,例如AT&T的System V、IBM的AIX以及HP与DEC等公司。
操作系统内核(Kernel)必须跟硬件密切配合, 以提供及控制硬件的资源进行良好的工作! 早期生产计算机硬件的公司还没有统一的标准, 每一个计算机公司生产的硬件都不相同! 必须为自己的计算机硬件开发合适的 Unix 系统。 例如在学术机构相当有名的Sun、Cray与HP就是这一种情况。 他们开发出来的 Unix 操作系统以及内含的相关软件并没有办法在其他的硬件架构下工作的! 另外,由于没有厂商针对个人计算机设计Unix系统,因此,在早期并没有支持个人计算机的 Unix 操作系统的出现。
早些年的Unix只能与服务器(Server)或者大型工作站(Workstation)划上等号。 如同兼容分时系统的功能一般,Unix 强调的是多人多任务的环境! 但早期的 286 个人计算机架构下的 CPU 是没有能力达到多任务的作业, 因此,并没有人对移植 Unix 到 x86 的计算机上有兴趣。 每一家公司发布的Unix虽然在架构上大同小异,但是却仅能支持自身的硬件,所以, 早先的 Unix 只能与服务器(Server)或者是大型工作站(Workstation)划上等号! 直到1979年,AT&T推出了System V第七版Unix,这个情况就有点改善了。 这一版最重要的特色是可以支持x86架构的个人计算机系统,也就是说 System V可以在个人计算机上面安装与运作了。
不过因为AT&T出于商业考虑,以及在当时现实环境下的思考,于是想将 Unix 的版权收回去。 AT&T 在 1979 年发行的第七版 Unix 中,特别提到了不可对学生提供源码的严格限制! 这造成了Unix业界的紧张气氛,同时也点燃了商业纠纷的战火~
。 目前被称为纯种UNIX的指的就是System V和BSD这两套。
从Unix诞生之日起,各种信誓旦旦的预言就伴随着它,说Unix必将衰败,或者被其它操作系统挤出市场。可是在今天,它化身为Linux、BSD、Solaris、MacOS X以及好几个其它变种的Unix,却显得前所未有的强大。

unix家谱

1984年:Minix、GNU计划和X Window System

回到顶部

1979年unix的版权声明,严重影响了学校教授Unix内核源码的教授,导致课程无法顺利开展。 从1984年开始,Andrew Tanenbaum教授为了教学目的,决定自己写一个和unix兼容的Unix Like内核程序, 为了避免版权纠纷,Andrew Tanenbaum完全不看Unix内核源码! 这完全就是一个Mini版(微小)的Unix系统,所以称为Minix。 到1986年Minix编写完成,并于次年出版Minix相关书籍,同时与新闻组BBS及News相结合
Minix并不是完全免费的,无法在网络上提供下载! 所以Minix的传递速度并没有很快速! 必须通过磁盘磁带购买!不过售价非常便宜, 随磁盘还会附上Minix的源码! 这样用户可以学习Minix的内核程序设计概念! Minix受到了用户的欢迎,很多用户强烈要求Andrew Tanenbaum对Minix持续改进, 但是Andrew Tanenbaum教授只把Minix定位在教育用途上面,所以无心对Minix持续开发。 无奈之下,芬兰赫尔辛基大学的学生Linus Torvalds在对Minix进行研究学习后, 开发了日后改变全世界的linux内核!这个我们稍后介绍。 在Andrew Tanenbaum教授开始编写Minix的1984年,在地球的另一个角度,一个伟大的计划正在悄然诞生, 这就是日后和linux双剑合璧一起改变世界的GNU计划。该计划由Stallman启动,旨在建立一个自由开放的Unix操作系统(FreeUnix)。 该计划领导了计算机产业轰轰烈烈的自由软件运动,实现了unix下绝大部分的开源工具软件集合和函数库,为开源世界做出了卓越的贡献! 但是GNU计划一直缺少一个"真正自由的unix内核", 当然GNU计划也有自己的内核项目,这就是nurd,由于开发人员对nurd要求过于严苛,导致nurd内核迟迟无法推出。 直到1991年Linus Torvalds编写的linux内核横空出世! 关于GNU计划的历史参考GNU计划! 1984年真是不平凡的一年,除了Minix和GNU计划。由于用户对图形用户接口(Graphical User Interface, GUI)的需求日益强烈, 在这一年MIT与其他第三方首次发布了X Window System,为日后linux图形界面的发展奠定了基础。 4年后的1988,MIT成立非营利性组织XFree86, XFree86为X Window System + Free + x86的整合简写, XFree86图形界面与1994年整合进linux内核1.0版。 之所以称图形用户接口为X,在字母表中,x排在Window的W后面, 意指Window的下一版! 需注意的是,X Window并不是X Windows!

1991年:linux 0.2版发布

回到顶部

1991年,芬兰赫尔辛基大学的Linus Torvalds在BBS上发布了一则消息,宣称他以bash, gcc等GNU工具写了一个小小的内核程序, 该内核程序可以在Intel386机器上运行,linus谦虚的表示该内核程序只是个玩具,不像GNU那么专业。 从此开启了Linux不平凡的路程!
下面我们简单介绍一下linux的研发历程: 参考文档:
维基百科https://zh.wikipedia.org/wiki/Linux%E5%8F%91%E8%A1%8C%E7%89%88
1969年,也就是Thompson在家捣鼓Unics系统的这一年,Linus Torvalds出生了。 Linus Torvalds Linus Torvalds的外祖父是赫尔辛基大学的统计学家, 为了让自己的小孙子能够学点东西,外祖父便将Linus Torvalds从小带到身边来管理一些微计算机。 这个时期,Linus Torvalds接触了和硬件芯片架构直接相关的汇编语言Assembly Language。
1988年Linus Torvalds顺利进入了赫尔辛基大学,并选读了计算机科学系。 就学期间,因为学业的需要与自己的兴趣, Linus Torvalds接触到了Unix操作系统。 当时整个赫尔辛基只有一部最新的Unix系统,同时仅提供16个终端机(terminal)。 terminal只有Input/Output功能,没有计算能力,很难满足Linus Torvalds的需求, 光是等待使用Unix就很耗时。Linus萌生了想要自己实现一个Unix内核的想法! 想要写一个操作系统内核真不是一件容易的事情,GNU计划的HURD内核就因为难产迟迟无法推出, 更何况一个大学生! 但Linus Torvalds很快就发现了一个类似unix的操作系统内核,这就是Andrew Tanenbaum教授为教学而编写的Minix系统! 他在购买了最新的Intel386的个人计算机后,就立即安装了Minix这个操作系统。 Minix操作系统附有源代码, Linus Torvalds通过源码学到了很多的内核设计的概念! 1.2.2 对 386 硬件的多任务测试 事实上,Linus Torvalds对于个人计算机的 CPU 其实并不满意,因为他之前碰的计算机都是工作站型的计算 机, 这类计算机的 CPU 特色就是可以进行『多任务处理』的能力。什么是多任务呢?理论上, 一 个 CPU 在一个时间内仅能进行一个程序, 那如果有两个以上的程序同时出现到系统中呢?举例来说, 你可以在现今的计算机中同时开启两个以上的办公软件,例如电子电子表格与文字处理软件。 这个 同时开启的动作代表着这两个程序同时要交给 CPU 来处理啊! CPU 一个时间点内仅能处理一个程序,那怎么办?没关系,这个时候如果具有多任务能力的 CPU 就会在不同的程序间切换~ 还记得前一章谈到的 CPU 频率吧?假设 CPU 频率为 1GHz 的话,那表 示 CPU 一秒钟可以进行 10 9 次工作。 假设 CPU 对每个程序都只进行 1000 次运作周期,然后就得要 切换到下个程序的话,那么 CPU 一秒钟就能够切换 10 6 次呢! (当然啦,切换工作这件事情也会花去 一些 CPU 时间,不过这里暂不讨论)。这么快的处理速度下,你会发现, 两个程序感觉上几乎是同 步在进行啦!
同时打开两个文件所花的时间要比打开完A再去打开B文件所花费的时间还要多, 同时开启的话,CPU就必须在两个工作任务之间不停的切换,任务的切换也会耗费一些CPU时间! 同时启用两个以上的工作在一个 CPU 上, 要比一个一个的执行还要耗时一点。 如果一个cpu中有多个可以并行处理的cpu核,情况就会大大改善,就是为什么cpu厂商会大力研发多核cpu的原因!
早期Intel x86架构不受重视的原因,就是因为x86芯片对于多任务的处理不佳, CPU在不同的工作之间切换不是很顺畅。 这个情况在386计算机推出后,得到了很大的改善。 Linus Torvalds在得知最新的386芯片后,发现性价比还可以,于是贷款去买了一部Intel的386来玩。
早期的计算机性能没有现在这么好,压榨计算机性能就成了工程师的一项癖好! Linus Torvalds早期是玩汇编语言的,汇编语言对于硬件有很密切的关系,Linus Torvalds自己也说:我始终是个性能癖。
为了彻底发挥386的性能,Linus Torvalds花了很多时间测试386! 重要测试就是测试386多任务切换性能。他写了三个小程序,一个程序持续输出A、一个持续输出B, 最后一个将两个程序进行切换。 他将三个程序同时执行,结果屏幕上很顺利的出现了ABABAB...... 测试取得了圆满成功了! 386计算机的多任务测试 图 386计算机的多任务测试
要达到多任务multitasking的工作环境,除了硬件CPU需要具备多任务特性外,操作系统也需要支持该功能! 不具有多任务特性的操作系统,同一时刻只能有一个任务在内存中运行,多个任务只能按照顺序一个一个执行。
至于多任务的操作系统中,系统内存中可以同时驻留多个任务。每个程序被执行时,都会有一个最大CPU使用时间,若该工作运作的时间超过CPU使用时间时, 该工作就会先被丢出CPU的运作中,而再度的进入内核工作排程中等待下一次被 CPU 取用来运作。
探索完 386 的硬件性能之后,终于拿到 Minix 并且安装在Linus Torvalds的 386 计算机上之后, Linus Torvalds跟BBS上面一堆工程师一样, 他发现Minix虽然真的很棒, 但是Andrew Tanenbaum教授就是不愿意进行功能的加强,导致一堆工程师在操作系统功能上面的欲求不满! 既然如此,那我何不自己来改写一个我想要的操作系统?于是年轻的Linus Torvalds就开始了内核程序的编写了。
编写程序需要什么呢?首先需要的是能够进行工作的环境,再来则是可以将源码编译成为可执行文 件的编译程序。 好在有 GNU 计划提供的 bash 工作环境软件以及 gcc 编译程序等自由软件, 让托瓦兹得以顺利的编写内核程序。 他参考 Minix 的设计理念与书上的程序代码,然后仔细研究出 386 个人计算机的性能优化, 然后使用 GNU 的自由软件将内核程序代码与 386 紧紧的结合在一起,最终写出他所需要的内核程序。 而这个小玩意竟然真的可以在 386 上面顺利的跑起来~还可以读取 Minix的文件系统。 他希望这个程序可以获得大家的一些修改建议, 于是便将这个内核放在网络上供大家下载, 同时在BBS上面贴了一则消息:

Hello everybody out there using minix- I'm doing a (free) operation system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. I've currently ported bash (1.08) and gcc (1.40), and things seem to work. This implies that i'll get something practical within a few months, and I'd like to know what features most people want. Any suggestions are welcome, but I won't promise I'll implement them :-)
他说,他完成了一个小小的操作系统,这个内核是用在 386 机器上的, 同时,他真的仅是好玩,并不是想要做一个跟 GNU 一样大的计划! 另外,他希望能够得到更多人的建议与回馈来发展这个操作系统! 这个理念跟Minix刚好背道而驰! 这则新闻引起很多人的注意,他们也去Linus Torvalds提供的网站上下载了这个内核来安装。 因为Linus Torvalds放置内核的那个FTP网站的目录为Linux,从此大家便称这个内核为Linux了。 此时的 Linux 就是那个 kernel 喔! 另外,Linus Torvalds所丢到该目录下的第一个内核版本为 0.02 呢!
同时,为了让自己的 Linux 能够兼容于 Unix 系统,于是Linus Torvalds开始将一些能够在 Unix 上面运作的软件拿来在 Linux 上面跑。 不过,他发现到有很多的软件无法在 Linux 这个内核上运作。 这个时候他有两种作法, 一种是修改软件,让该软件可以在Linux上跑, 另一种则是修改Linux让 Linux符合软件能够运作的规范! 由于Linux希望能够兼容于Unix,于是Linus Torvalds选择了第二个作法修改 Linux! 为了让所有的软件都可以在Linux上执行,Linus Torvalds参考标准的POSIX规范。
POSIX 是可携式操作系统接口(Portable Operating System Interface)的缩写,重点在规范 内核与应用程序之间的接口, 这是由美国电器与电子工程师学会(IEEE)所发布的一项标准喔!
这个正确的决定让 Linux 在起步的时候体质就比别人优良~因为 POSIX 标准主要是针对 Unix 与一些 软件运行时候的标准规范, 只要依据这些标准规范来设计的内核与软件,理论上,就可以搭配在一 起执行了。 而 Linux 的发展就是依据这个 POSIX 的标准规范, Unix 上面的软件也是遵循这个规范来 设计的, 如此一来,让 Linux 很容易就与 Unix 兼容共享互有的软件了!同时,因为 Linux 直接放置 在网络下,提供大家下载, 所以在流通的速度上相当的快!导致 Linux 的使用率大增!这些都是造 成 Linux 大受欢迎的几个重要因素呢!
Linus Torvalds常常会透露他自己是个只喜欢玩 (Just for Fun)的怪人! Linux一开始也只是Linus Torvalds的一个作业发展出来的玩具而已。 他也说,如果Minix或hurd这两个中的任何一个系统可以提早开发出他想要的功能与环境,也许他根本不会想要自己开发一个Linux!
简单说明 Linux 成功的因素?
1. 藉由 Minix 操作系统开发的 Unix like ,没有版权的纠纷;
2. 藉助于 GNU 计划所提供的各项工具软件, gcc/bash 等;
3. 藉由 Internet 广为流传;
4. 藉由支持 POSIX 标准,让核心能够适合所有软件的开发;
5. 托瓦兹强调务实,虚拟团队的自然形成!

initroot编辑整理,转载请注明www.initroot.com技术交流群:59909790