开源与Linux思维

2013-04-04 11:38:10|  分类:Linux|  标签:linux|字号订阅

  先从Unix哲学说起
  1.一个软件尽量只做一件事,并且把这件事做好
  2.为各个程序提供统一的接口,在Linux/Unix中这个接口就是管道
  以上两点可以总结为:“少即是多”。

  少怎么可能是多呢?
  这个问题比较有趣了,比如欧几里得几何学只提供5个基本公理,就可以推导出无穷无尽的定理。比如计算机中使用0/1表示所有的东西。比如Lisp中只提供 7公理就可以推出整个程序世界。一定程度上说,人类中的一些智者相信这个世界的本质是简单的,大到宇宙小到细菌,他们相信都是由简单的东西演化而来。

少就意味着无限的可能性。

  对Windows来说就是截然相反的观念了,“多即是多”,Windows中的软件总有给用户提供尽可能多功能的倾向。但问题是如果没给用户提供这样的功能就基本上意味着没有这样的功能。

  举个例子,比如给你这样一个任务:把一个目录下的文件按从大到小排序。

  如果你不知道Linux中如何完成这个任务。但你知道她提供了一个软件叫ls,可以列出目录下的文件,她还提供了一个软件叫sort,可以进行排序(排序 的方式有很多种)。这时你可能想要是这两个软件的功能可以结合起来就好了,你能这样想就有了使用Linux的思维了。可以用管道连接这些功能单一的软件, 让它们共同完成一件事,比如这个任务可以这样写:ls -l |sed '1d' |tr -s ' ' |sort -t ' ' -k 5 -n。(其实ls -lrS就可以了,这里只是要说明这种思维方式)

  如果是在Windows中想要完成这个任务,你就会去找有没有这样一个按钮,很幸运你能够找到。但有一天需求变了怎么办,等着Microsoft会给下一个版本加上你想要的那个按钮吧。

  形成这两种截然相反观念的原因是什么呢?
  开源与闭源,是造就这两种模式的直接原因。

  在闭源的生态系统中,如果A公司开发了一个播放器,B公司想开发一个软件需要用到播放器,那B公司就有两种选择,1.给A公司付费,使用A公司开发的播放 器。2.自己开发一个播放器。一般公司为了把自己的命运掌握在自己手里都会选择自己开发一个播放器。这就造成闭源生态系统中的软件有很多功能都是重叠的, 也就间接造成了软件功能的不单一性。

  在开源生态系统中,如果A公司开发了一个播放器并开源,B公司要开发一个软件需要用到播放器,B公司就可以使用A公司的代码并进行修改,代价是B公司也要 对新开发的软件进行开源。这就会使A公司最开始的播放器越来越强大,但最终也只是一个播放器而已。在开源生态系统中要维护一个大而全的软件是极其困难的, 因为同一个软件的开发人员会在世界各地,而且人员也不固定,这种模式就注定了不太适合大而全的软件开发(bug难以控制)。这时自然而然的就会走上 Unix哲学的道路。

  关于KISS(Keep It Simple, Stupid)原则,在软件设计中经常会提到。我感觉有趣的是Linux与Windows都是遵循了KISS原则的,只是对象不同罢了,Linux的对象是开发人员,Windows的对象是普通用户。

 闭源的理念走向了“多即是多”,开源的理念走向了“少即是多”,如同两座巍峨的高山各自让他们的信徒瞻仰。