随便说说Windows和Linux

    首先声明,这篇文章并非论述win/lin孰好孰坏的愤青文。我是一个双系统用户,这篇文章只是随便说一些我的使用体会,从各个角度说一说这两个系统的异同。文中可能对Linux的描述较多,也可以当做一个简单的Linux入门介绍文,不过这个介绍有点太抽象了。
    
    首先讲讲操作系统(为了打字方便,后面简称OS)这个概念吧。在计算机学术上对OS的定义来说,OS主要负责的是各种硬件资源的分配管理,所以,它应该只是一个内核。但对于Windows用户来说,提及OS,往往指的是所有由MS提供的东西,包括Win内核,也包括所有附带的上层应用,如mspaint, notepad等,当然也包括整个GUI的设计。对于普通的win用户来说,OS则更是指的Release。经常会听到这样的对话:“你用的什么系统?”“我用的Win7”。对于Linux用户,内核与上层应用的界限是非常明显的,仅从普通用户(相对于开发人员而言)的角度来说,linux内核与windows内核最大的区别也许是GUI是否做在内核中。linux的内核是不包括GUI的,而windows则把GUI做到内核中了,所以windows在GUI方面消耗的资源相对要少一些,也更适合部署各种娱乐应用。(或许有人要出来跟我说linux的GUI消耗资源更少,vista上开不了特效的硬件在linux上都能开3D特效。这些读者,我建议你多用用linux之后再来看这个结论。)
    按理来说,Linux应该仅仅指linux kernel,不应该包括任何上层应用,然而实际情况下,Linux指代了一类东西。所以Linux没有Release这个概念(每个软件都有自己的Release),而发行版Distribution)这个概念可以约等于Win的Release吧。通常,除了一些LiveCD的Distro外,不同Distro最大的区别是包管理工具的不同。用Linux的用户都知道,每个Distro都有自己的软件仓库,仓库里有几乎所有的软件,用户可以直接从仓库中下载软件安装,而不需要在网上搜索下载,还要担心是否含有病毒。每个Distro的仓库的格式不一样,软件包的格式也不同,他们的风格也大不相同。如Debian的APT,它的特点就是方便用户,有很强的自动解决冲突的机制,用户只管装你要的软件,一句install就行,其他的我来;如Gentoo的emerge,它的特点是所有包都是源代码,在本地根据本地的优化设置进行编译,设置可以取舍某些软件中的特定功能;再如Arch的特点则是提供的软件包都是最新的,很适合喜欢尝鲜的用户;LFS则没有包管理机制,什么都要自己来,所以通常不适合桌面用户使用。但为什么说Distro只是约等于win的Release呢?Win的Release,从普通用户的角度来看,最大的区别就是GUI。而Linux下的GUI并不是Distro决定的,Linux下的GUI,可以简单的认为是由几种不同的桌面环境DE)来决定的(其实不是这么简单,但你这么认为也没人会反对你),常见的DE有Gnome,KDE,openbox,xfce,awesome等,而所谓的3D效果,并不是DE,只是一个应用软件,compiz fusion。Compiz Fusion里的绝大多数功能都只能用来装装B,无论对于开发,还是桌面娱乐都没有实用意义,所以用了很短的时间之后我也不用了。而每种DE,不仅仅是外观的不同,其设计理念也有很大的区别。如awesome是一个典型的平铺式窗口管理工具,它的特点是总是把前台的窗口撑满整个屏幕,并且能够方便调整各窗口大小,很适合开发人员使用。(我因为已经习惯了gnome,并且一直找不到时间折腾一下awesome的配置,不然肯定装awesome了)

    上面说的这么多,都是从一个桌面用户的角度来看的,下面稍微深入一点点,从一个更接近OS的角度来看两者的异同。
    对于习惯Windows的用户,刚开始用Linux的时候,目录树也许是最不习惯的部分之一。很多人难以理解我这么多分区都在哪里?挂载是怎么回事?windows用户总是习惯性的认为第一个分区的名字就叫C盘,第二个分区的名字就叫D盘。所以在linux下也总会问“我的C盘在哪”。其实,如果深入了解一下,就会发现其实Win和Linux的目录结构是很相似的,看下图(用等宽字体浏览):

           \(根目录)                            桌面
           |-home                               |-控制面板
           |-usr,local                          |-我的电脑
           |-proc,dev,tmp                       | |-C,D,E...
           |-boot                               |-网上邻居
           |-bin                                |-我的文档
           |-etc                                |-回收站
           |-mnt(media)                         |-库...
           |-srv,var,lib...
           |-sbin
           |-...
           Linux的目录结构                      Windows的目录结构

    从这里面可以看出,Windows的目录结构与Windows是相似的,它的根目录是桌面,在这个目录下有控制面板,我的电脑等目录,而在我的电脑中则有C,D,这些目录,通常第一个分区挂载于桌面\我的电脑\C这个目录下,其他逻辑分区也一样。这里,控制面板是一个特殊的目录,它是把很多在system32目录中的管理工具“软链接”到了这个目录下,网上邻居也是特殊的目录,把网络相关的状态信息显示在这个目录中,我的文档则相当于Linux下把某个目录Bind Mount过来,回收站则是把各个分区上的Recycled目录组合在一起,库其实跟回收站的原理差不多。Windows中逻辑分区挂载点是写在注册表中的,Linux下的挂载点写在/mnt/fstab中。
    对于Linux目录,这样理解也许会容易一些:/boot目录存放的是系统内核文件,以及boot loader(如grub)的文件,系统启动之后,内核完全存在于内存中,这个目录也就没用了。/home目录可以认为是我的文档,但其组织方式与我的文档不同,windows下的我的文档是在逻辑磁盘上的某些目录的集合,而/home,通常情况下是单独挂载的分区(不单独挂载也行,跟\共用逻辑分区);/usr目录有点点类似于C:\Windows目录,字体目录等都在这里面,而/usr/share则相当于Program Files目录,存放各个软件的文件;/lib目录则类似于Program Files\Common Files,是各种软件共享的库存放的地方。/usr/local这个目录的结构跟/usr的结构很相像,但在某些发行版(如Debian)中,这个目录是普通用户(需要加入staff组)可以访问的,所以普通用户安装软件可以装到这里面。(当然,这种做法比较适合单机用户,或者多用户机器上只有较低权限的管理员使用,多用户机器上,还是推荐将自己的软件装到自己的home目录中);/mnt或者/media目录可以认为跟我的电脑很类似了,只是,通常移动硬盘分区会挂载在这下面,当然,如果你愿意,你也可以把所有分区按分区顺序挂载到/media/{C,D,E...}下;/proc目录是一个特殊的目录,它可以认为是内存的一个映射,从里面可以直接读取到很多内存中的内容,各个进程的状态信息等,当然,有些信息需要一定的权限才可以读取;/dev目录是一个特殊的目录,是所有物理硬件(如sda)、逻辑硬件(如tty)的映射,这里每个文件代表一个硬件设备;/etc可以认为是windows的注册表,但这里都是全局的配置,相当于HKLM这个根键;/bin嘛,其实就是把所有的应用程序的可执行文件放在这里,/sbin中的s表示system的意思,作用也就好理解了,可以认为是系统的一些必要工具。

    其实,仅从操作系统原理的角度来看这两个系统,它们并没有太本质的区别,内存管理、硬件资源管理、进程管理等,都是相同或相似的概念,不同的实现而已。它们的不同点至于使用的理念不一样,*nix无论是内核还是上层软件,大多遵循所谓的Unix哲学,Unix哲学即指导了代码的编写风格,也影响了软件的使用习惯,Windows,我不知道是否也有Windows哲学一说,但是Windows应用程序的代码风格跟*nix是很不一样的,而且使用习惯更始不同,它们的理念不同,可以认为这算是IT界的两大宗教吧。这里不深入讨论Unix哲学或者Windows哲学的细节。我只想笼统的说一下我对这两种理念的感觉。Windows因为都是由微软提供,并且第三方的软件一般也都使用微软提供的开发工具开发,所以聚合是最大的特点,UI风格比较统一。也因为聚合的特点,Windows的设计重心是ease of use,相对来说,windows的东西对开发者是不友好的,但对最终用户却很友好,这也是为什么windows会有这么多的桌面用户。*nix想法,它对开发者是友好的,但对用户不友好。*nix中几乎任何一款工具的学习曲线都要比windows长,但是功能却也很强大。从开发者看,我觉得最大的特点就是最大化了代码重用,因为所几乎所有软件都开源,所以免去了很多重复发明wheel(额,怕被当作敏感词……)的工作。曾经看到过很多软件开发商的怨言,自己的软件用了.net库,但用户电脑中可能没有装,所以虽然自己的软件只有几百K,但发布的安装包却不得不几十兆。软件的大小很多时候直接影响了用户的接受程度。但微软的各个Release都可谓是Life Changing,娱乐模式、办公模式,影响了大多数人的生活。Linux这方面,android也可谓是一个比较典型的例子吧,我个人觉得吸引那么多开发者参与到android应用的开发,主要原因还并不是andoid有多好用,而是上面开发软件太简单了。
    这里顺便说说命令行。很多windows小菜总是会觉得DOS是多么了不起的东西,看到别人在CMD中敲几条命令就会觉得非常了不起。为什么,我想了想,也许是因为它们觉得会敲命令的人能够记住很多命令,那么长长的东西,谁记得住啊!能记住的肯定都是牛人。然而其实大多数命令是不需要记太多东西的,这一方面,以命令行见长的*nix最有发言权。在*nix下,以bash为例,它提供的各种补全方式,还有各种对命令行操作的能力,甚至还有vi模式emacs模式,使得敲命令根本不需要记住很多东西,并且输入的过程也很轻松,再配合管道的使用(*nix中把文件当作通用标准接口),*nix的命令行在UI体验上,以绝对的优势领先了dos或者cmd。Win2k8中提供了PowerShell,从同学的介绍来看,它确实也非常强大,至少在配置能力方面,绝不是cmd那样的小辈。但是,我觉得它有一个方面与*nix的shell比是没有任何优势的,第三方程序,*nix的shell功能强大,并不在与bash本身提供了多少功能,而在于各种第三方工具,使得命令行在*nix下几乎无所不能(当然也不可能绝对的无所不能)。

    似乎也写了不少了,但其实还是只讲了一点点。码字有点累,就歇歇吧,以后有空再写。最后做个简单的总结,这个总结有些笼统,而我也不善长总结,所以言词可能不是很准确,各位轻拍。
    从操作系统的角度看,两者是大同小异的。从开发者的角度看,Linux是开发友好的。从最终用户的角度看,Windows让你忘了硬件,忘了系统内核,Win让你感觉你在用软件,而Linux让你感觉你在用Linux。

 

 转载请注明出处:http://www.cnblogs.com/stephenjy/archive/2010/02/17/1668913.html  

 

 

 

标签: Windows, Linux
posted @ 2010-02-17 14:16 尘光 阅读(3017) 评论(18) 编辑 收藏

 回复 引用 查看   
#1楼2010-02-17 16:58 | Kevin Zou      
Linux入門一下
 回复 引用 查看   
#2楼2010-02-17 18:17 | Springfield      
恩,评价的很客观,确实是这样,一般用户更加喜欢用windows,它使用起来确实比较简单。

另外呀,指正一个笔误,“内核完全存在于内核中”,这个应该是内存吧~呵呵

 回复 引用 查看   
#3楼[楼主]2010-02-17 18:19 | 尘光      
@Springfield
呵呵,对,笔误,是完全存在与内存中。谢谢指正:-)

 回复 引用 查看   
#4楼2010-02-17 19:58 | 诺贝尔      

我觉得两个系统并没有太大的区别。本质是一样的,但是开发者社群的特点不一样。

windows是商业公司在开发,讨好用户是最关键一点。因为商业公司要维持生存就要不断的“骗钱”。

而linux是程序员个人在开发,达到功能卓越是第一项。反正都是没钱的,也就没有赚钱压力。

linux的程序,永远是beta形式,也就是一种最方便测试,改进功能的模式,不会去做很多用户友好的东西,因为那些东西一方面非常费劲,另外如果改动功能,可能就要全盘推倒重做。

因此我断言,linux如果引入商业公司的做法,他便和windows无异。




 回复 引用 查看   
#5楼[楼主]2010-02-17 21:07 | 尘光      
引用诺贝尔:
我觉得两个系统并没有太大的区别。本质是一样的,但是开发者社群的特点不一样。

windows是商业公司在开发,讨好用户是最关键一点。因为商业公司要维持生存就要不断的“骗钱”。

而linux是程序员个人在开发,达到功能卓越是第一项。反正都是没钱的,也就没有赚钱压力。

linux的程序,永远是beta形式,也就是一种最方便测试,改进功能的模式,不会去做很多用户友好的东西,因为那些东西一方面非常费劲,另外如果改动功能,可能就要全盘推倒重做。

因此我断言,linux如果引入商业公司的做法,他便和windows无异。


我觉得不能这么笼统。这两个系统最多只是从操作系统原理上相同,其他方面都大相径庭。固然商业对他们的开发模式有很大的影响,然而,其本身的设计理念就有本质的区别。Linux下的软件也并非完全与商业无关,软件的开发人员也并非没有钱赚,IBM的eclipse,SUN的MySQL都是商业公司运作成功的典范,软件本身没有直接收入,但这些软件间接的为这些公司带来了不菲的收入。所以我不能认同你的“反正都是没钱的,也就没有赚钱压力”的观点。

我这篇文章的本意并不想从商业的角度来探讨两者的异同。我更多的是想把Linux下的一些大家难以理解的概念讲清楚,同时也捎带提及一下Unix哲学,虽然没有细说Unix哲学,然而这个东西却是Windows和*nix的最大区别所在。

另外,关于你的“因为那些东西一方面非常费劲,另外如果改动功能,可能就要全盘推倒重做。”这一观点,我也不能认同。GUI是一个非常费劲的东西,但却也是最最重要的东西,无论什么软件,都是给人用的。但是,就Linux目前的构架来说,要做好的GUI也不是难事,更不需要全盘推倒重做。只是,Linux用户对电脑使用的理念和Windows用户不同而已,所以没有人去做。事实上,做GUI也是一件很有趣的事情。

我个人的观点,我觉得也可以这样评价两个系统,Windows是Life Changing, Linux是Work Changing.

 回复 引用 查看   
#6楼2010-02-17 22:33 | 五星      
Win让你感觉你在用软件,而Linux让你感觉你在用Linux。
==============

这句话说得非常好,这也是MS的最大的成功之处。

 回复 引用 查看   
#7楼2010-02-18 08:16 | Jake Lin      
不错,请继续。
 回复 引用 查看   
#8楼2010-02-18 09:19 | YangQ      
“Unix和Windows是IT界的两大宗教”,这名说的在理,所以也导致了宗教间的冲突~
 回复 引用 查看   
#9楼[楼主]2010-02-18 09:26 | 尘光      
引用YangQ:“Unix和Windows是IT界的两大宗教”,这名说的在理,所以也导致了宗教间的冲突~


呵呵,可实际上的“宗教冲突”并不是Unix哲学和"Windows哲学"的冲突吧?大多数在那里争论的人,都是一些只会拿钱和3D特效说事的,没有几个是真正深入的了解过两个系统的人。当然,有一个人比较特殊,Richard Stallman,这个骨灰级愤青……

 回复 引用 查看   
#10楼2010-02-18 11:54 | grapeot      
分析的很有道理。The art of UNIX programming也提到,UNIX和Windows关于进程调度上设计思想的不同造就了上层许许多多的差异。UNIX强调轻量级的进程切换,简洁的进程间通信,因此工具间合作起来非常方便,所以UNIX下的工作是通过很多小软件连成工具链合作完成的。而Windows设计时采用了重量级的进程切换及通信。这就使得进程间通信很不方便,要不就是文件,要不就是命名管道,代码多,效率低,维护麻烦。这就鼓励开发者在一个进程下完成所有的工作,也就造成了Windows下的软件大都相对庞大的现状。
以前还真没意识到是进程切换成本造就了这一差异。

 回复 引用 查看   
#11楼[楼主]2010-02-18 12:02 | 尘光      
@grapeot
我还没看TAOUP,还真没从进程切换的角度来看两个系统的差异。这个角度非常不错,谢谢分享,给了我很多启发!
:-)

 回复 引用 查看   
#12楼2010-02-18 12:12 | Artur      
或许有人要出来跟我说linux的GUI消耗资源更少,vista上开不了特效的硬件在linux上都能开3D特效。这些读者,我建议你多用用linux之后再来看这个结论

看到这里很奇怪
事实的确是这样的啊
XP没办法开的特效Ubuntu都能开的啊

再看到这里
Compiz Fusion里的绝大多数功能都只能用来装装B,无论对于开发,还是桌面娱乐都没有实用意义

突然明白了
为什么Linux的游戏资源会如此的匮乏
Linux不是不支持GUI的,而是实现起来比较复杂,
用楼主的话说是CS结构的,要经过网络层,性能不高
再者两者实现的原理是不同的

 回复 引用 查看   
#13楼[楼主]2010-02-18 12:23 | 尘光      
@Artur
呵呵,简单解释一下吧,Linux的GUI,或者说xwindow,是基于CS结构了,所有的GUI的内容都要从网络层走一遍,性能自然不会高到哪去。

至于特效嘛,两者实现的原理不同,不便多比较。Vista/Win7的Areo效果跟Linux的Compiz Fusion完全是两回事。而且Areo效果是专为用户体验而设计的,用户觉得很舒适,看多了也不觉得腻,而Compiz Fusion中很多东西则纯粹是为了效果,实用意义并不大,视觉效果其实也不好,看多了会腻。


 回复 引用 查看   
#14楼2010-02-18 12:40 | grapeot      
这两天同时在看TAOUP和CLR via C# 3,一会觉得我草UNIX这个系统设计的太好了~一会觉得哇塞Windows这个设计好科学~晕了...
 回复 引用 查看   
#15楼[楼主]2010-02-18 12:52 | 尘光      
@grapeot
这就是计算机的魅力所在啊~
解决问题的办法总不止一个,每个都可以做的很漂亮~

 回复 引用 查看   
#16楼2010-02-18 23:39 | lovelovelt      
还是受益匪浅的,因为学习了一段时间的Linux,那种感觉与风格让人看到除了Windows还有另外的世界.
但是也有让人遗憾的地方,那就是氛围,其实在中国高校计算机专业的学生基本都接触过Linux,有一些也坚持学习了很久,可是到了最后大多无疾而终.除了web开发需要Linux服务器外,搞软件开发的大多投向Windows了..
不知道中国的Linux道路会怎么样呢?..

 回复 引用 查看   
#17楼2010-02-22 13:00 | usoluyun      
我曾经不止一次向非开发人员推荐linux,看来我错了
 回复 引用 查看   
#18楼2011-10-09 08:29 | SevenxWasly      
@诺贝尔
评价的是真是现实的真实反应,佩服