【CSDN 编者按】所有开发者应该都了解过Linux系统,它也是自由软件和开放源代码软件发展中的成功典范。在漫长的发展史中,Linux的背后却藏着许多有意思的小故事,本文作者Lars Wirzenius是Linux之父Linus作为之前的同事,一同见证Linux的创立,让我们跟随Lars Wirzenius的视角,来了解Linux创立和早期发展的全过程。

作者 | Lars Wirzenius

译者|陈静琳    责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

我的名字叫Lars Wirzenius,我见证了Linux最初的创立。现在,Linux在全球范围内取得了成功,但它的起点却相当卑微。以下是我对Linux最早的记忆,它的创建,以及它走向今天的道路的开始。

1988年秋天,我开始在芬兰赫尔辛基大学学习计算机科学,并认识了Linus Torvalds(Linux内核的最早作者),他是那年计算机科学专业另一个讲瑞典语的新学生。在大学第一年结束时,我们得到了一台Unix服务器的访问权,我无意中发现了Usenet(1979年杜克大学的研究生汤姆·特拉斯科特与吉姆·埃利斯设计),即分布式的互联网交流系统,因为我把rm错打成rn,就变成了Usenet阅读器。我把这件事告诉了Linus,我们花了许多的时间来探索这个问题,就有了后续的故事。

Linux开始于一台组装电脑

第一年之后,我们都去服义务兵役了,虽然在不同的地方。1990年秋天,我们回到大学学习,都参加了C和Unix编程的课程,其中也包括相当多的Unix内核架构的理论。这导致我们也去了解了其他操作系统的内核,如QNX和Plan 9,我们满怀热情地讨论了如何正确构建一个操作系统,当时我们拥有着20岁大学生的一腔热血,对未来有着美好的憧憬。

1991年1月,Linus从当地一家用零件组装电脑的商店买了他的第一台电脑。这台电脑有一个386的CPU,这在当时是比较花哨的,因为Linus想探索多任务。此外,因为这台电脑是用零件组装的,它还来自32位摩托罗拉68008CPU的辛克莱QL(Sinclair Research于1984 年推出的个人电脑),他想要一个32位的CPU,而不想降到16位,所以286不是一个好的选择。Linus的第一台个人电脑有高达4兆字节的内存和一个硬盘驱动器,已经是当时非常先进的机器。

Linus得到了一份《波斯王子》的游戏拷贝,把将大部分时间用来玩游戏。后来他还买了一份MINIX(是一个迷你版本的类Unix操作系统),因为在大学使用Unix后,他也想在家里使用类似的东西。

第一个版本:As和Bs

完成游戏后,Linus开始学习英特尔汇编语言。有一天,他给我看了一个做多任务的程序。一个任务或线程会在屏幕上写一个字母 "A",另一个是 "B";当 "As "变成 "B "的时候,上下文的切换在视觉上是很明显的。这就是后来被称为Linux内核的第一个版本。

在这期间,即1991年春末,我为他写了一个C语言sprintf()函数的实现,因为他还没有学会如何写带有变量参数列表的函数。我想让他不必为每一种类型的值都要写出不同的函数而感到痛苦,对于更安全的Snprintf()函数,代码的核心仍然在内核中。

随着时间的推移,Linus不断实现新的东西,使他刚刚起步的内核变得更好。一段时间后,他有了键盘和串口的驱动程序,模拟了VT100终端的屏幕转义序列,并且可以用它通过调制解调器拨号到大学,从家里阅读Usenet。简直像一本科幻小说! 有一天,Linus意外地试图用他的硬盘拨号到大学,导致他的主引导扇区以“ATDT”和大学调制解调器池电话号码开头,从中恢复过来后,他在他的内核中实现了文件权限。

1991年8月,Linus在comp.os.minix新闻组中第一次公开提到他的新内核。这包括他说的一句话:"我正在做一个(免费)操作系统,只是一个爱好,不会像GNU那样大而专业"。这次公开是如此谦虚,接着该系统最初被称为Freax。几周后,Linus让ftp.funet.fi(网站服务器)的管理员之一Ari Lemmke上传了第一个tar档案。Ari选择了Linux这个名字,最初的版本仍然包含嵌入在一个源文件中的原始名称。

在这段时间里,人们对这个新事物很感兴趣,所以Linus需要提供一个安装方法和说明。由于他只有一台电脑,所以他来拜访我,要在我的电脑上安装。并且因为他的电脑是用来开发Linux的,而Linux只是在他的Minix安装基础上发展起来的,所以以前从未真正安装过。因此,我的电脑是第一台安装Linux的电脑!当这一切发生时,我正在打盹,我推荐这种安装Linux的方法:打盹,而Linus去做这些艰苦的工作。

Linux的第一个版本使用的是禁止商业使用的许可,然而一些早期的贡献者建议将其改为自由软件许可证。1991年秋天,Richard Stallman(GNU项目发起人)访问芬兰,我带Linus去听Stallman的演讲。因为来自贡献者的压力,以及我的唠叨,最终说服了Linus在1992年初选择GNU GPL(General Public License)许可证。

在圣诞节期间,Linus在Linux中实现了虚拟内存。这使得Linux在内存不足的廉价机器上成为更实用的操作系统。

重要的一年

1992年以与Andrew Tanenbaum的著名辩论开始,他是一位大学教授和MINIX的作者,因为他对Linux和它的结构有一些看法,同时Linus对MINIX也有看法,所以他们有了一场被描述为火焰战争的辩论,但事后看来其实是相当文明的。

其实对于Linux未来的成功而言,更重要的是X11系统被移植到了Linux上,使1992年成为Linux桌面快捷方式重要的一年。

于我而言,我选择了在社区方面做出贡献,而不是直接对内核做出贡献,并且帮助回答问题,编写文档等等。我还经营了一份关于Linux的短暂的通讯,它主要是因为发表了对Linus的第一次采访而受到关注,但是该通讯实际上被comp.os.linux.announce新闻组所取代。

第一个Linux发行版也开始于1992年:SLS(Softlanding Linux System)。第二年,SLS演变成Slackware(Patrick Volkerding制作的Linux发行版本),这激发了Ian Murdock在1993年创办Debian,以探索一个更加基于社区的开发结构。在接下来的几年里,还有一些其他的发行版也随之而来。

1993年,Linus和我都被聘为大学的助教,我们共用一间办公室。那个房间有一台PC,Linus接管了它,并用于Linux的开发。彼时,我对一台DEC终端用于访问Usene(讨论系统)感到非常满意。

有一天,Linus感到很无聊,因为工作中的电脑感觉很慢,所以他花了一天时间用汇编语言重写了Linux内核的命令行分析器,以提高速度。(当然,那其实是毫无意义的,解析器后来又用C语言重写了一遍,以利于移植,所以它的速度并不重要)。几年后,他拿到了一台较新的PC,表面说是为了测试内核内存管理的压力,其实是花了好几天时间玩Quake游戏,有很多乐趣被停留在那个房间里。

后来,Linux获得了对Ethernet(以太网)和TCP/IP(Transmission Control Protocol/Internet Protocol)的支持,这意味着人们无需使用调制解调器就可以阅读Usenet。可惜的是,早期的Linux网络代码偶尔会有些粗糙,因为它是从头开始写的。有一次,Linux发送了一些破损的数据包,导致网络上所有的Sun机器瘫痪。由于很难修复Sun的内核,Linux被禁止进入大学网络,不能从自己的办公桌上便捷访问Usenet很好的激励了修复进程,直到它的错误被修复完成。

“开源“被真正创造出来

在1994年春天,我们觉得Linux已经完成了,没有什么可补充的了。人们可以用Linux来编译自己,阅读Usenet,并同时运行许多xeyes程序的副本。彼时,我们决定发布1.0版本,并安排了一个发布活动。我们邀请了芬兰的计算机媒体,一家电视台甚至派出了一个摄制组,活动的大部分内容是在后台隆重地编译Linux 1.0,而Linus和其他人则讲述了什么是Linux以及它有什么好处。Linus解释说,用于个人电脑的商业Unix是如此昂贵,因此编写自己的Unix更容易。

1995年,Linus和我在大学里上了一门软件工程课程,其中大部分是一个大型的实践项目,不过建立在Linux的基础之上。我坚持要使用一个版本控制系统,因为我在以前的课程中看到学生们大喊大叫的版本控制:学生们通过NFS(Network File System)共享一个源代码树,当他们改变什么的时候,就大喊 "我正在编辑这个文件"。我认为这不是一个有效的方法,所以我坚持使用CVS(Concurrent Versions System),这是我刚刚了解到Linus不喜欢CVS的经历,并且多年来拒绝使用任何版本控制,除了将tar球(使用gzip压缩程序压缩的文件)上传到FTP网站(File Transfer Protocol)。

那一年Linus首次把Linux移植到新的架构上,他得到了一台DEC Alpha机器(64位指令架构微处理器)。我后来会把这台机器用作阅读Usenet的终端,其他人将Linux移植到其他架构上,但这并没有让我得到更多的机器来阅读Usenet。

1997年,Linus毕业并搬到了美国,在Transmeta公司(一家设计超长指令字代码转译微处理器的美国有限公司)工作,而我在芬兰赫尔辛基地区的另一所大学找到了一份工作。

在接下来的几年里,发生了很多事情。事实证明,Linux仍然有一些缺失的功能,所以人们在这些方面进行努力。术语 "open source(开放源代码)"被创造出来,IBM(International Business Machines Corporation),是美国一家跨国科技公司及咨询公司,在Linux开发中投入了大量的资金。彼时,网景公司发布了一个开源版本的网络浏览器,又随着时间的推移,开放源码基本上占领了世界。LWN(Eklektix公司旗下的计算网络杂志,着重于针对Linux和其他类Unix操作系统的自由软件和软件)开始逐周报道了这段历史的大部分内容。

1991年,Linus写道,Linux "不会像GNU那样大而专业"。在2023年。Linux正在每个大陆、每个海洋、数十亿台设备上、在轨道上和火星上运行。而对于一开始只是两个简单的线程,在屏幕上写As和Bs的流来说,这还不错。

推荐阅读:

▶ 用 GPT-4 在黑客大赛上“炸场”:不完全会 Linux、Perl,似乎也没有关系了!

▶ AI 入侵前端,哪类工程师最危险?

▶HarmonyOS 最热门、生态成“老大难”,揭晓数万名开发者眼中的国产操作系统!

Linux 往事:一个不会像 GNU 那样大而专业的 OS 是如何成为主流的?相关推荐

  1. Linux下的ATT语法(即GNU as 汇编语法)入门

    学习这么长时间,一直在C语言这一层面上钻研和打拼,日积月累,很多关于C的疑惑在书本和资料中都难以找到答案.程序员是追求完美的一个种群,其头 脑中哪怕是存在一点点的思维黑洞都会让其坐卧不宁.不久前在it ...

  2. linux如果一个目录具有执行,Linux操作系统部分复习题答案

    第一章 Linux系统简介 一.思考题 1.UNIX的大部分代码是用一种流行的程序设计语言编写的,该语言是什么? C语言 2.UNIX系统的特点有哪些? ·多任务 ·多用户 ·并行处理能力 ·设备无关 ...

  3. 龙芯(Loongarch64),在Linux虚拟一个龙芯OS体验下

    前言 想体验下龙芯OS,但是又没有龙芯开发板或者龙芯实体机.手头上只有一个X64环境的Linux发行版,应该怎么做呢? 概括 其实非常简单,可以通过Chroot命令和Qemu在X64的指令集系统上模拟 ...

  4. 向Linux增加一个系统调用或内核模块

    向Linux增加一个系统调用或内核模块 配置环境 获取root权限 sudo su 更新系统 sudo apt-get update 安装相关编译程序包 sudo apt-get install li ...

  5. Linux 是一个适应性很强的平台,支持多种使用模型

    M. Tim Jones, 独立作家, 顾问 简介: Linux 无处不在.从最小的智能手机,到 Internet 的虚拟骨干网,再到体积最大.功能最强的超级计算机,Linux 的影子几乎无所不在.能 ...

  6. linux 下一个 osw先从操作系统和标准脚本主动发起

    linux 下一个 osw与操作系统的引导和启动标准的脚本.osw它指的是--os watcher,这是一个显示器os这些指标shell脚本.osw监测数据一般使用oracle技能评估os资源的使用, ...

  7. linux挂载一个文件夹,linux挂载一个文件夹到另一个文件夹

    linux 挂载一个文件夹到另一个文件夹 Most Linux and Unix file systems don't allow hard links to directories (except ...

  8. linux mount挂载命令(将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来)

    看海康摄像头启动脚本有一些mount命令,不知道干啥用的... mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹, ...

  9. linux cfs,朴素的UNIX之-Linux CFS一个注释

    朴素的UNIX之-Linux CFS一个注释 发布时间:2020-05-29 08:33:29 来源:51CTO 阅读:604 作者:dog250 本系列名为朴素的UNIX,但是也包括各个类UNIX系 ...

最新文章

  1. 10.Azure应用程序网关(上)
  2. 判断大小简单算法_JVM GC算法
  3. python中字符串注意事项
  4. eBPF 入门之编程
  5. 通过实验理解交换的三个fast特性
  6. flash builder 序列号
  7. 万年历(hao123)代码
  8. “Only fullscreen opaque activities can request orientation “问题分析
  9. Appium从环境搭建到测试脚本编写(四)
  10. 一夜撸700万,羊毛党不光薅羊毛,还吃羊肉吸羊血。
  11. 用计算机计算告白密码,阿拉伯数字高级表白密码 很火的表白密码
  12. 二分算法实例应用(二)
  13. 无线宽带好用吗?有哪些优势?
  14. 《Linux7构搭建DISCUZ论坛 》
  15. html版心怎么设置,怎样设置Word版心啊?
  16. 生物学上描述DNA/RNA的长度常用的kb、nt、bp是指什么
  17. Webpack中的sourcemap以及如何在生产和开发环境中合理的设置sourcemap的类型
  18. 远程答题系统有哪些?远程答题系统如何使用
  19. 可视化大屏的几种适配方案
  20. mysql10038_关于MySql 10038错误的完美解决方法(三种)

热门文章

  1. confluence
  2. Win10前面板插口耳机无声音,无Realtek控制器,前置耳机孔无法使用解决方案!
  3. 大众易融迎“端午”活动公告
  4. 抽奖活动mysql表设计_购物商城数据库设计-商品表设计
  5. 进销存系统中的多计量单位
  6. 为什么你和同事关系处不好?
  7. JS实现网站的简体字与繁体字转换
  8. mysql 截取身份证出生日期
  9. 什么是同源策略,所带来的影响
  10. 共享汽车充电桩方案开发详解