导读 “如果当时我真的知道从头建立一个操作系统的难度,肯定是不会有勇气去做的。”1991年8月25日,随着林纳斯·托瓦兹(Linus Torvalds)这句“天真”的描述,Linux系统正式与世人见面了。25岁的Linux,它的开源却源自“自私”。然而自私的他,却被追崇了25年,还被“强硬”的绑架到了别的设备上,甚又可恶的将其送入了太空!

目前Linux官方的吉祥物 Tux

说是“天真”,并非贬低,只是从现在来看,当年的林纳斯·托瓦兹真的太过于天真的低估了这个自己课余做出的东西。
因为Linux在随后的发展中逐步壮大,所涉范围小到掌中设备,大到探索宇宙,远非超他当年所想象的广泛。

自用的Linux

如果爱范儿说Linux是为了“自私”目的诞生的产物,想必很多人都会先嗤之以鼻。但其实Linux诞生之初,确实只是为了满足个人需求。

那一年的林纳斯·托瓦兹只有22岁,在芬兰赫尔辛基大学学习电脑。在学习中,他为了方便访问大学内的Unix服务器,针对自己手中设备随手写了一个程序,但直到程序写的差不多的时候,林纳斯才发现他写了一个操作系统内核。在后来IEEE Spectrum的一次专访中林纳斯坦言当年的自己真的是初生牛犊不怕虎:

如果当时我真的知道从头建立一个操作系统的难度,肯定是不会有勇气去做的。

Linux之父林纳斯·托瓦兹

这种年少无知也让我从一开始就没有按照前人的老路编程编写内核。但是,爱范儿想说的“自私目的”并不是指林纳斯为自己需要开发这事,而是指Linux的开源。

自私的开源众

所周知的Linux是一个开源系统(虽然并非所有Linux发行版都开源),而Linux的成功很大程度上是依靠开源社区为其提供的源源不断的代码支持,使其从当年一个人的“小项目”日益壮大起来。而之所以Linux能够获得这些资源,其实全依靠Linux采用的授权协议——GPL。

GPL全称GNU通用公共许可协议(GNU General Public License),自由软件许可协议条款之一,该协议最大的特点(也是最大的非议)就是,任何使用GPL程序的演绎作品也要在GPL之下。简单来说就是,任何使用了GPL程序代码的程序都需要以GPL授权来开放代码,一份代码就有可能引发无数的程序成为GPL,并且继续扩散。

因为这一特性GPL获得了“传染病”的评价,并且有不少公司对这一协议表示反感。比如微软前任CEO鲍尔默,他曾在2001年公开评价使用GPL的Linux为“癌症”,其根本原因就是GPL协议。之所以鲍尔默这样评价,是因为在GPL协议下发布的Linux内核,任何使用涉及GPL协议代码的再开发项目,都需要将代码重新以GPL返回给开源社区。

而除了微软之外,很多企业和公司,尤其是硬件厂商也都对Linux这种GPL十分头疼,因为涉及到开源驱动,出于商业保密等原因,在提供支持的时候十分小心,甚至消极应对。比如Nvidia就一直不对Linux提供最新技术的驱动支持,并直接表示过不会像Linux提供和其他OS等级的支持,因为这会使得公司一直保密的技术信息暴露在所有人面前。而对于这一现象,Linux之父林纳斯在一次芬兰的采访中直接以“国际手势”回应,并表示Nvidia是他这辈子工作生涯中处理过的“最糟糕的故障”。

对于Linux开源所带来的非议,林纳斯可能是早有预料的。在一次和BBC的采访中林纳斯谈及,他所认为的开源真正的特色是让人人能“自私”。开源不是虚伪的“让我们围着篝火唱歌,使这个世界变得更美好”。如果每人都能为他们“自私”的原因而作出贡献,开源才能成功。

林纳斯以自己来举例,他热爱编程并希望学习如何控制硬件,而这就是他的“自私”目的。这里的“自私”并非是指利益回报,并且很多人都有这种想法,担心自己的努力白白被他人利用。所以林纳斯使用GPLv2许可证解决了这一问题,这种类似“一报还一报”的模式,在享受别人成果的同时,也承诺回报成果。

林纳斯认为GPL是一种公平的许可证。连接未来的路上前行,Linux能够发展到今天的程度绝对是当年林纳斯没有想到的。在手机中,在路由器里,在服务器云端,在股票交易大厅,甚至连太空的卫星都有Linux的身影。Linux在以不同的形式应用在不同行业,不同领域。

“自私”的应用域

而在未来,Linux除了应用到更多的领域,还将更强大、专业。根据Linux基金会公布的数据,越来越多的企业开发者在贡献代码。根据最新的数据,志愿者贡献的代码比例低至7.7%,余下的代码都是由企业开发者贡献的,其中Intel以12.9%占据榜单第一。

然而当有人问林纳斯Linux未来会如何时,林纳斯似乎并不想考虑太过遥远的事情。林纳斯表示思考未来这事让那群空想家去考虑好了,他只想脚踏实地的当一个程序员,尝试做到“可以做到的最好的效果”。

原文来自:http://***/linux-25-selfish.html

添加微信公众号linuxprobe,掌握最新IT资讯动态,免费领取Linux课程以及专业的RHCE考前答疑服务。

“自私”的Linux的更多相关文章

  1. Linux如此“自私”?

    Linux如此“自私”? “如果当时我真的知道从头建立一个操作系统的难度,肯定是不会有勇气去做的.”1991年8月25日,随着林纳斯·托瓦兹(Linus Torvalds)这句“天真”的描述,Linu ...

  2. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  3. linux命令行netstat总结

    1.所谓的监听就是某个服务程序会一直常驻在内存中,所以该程序启动的Port就会一直存在. 2.在小于1023的端口,都是需要以root身份才能够启动的. 3.大于1024以上的Port主要是作为cli ...

  4. Linux 线程调度策略与线程优先级

    Linux内核的三种调度策略 SCHED_OTHER 分时调度策略. 它是默认的线程分时调度策略,所有的线程的优先级别都是0,线程的调度是通过分时来完成的.简单地说,如果系统使用这种调度策略,程序将无 ...

  5. 《鸟哥的Linux私房菜》读书笔记2

    1. 压缩后缀与压缩程序: *.Z compress 程序压缩的档案; *.bz2 bzip2 程序压缩的档案; *.gz gzip 程序压缩的档案; *.tar tar 程序打包的数据,并没有压缩过 ...

  6. Linux系统编程之进程概念

    注:本文部分图片来源于网络,如有侵权,请告知删除 1. 什么是进程? 在了解进程概念之前,我们需要先知道程序的概念. 程序,是指编译好的二进制文件,这些文件在磁盘上,并不占用系统资源. 进程,指的是一 ...

  7. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  8. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  9. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

随机推荐

  1. call,apply,bind方法的总结

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user:"追梦子", fn:f ...

  2. Web前端业界氛围极好的群——鬼懿IT

    鬼群简介 鬼懿IT主群号:,鬼懿IT-成长群:181368696 , 创建于2005年12月 ,聚集的业内人事包括:阿当,大漠,辣妈,崔凯,Rei,周裕波,司徒正美,丸子,鬼森林,寒冬,franky, ...

  3. HDU 1164 Eddy's research I

    题目链接 题意 : 给你一个数,让你用它的素数质因子表示出来. 思路 : 先打一下表,因为会有重复的质因子,所以从大到小开始找,并且找到一个之后不能就接着往下找,要再找一遍这个数. #include ...

  4. SaaS系列介绍之十三: SaaS系统体系架构

    1 系统体系架构设计 软件开发中系统体系架构决定了一个系统稳定性.健壮性.可扩展性.兼容性和可用性,它是系统的灵魂.体系架构是架构师所关注的核心.良好的体系架构是系统成功的开端,否则,再好的代码与设计 ...

  5. 如何在服务(Service)程序中显示对话框

    原文:http://www.vckbase.com/index.php/wv/94 服务程序(Service)一般是不能和用户进行交互的,所以他一般是不能显示窗口的.要和用户进行交互(如显示窗口),我 ...

  6. asp.net中几个网页跳转的方法及区别

    1:注意:Response.Redirect("a.html")是不能跳出框架.IFRAME的. 可以使用 Response.Write("<script Lang ...

  7. Debug模式应用程序输出Debug调试信息(现成的宏定义,用于格式化打印信息)

    // Debug模式,主要输出一些调试的信息. #ifdef UNICODE #define _FILE_          _STR2WSTR(__FILE__) #define _FUNCTION ...

  8. SoapUI test WCF

    http://blogs.msdn.com/b/nabeelp/archive/2008/03/07/obscure-error-addressfilter-mismatch-at-the-endpo ...

  9. DefaultHashOperations multiget的一个坑

    DefaultHashOperations的multiget如果没有数据会返回java.util.Collections.EmptyList,这个List没有重写add方法. List<Long ...

  10. iOS处理XMl提供GDataXMLNode下载的链接

    GDataXMLNode .好东西,处理xml 在iOS 中使用.可以编辑和读取Xml文档.支持Xpath.这个很好. GDataXMLNode.h GDataXMLNode.m 文件很不好找啊. / ...