好吧,那么借用 Linus 本人的话来说,普通用户从来就不需要『使用』一个操作系统,操作系统给程序员提供 API ,提供一个构建和运行应用的平台。
普通用户需要使用的是应用程序,而不是操作系统。
如果对你来说,你常用的那些应用程序在 Linux 下运行得更好,更方便,那么 Linux 对你来说就是更好的选择。如果不是,自然你没有必要选择 Linux。
那么,我,作为一个 Linux 用户,告诉你 Linux 的优点就是:我常用的很多软件,在 Linux 下都运行得更好,在 Windows 下要么没法运行,要么运行配合得很糟糕,所以我在 Linux 下使用这些软件。
圣战贴总是很诱人啊。
抛开Android不谈,Linux是一个以开发者为中心的操作系统,Windows是以消费者为中心的操作系统。这是最根本的区别,也是Linux相对于Windows的优势/劣势所在。
必须承认,尽管有很多人、很多公司在努力让Linux变得更加"User Friendly",但Unix/Linux的用户群体从来不是普通用户而是计算机的工业界和学术界。它的优先级,也是搞定工作而非娱乐。Linux的很多生态上的特点,都可以用这件事来解释。
另外一个很重要的特点,是Linux是由业余爱好者们拼凑而成的。它不像Windows/Mac一样有一个明确的『开发目标』,甚至不像BSD一样有一个『Base System』,Linux不过是一个内核,和一堆从不同地方搞来/开发,试图满足不同开发者自身需要的应用程序。只不过碰巧发现,这些工具组合组合,能够满足大多数人的大多数需要而已。
了解这两个特点之后,Linux的很多优点/缺点,也变得很容易理解。
- 应用的倾向
最显著的特点是,所有与开发有关的任务,都有非常完善的工具支持。——从底层编译器,到make/cmake,到shell script/script languages,到git,到vim/emacs再到方便的依赖管理和软件装卸工具。而其他的工具,相对来说要有限一些。
而且这些工具几乎默认可用。你能想象Windows/Mac出厂的时候就带着VS和一大堆开发工具吗?可是Linux几乎所有distro下,从shell到git到sed到g++/make,都是『预装好的』。这是因为,这些工具对于绝大多数的Linux用户来说,是一种必须。 - 『效率』和『易学』的抉择
不是说Windows/Mac下就会没有『效率』,而是Windows/Mac的设计相对来说没有那么倾向『效率』那一端。拿图形接口举例子,Linux的绝大多数工具都是『先有命令行/库接口』,然后将X11接口作为一种『Afterthought』和『额外的选项』,而Windows/Mac恰巧相反——默认的接口是『图形化』的,自动化的工具作为一种『额外的选项』。 - 开放源码和高度可定制
开放源码的初衷,不是为了『自由』而是为了『定制』。AT&T UNIX从来就是有版权的,但是源代码仍然可用,这是为了让用户能够根据需要,去『修改』它。
Linux社区所赞赏的软件和系统,多半遵循同样的规则——它应该能够适应不同用户的不同环境,能够轻易的改变自己的行为,能够轻松的与不同环境整合。与其假设别人和你的需求一致,不如给予它们定制系统的自由。 - 『用户友好』与『减少包装』
Linux的大多数软件,都是以个人兴趣作为开端的——我想写一个程序自己用,顺便分享给社区。事实上,绝大多数Linux的软件,也仍然是这样的状态——你可以拿过来用,但如果它有什么问题或者有什么不满足你要求的地方,需要你自己去研究一下。
所以Linux下的软件,往往愿意将自己『更彻底』的暴露给用户。方便用户更好的了解它的内部机制,进行hack。 - 去中心化
分散的软件开发,也注定了系统的接口和形式不统一——因为大家都喜欢发明轮子(?),而每个人的轮子或多或少更适合『自己』和『社区』而非所有人,而在Linux的环境下又没有人能强迫所有人用自己的轮子(除了Kernel开发者,但其实很多distro对kernel也有patch),所以与其制定一种实践,Linux更多的让用户去选择『生活的方式』。
你会看到Linux生态环境中有大量的distro,不同的distro有不同的init方式,不同的软件包管理器和安装策略;每个人习惯使用不同的VCS,不同的shell,不同的编辑器,都就是『更多的选择』的哲学的体现。
所以,如果你发现你自己更多的是『开发者』而非『消费者』,或者你所做的任务碰巧是人们一般用Linux完成的,那么你自然会发现Linux的优点。就我个人来说,即便有VS,我还是经常会觉得windows下项目的配置太繁琐;即便有homebrew,我也常常会觉得OS X下的软件管理比较奇怪。而在Linux下,我可以轻易的使用到最新版本的几乎所有开发工具。
而其他的时候,用Linux或者Windows/Mac就是个习惯而已嘛——又不是说Python和Ruby一定要分个高下,所有人只能用一种系统。
俺作为Linux系统架构曾经为多家企业走过从设计采购到部署交付的全过程,发点感想。
Linux确实是个好东西,你只需要一个键盘,一个显示器,一根网线,接入网络,便能做几乎所有的事情。
Linux相比windows的优点,从最本质来讲,其实就是开放源代码,衍生出很多优点,随便列几条:
- Linux可以看到源代码,windows不行。
这一点直接导致的结果就是在特殊应用的场合可以自行剪裁和定制所需的内核模块,这对于高级系统内核管理优化和驱动程序的开发相当有利,另外也因为代码可见,不用担心恶意功能或者后门,对于军政企的使用比较有利。
另外在系统出现严重问题的时候,可以自行修改代码或者接个几k的patch就能编译然后使用,而windows你得等微软的补丁。
2. Linux可以放弃图形界面,用纯命令行,windows不行。
图形界面对于Linux是选配,这一点对于服务器的稳定和高效运行相当有利,图形界面的运行不仅会消耗大量的CPU和内存资源,并且也会引入更多的bug导致系统不稳定。
3. Linux命令行功能强大,可以做任何事情,windows也有命令行,但是属于附属品。
命令行是Linux的根本,甚至你对某些命令不满意,你也可以自己修改或者编个自己的命令出来。命令行的好处是可重复。想要告诉别人一件事怎么做,一个命令行发过去就可以,想要再做一遍之前做过的一件事,调出历史命令记录重新执行一下就行。很多要定时做的事情写成脚本设个crontab定时,就完事儿。另外这样也可以保证你用一样的命令行,做的是一样的事情。
4. Linux是基于网络的,诞生于网络,windows是生于个人电脑应用。
远程连接上SSH,你就可以轻松操控远在千里之外的Linux服务器,只要有相应的权限,几乎和坐在物理机面前没有区别,哪怕网速很糟糕,实际只是一些加密的字符在传送,需要的带宽很小。而如果此时你想用一台千里之外的windows服务器,那就扯了。相信各位都用过QQ上面的远程协助,有多卡,而如果是一个Linux机器,事情就简单的多了。
顺便提一下:很多桌面级的用户很讨厌命令行,这是可以理解的,桌面应用本来就是点点用用,没必要记命令什么的,但是对于企业级应用就不同了。很简单的一个例子,你用桌面,你的电脑可能最多就那么几台,但是对于企业,几十,几百,上千台服务器,执行一些任务或者管理,都要去点击操作的话那是一场噩梦,这时候需要的是统一的作业,同一条命令一起发出去。
偶尔会感觉Linux和windows的区别好像民主和专制的区别。但它没政治制度那么严重,不会影响到生活的方方面面,大可各取所需。