Linux 往事:一个不会像 GNU 那样大而专业的 OS 是如何成为主流的?
【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 是如何成为主流的?相关推荐
- Linux下的ATT语法(即GNU as 汇编语法)入门
学习这么长时间,一直在C语言这一层面上钻研和打拼,日积月累,很多关于C的疑惑在书本和资料中都难以找到答案.程序员是追求完美的一个种群,其头 脑中哪怕是存在一点点的思维黑洞都会让其坐卧不宁.不久前在it ...
- linux如果一个目录具有执行,Linux操作系统部分复习题答案
第一章 Linux系统简介 一.思考题 1.UNIX的大部分代码是用一种流行的程序设计语言编写的,该语言是什么? C语言 2.UNIX系统的特点有哪些? ·多任务 ·多用户 ·并行处理能力 ·设备无关 ...
- 龙芯(Loongarch64),在Linux虚拟一个龙芯OS体验下
前言 想体验下龙芯OS,但是又没有龙芯开发板或者龙芯实体机.手头上只有一个X64环境的Linux发行版,应该怎么做呢? 概括 其实非常简单,可以通过Chroot命令和Qemu在X64的指令集系统上模拟 ...
- 向Linux增加一个系统调用或内核模块
向Linux增加一个系统调用或内核模块 配置环境 获取root权限 sudo su 更新系统 sudo apt-get update 安装相关编译程序包 sudo apt-get install li ...
- Linux 是一个适应性很强的平台,支持多种使用模型
M. Tim Jones, 独立作家, 顾问 简介: Linux 无处不在.从最小的智能手机,到 Internet 的虚拟骨干网,再到体积最大.功能最强的超级计算机,Linux 的影子几乎无所不在.能 ...
- linux 下一个 osw先从操作系统和标准脚本主动发起
linux 下一个 osw与操作系统的引导和启动标准的脚本.osw它指的是--os watcher,这是一个显示器os这些指标shell脚本.osw监测数据一般使用oracle技能评估os资源的使用, ...
- linux挂载一个文件夹,linux挂载一个文件夹到另一个文件夹
linux 挂载一个文件夹到另一个文件夹 Most Linux and Unix file systems don't allow hard links to directories (except ...
- linux mount挂载命令(将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来)
看海康摄像头启动脚本有一些mount命令,不知道干啥用的... mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹, ...
- linux cfs,朴素的UNIX之-Linux CFS一个注释
朴素的UNIX之-Linux CFS一个注释 发布时间:2020-05-29 08:33:29 来源:51CTO 阅读:604 作者:dog250 本系列名为朴素的UNIX,但是也包括各个类UNIX系 ...
最新文章
- 10.Azure应用程序网关(上)
- 判断大小简单算法_JVM GC算法
- python中字符串注意事项
- eBPF 入门之编程
- 通过实验理解交换的三个fast特性
- flash builder 序列号
- 万年历(hao123)代码
- “Only fullscreen opaque activities can request orientation “问题分析
- Appium从环境搭建到测试脚本编写(四)
- 一夜撸700万,羊毛党不光薅羊毛,还吃羊肉吸羊血。
- 用计算机计算告白密码,阿拉伯数字高级表白密码 很火的表白密码
- 二分算法实例应用(二)
- 无线宽带好用吗?有哪些优势?
- 《Linux7构搭建DISCUZ论坛 》
- html版心怎么设置,怎样设置Word版心啊?
- 生物学上描述DNA/RNA的长度常用的kb、nt、bp是指什么
- Webpack中的sourcemap以及如何在生产和开发环境中合理的设置sourcemap的类型
- 远程答题系统有哪些?远程答题系统如何使用
- 可视化大屏的几种适配方案
- mysql10038_关于MySql 10038错误的完美解决方法(三种)