导读 “如果当时我真的知道从头建立一个操作系统的难度,肯定是不会有勇气去做的。”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. java基础知识回顾之---java String final类 容易混淆的java String常量池内存分析

    /** *   栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放  在常量池中). 堆(heap):存 ...

  2. hdu 1524 A Chess Game 博弈论

    SG函数!! 代码如下: #include<stdio.h> #include<cstring> #define I(x) scanf("%d",& ...

  3. *[codility]MinAvgTwoSlice

    https://codility.com/demo/take-sample-test/min_avg_two_slice 此题要求一个数组子段的最小的平均数(返回第一个数字的index).刚开始想记录 ...

  4. java代码实现自动登录功能

    通常我们登录某网站,会有选择保存几天,或者是几个星期不用登录,之后输入该网站地址无需登录直接进入主页面,那么这就叫做自动登录,怎么实现呢,下面我以一个小例子来演示一下 登录页面:login.jsp & ...

  5. sed and awk学习笔记

    sed and awk 背景 awk起源追溯至sed和grep,进而追溯至共同的行编辑器ed.实用工具grep来源于ed命令:g/re/p .实用工具awk和sed有一个共同的选项-f用于指定脚本的名 ...

  6. Java学习笔记之:Java的变量

    一.介绍 在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identifier [= value] ...] ; 格式 ...

  7. IDEA建项目的正确姿势

    今天建多模块的分布式项目的时候折腾死了,可能是建项目的方法不对,最后经过摸索,觉得这样是比较合适的: 首先建一个空的项目:Empty Project,就是项目文件夹 然后在里面建model

  8. 56. Merge Intervals

    题目: Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6], ...

  9. ios高版本SDK在低版本真机调试

    将build settings的ios deployment target改为对应真机系统版本即可

  10. 学习Hadoop的资料

    1)Cygwin相关资料 (1)Cygwin上安装.启动ssh服务失败.ssh localhost失败的解决方案 地址:http://blog.163.com/pwcrab/blog/static/1 ...