从UNIX到GitHub:十个关于自由和开源软件历史的重要事件

摘要: 本文记录了自由和开源历史上的一些重要时刻,也称得上是 FOSS 历史上的大事件。从 UNIX 的全盛时期,到 GNU 和 Linux 的诞生,再到 GitHub 将开源“民主化”,以及在它们之间的一切。

  现在看来,大家很容易会把开源软件当作是理所当然的,但事实上,我们应该知道自由和开源软件是经历了长达半个世纪的一系列漫长发展的产物。

  本文记录了自由和开源历史上的一些重要时刻,也称得上是 FOSS 历史上的大事件。从 UNIX 的全盛时期,到 GNU 和 Linux 的诞生,再到 GitHub 将开源“民主化”,以及在它们之间的一切。

  1969:UNIX 的诞生

  1969 年,AT&T 贝尔实验室的工程师开始开发 UNIX。此后的 10 年,UNIX 在学术机构和大型企业中得到了广泛的应用,当时的 UNIX 拥有者 AT&T公司以低廉甚至免费的许可将 UNIX 源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩充和改进。后来 AT&T 意识到了 UNIX 的商业价值,从 1979 年 UNIX 的版本 V7 开始,不再将 UNIX 源码授权给学术机构,并对之前的 UNIX 及其变种声明了版权权利。事实上,UNIX 在自由或开源软件的概念存在之前就已诞生,可以说,UNIX 从来都不是一个自由或开源的操作系统。从某种意义上来说,UNIX 在促进共享源码方面起了很小的作用。

  然而,围绕 UNIX 而成长起来的文化在后来的自由和开源软件的意识形态和社区诞生过程中起到了奠基性的作用。UNIX 的开发者和用户把自己看成是对抗软件商业化的“反叛者”,他们自由地共享源码,以分散的方式共同合作开发 UNIX 系统。

  1984:AT&T 将 UNIX 商业化

  从 UNIX 诞生起的前十五年,UNIX 操作系统的拥有者 AT&T 是被法院禁止从中获利的。起因是 1958 年 AT&T 为避免美国司法部起诉它违反《反垄断法》而签订的和解协议。AT&T 垄断了美国长途电话业务,因此它同意不进入计算机行业,不销售任何与计算机有关的产品,UNIX 是计算机操作系统,所以 AT&T 不能销售它,任何要求得到源码的机构,都能免费得到。

  然而在 1984 年,事情发生了变化,当时对 AT&T 的限制法令被解除,AT&T 开始以能获利的价格销售 UNIX。UNIX 的源码依然可用,但 AT&T 将 UNIX 从研究性质的项目转变为一个商业项目,这在 UNIX 黑客社区里产生了危机。他们开始寻找一个可替代的类 UNIX 系统,且不受商业陷阱的阻碍。

  1984:GNU 的诞生

  在AT&T 将 UNIX 商业化的同一年,理查德·斯托曼(简称 RMS)发起了 GNU 项目(GNU's Not Unix! 的递归缩写),目标是创建一个完全自由且向下兼容 UNIX 的操作系统。RMS 在 1985 年曾说过,GNU 是一个我正在编写的完全兼容 UNIX 的项目,所以我可以让每一个使用它的人都能自由地使用。

  GNU 项目刚启动时,自由软件这一现代概念也才刚刚诞生,即便是 RMS 也没能充分表达其中“自由”的含义,早期 GNU 项目的追随者轻易地认为 RMS 只是旨在开发不收任何费用的软件。

  然而,在接下来的几年里,由于开发者和公司越来越少地在发布程序的同时提供源码。此时,对于程序员和用户,GNU 的真正含义开始变得清晰。GNU 的重要性体现在项目承诺所有的源码都能自由使用。

  1985:自由软件基金会的建立

  随着 RMS 推动自由软件发展和成熟的愿景日益强烈,他意识到仅通过编写和分享 GNU 代码是远远不够的。于是,他建立了自由软件基金会来协助该计划。

  自由软件基金会(简称 FSF)是一个致力于推广自由软件的美国民间非营利性组织。它于 1985 年 10 月由理查德·斯托曼建立。其主要工作是运行 GNU 计划,开发更多的自由软件。FSF 帮助创建了保护 GNU 和其他自由软件项目的法律和制度框架。

  1991:Linux 内核的诞生

  作为操作系统,GNU 最大的问题是具有完备功能的内核尚未被开发成功。虽然 GNU 项目的开发者成功编写了大量重要的程序,但他们努力创建一个类似 UNIX 的内核来完善 GNU 的工作却长期停滞不前。GNU 的内核,称为Hurd,是自由软件基金会发展的重点,今天仍在开发中,经过近三十年的开发,它仍然不能可靠地用于生产环境。同时,BSD 项目的自由软件内核也受到法律方面问题的困扰。

  这为 Linux 内核创建了一个开放的机会。Linux 内核是 1991 年 Linus Torvalds 在其大学时期开发的一个项目,并将代码贡献了出来。最初,Linus 采用的是自己拟定的许可证,这个许可证会限制商业使用,后来他转用了 GNU 项目使用的 GPL 许可证。当时 GNU 项目仍未完成,GNU 系统软件集与 Linux 内核结合后,GNU 软件构成了这个 POSIX 兼容操作系统 GNU/Linux 的基础。

  所以,Linux 内核填补了 GNU 用户需要完整的且使用自由软件的类 UNIX 系统的空白。

  1998:开源峰会 (Open Source Summit)

  到了 20 世纪 90 年代后期,GNU,Linux 以及其他重要项目(如 Apache)的自由软件越来越普及。

  由于像 Eric S. Raymond 这样的黑客们开始担心 RMS 和 FSF 在推动自由软件的时候,受意识形态的影响太深,从而与现实脱节。Raymond 和他的追随者认为,为了自由软件尽可能大范围地取得成功,他们应该侧重于提供源代码的实用价值,而不是过多的涉及共享和道德的哲学原则。

  同时期,Netscape 宣布将其 Navigator 浏览器的源代码在 Internet 上公布。这一系列举动使得在 1998 年 2 月 3 日,资深黑客 Eric S. Raymond 邀请了大约十几个自由软件社区的著名成员一起开会(RMS 没被邀请),希望可以促使更多公司能够理解黑客社区早已行之有时的开放式软件开发流程的独特优势,使这种先进流程能够得到更广泛的应用。与会者都认为,这是一个有助于消除过去人们对“自由软件”存在误解的大好时机,除了 free(免费?自由?)这个词的含混之外,还有自由软件给公众留下的宗教化和喜对抗的印象,从实际出发,针对企业的顾虑,将自由软件中实用和有助于业务的核心理念推广出去。

  与会者决定使用“开源软件(open source software)”来代替“自由软件(free software)”,以推广开源这一概念,让大众更清晰地明白其与自由软件之间的差别,并以较少的意识形态方式来传递价值。

  1999:Red Hat 的 IPO

  1999 年 8 月 11 日,红帽公司正式上市,成为第一家开始公开交易的开源公司,这是自由和开源软件具有商业意义最有力的证明。

  虽然在同一时期上市的其他开源公司 —— 尤其是 VA Linux,它的表现并不好,但红帽仍然是当今开源市场中的领先公司。

  2004:Ubuntu 的推出

  到 20 世纪 90 年代末,已经提供了许多 GNU/Linux 发行版。但因为缺少对用户友好的图形界面程序,除了极客之外,极少的用户能熟练使用。

  诞生于 2004 年 10 月 20 日的 Ubuntu 改变了这个情况。Ubuntu 由南非慈善家和企业家 Mark Shuttleworth 所创立,被称为“为人类而生的 Linux”。

  Ubuntu 的目标在于为一般用户提供一个最新同时又相当稳定且拥有友好的界面,主要以自由软件构建而成的操作系统。Ubuntu 目前拥有蓬勃发展的用户社区,具有庞大的社区力量支持,用户可以方便地从社区获得帮助,是目前使用最广泛的 GNU/Linux 发行版。

  2007:Android 的推出

  将自由和开源软件提供给最多人使用的软件项目无疑是 Android 移动设备操作系统。Android 是使用最广泛的移动应用平台。

  虽然大多数 Android 用户可能不知道 Android 部分是基于 Linux 内核的,然而,很多自由和开源软件的倡导者抱怨 Android 的许可证没有提供软件自由,而且 Android 设备往往会被专有的组件和预装软件限制着,类似这种使用的不便,更多人倾向于使用 GNU/Linux。对于这种情况,Android 的开发者认为“Android 不是 Linux”,尽管有这个平台的根源。

  2008:GitHub 将开源“民主化”

  最初,大多数自由和开源软件项目的贡献者通过电子邮件或私有的版本控制系统(如 Subversion 或 BitKeeper)进行协作。这种做法不仅笨重(因为没有集中的、精简的位置来查找开源项目和为其贡献),而且某些版本控制系统还是专有的。

  诞生于 2008 年的 GitHub 改变了这一情况。GitHub 提供使用 Git 进行版本控制的软件源代码托管服务。Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 开发,于 2005 年在 GPL 开源许可证下发布。最初目的是为更好地管理 Linux 内核的开发,用于替代他们曾经使用的闭源解决方案 —— BitKeeper。

  GitHub 的出现,使得更多开发者能更方便地参与开源项目,为开源项目贡献,任何人都可以轻松提交自己的代码,并在 GitHub 上托管自己的开源项目。

  因为几乎所有人都把自己的代码托管在 GitHub 上,所以更容易查找开源项目,而且协作方式的改变,开发者也不再需要获得开发者社区的权限才能参与开源项目。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2280端口映射到公网,发现经常被暴力破解,自己写了个临时封禁ip功能的脚本,实现5分钟内同一个ip登录密码错误10次就封禁这个ip5分钟,并且进行邮件通知使用步骤openwrt为19.07.03版本,其他版本没有测试过安装bashmsmtpopkg
#!/bin/bashcommand1&command2&wait从Shell脚本并行运行多个程序–杨河老李(kviccn.github.io)
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/phpls-ls 2.编辑修改.bash_profile文件(没有.bash_profile文件的情况下回自动创建)sudovim~/.bash_profile在文件的最后输入以下信息,然后保存退出exportPATH="/Applications/MAMP/bin/php/php7.2.20/b
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如zh_CN之类的语言包,进行中文语言包装:apt-getinstalllanguage-pack-zh-hans3、安装好后我们可以进行临时修改:然后添加中文支持: locale-genzh_CN.UTF-8临时修改> export LC_ALL='zh_CN.utf8'> locale永久
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexadecimalbash2#[0~1]0[0~7]0x[0~f]or0X[0~f]perl0b[0~1]0[0~7]0x[0~f]tcl0b[0~1]0o[0~7]0x[0~f]bashdifferentbaserepresntationreference2.StringlengthLanguageStr
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全命令补全方法:yum-yinstallbash-completionsource/usr/share/bash-completion/bash_completionsource<(kubectlcompletionbash)echo"source<(kubectlcompletionbash)">>~/.bashrc 
参考这里启动jar包shell脚本修改过来的#!/bin/bash#默认应用名称defaultAppName='./gadmin'appName=''if[[$1&&$1!=0]]thenappName=$1elseappName=$defaultAppNamefiecho">>>>>>本次重启的应用:$appName<
#一个数字的行#!/bin/bashwhilereadlinedon=`echo$line|sed's/[^0-9]//g'|wc-L`if[$n-eq1]thenecho$linefidone<1.txt#日志切割归档#!/bin/bashcd/data/logslog=1.logmv_log(){[-f$1]&&mv$1$2
#文件增加内容#!/bin/bashn=0cat1.txt|whilereadlinedon=[$n+1]if[$n-eq5]thenecho$lineecho-e"#Thisisatestfile.\n#Testinsertlineintothisfile."elseecho$linefidone#备份/etc目录#
# su - oraclesu: /usr/bin/ksh: No such file or directory根据报错信息:显示无法找到文件 /usr/bin/ksh果然没有该文件,但是发现存在文件/bin/ksh,于是创建了一个软连接,可以规避问题,可以成功切换到用户下,但无法执行系统自带命令。$. .bash_profile-ksh: .: .b
history显示历史指令记录内容,下达历史纪录中的指令主要的使用方法如果你想禁用history,可以将HISTSIZE设置为0:#exportHISTSIZE=0使用HISTIGNORE忽略历史中的特定命令下面的例子,将忽略pwd、ls、ls-ltr等命令:#exportHISTIGNORE=”pwd:ls:ls-ltr:”使用HIS
一.命令历史  1.history环境变量:    HISTSIZE:输出的命令历史条数,如history的记录数    HISTFILESIZE:~/.bash_history保存的命令历史记录数    HISTFILLE:历史记录的文件路径    HISTCONTROL:     ignorespace:忽略以空格开头的命令
之前在网上看到很多师傅们总结的linux反弹shell的一些方法,为了更熟练的去运用这些技术,于是自己花精力查了很多资料去理解这些命令的含义,将研究的成果记录在这里,所谓的反弹shell,指的是我们在自己的机器上开启监听,然后在被攻击者的机器上发送连接请求去连接我们的机器,将被攻击者的she
BashOne-LinersExplained,PartI:Workingwithfileshttps://catonmat.net/bash-one-liners-explained-part-oneBashOne-LinersExplained,PartII:Workingwithstringshttps://catonmat.net/bash-one-liners-explained-part-twoBashOne-LinersExplained,PartII
Shell中变量的作用域:在当前Shell会话中使用,全局变量。在函数内部使用,局部变量。可以在其他Shell会话中使用,环境变量。局部变量:默认情况下函数内的变量也是全局变量#!/bin/bashfunctionfunc(){a=99}funcecho$a输出>>99为了让全局变量变成局部变量
1、多命令顺序执行;  命令1;命令2  多个命令顺序执行,命令之间没有任何逻辑联系&&  命令1&&命令2  逻辑与,当命令1正确执行,才会执行命令2||  命令1||命令2  逻辑或,当命令1执行不正确,才会执行命令2例如:ls;date;cd/home/lsx;pwd;who ddif=输入文件of=输
原博文使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?首先,这个符号(#!)的名称,叫做"Shebang"或者"Sha-bang"。Linux执行文件时发现这个格式,会把!后的内容提取出来拼接在脚本文件或路径之前,当作实际执行的命令。 Shebang这个符号通常在Unix系统的脚本
1、历史命令history[选项][历史命令保存文件]选项:-c:  清空历史命令-w:  把缓存中的历史命令写入历史命令保存文件 ~/.bash_historyvim/etc/profile中的Histsize可改存储历史命令数量历史命令的调用使用上、下箭头调用以前的历史命令使用“!n”重复执行第n条历史
目录1.Shell脚本规范2.Shell脚本执行3.Shell脚本变量3.1环境变量3.1.1自定义环境变量3.1.2显示与取消环境变量3.1.3环境变量初始化与对应文件的生效顺序3.2普通变量3.2.1定义本地变量3.2.2shell调用变量3.2.3grep调用变量3.2.4awk调用变量3.3
   http://www.voidcn.com/blog/wszzdanm/article/p-6145895.html命令功能:显示登录用户的信息命令格式:常用选项:举例:w显示已经登录的用户及正在进行的操作[root@localhost~]#w 11:22:01up4days,21:22, 3users, loadaverage:0.00,0.00,0.00USER