当前位置: 首页 > news >正文

Linux历史

Linux 于 1991 年由芬兰学生 Linus Torvalds 作为个人项目开始,旨在创建一个新的免费操作系统内核。在其历史发展中,Linux 内核经历了持续的增长。自 1991 年首次发布源代码以来,Linux 内核从少量的 C 语言文件,且受限于禁止商业发行的许可,逐步发展到 2018 年发布的 4.15 版本,其源代码行数已超过 2330 万行(不包括注释)。Linux 内核在 GNU 通用公共许可证第 2 版(GPLv2)下发布,且带有系统调用例外条款,意味着通过系统调用使用内核的内容不受 GNU GPL 的约束。

促成 Linux 诞生的事件

在这里插入图片描述

Ken Thompson(左)和 Dennis Ritchie(右)是 Unix 操作系统的创建者。在 AT&T 退出 Multics 项目之后,Ken Thompson 和 Dennis Ritchie(两人均为 AT&T 贝尔实验室的员工)于 1969 年设计并实现了 Unix 操作系统,并在 1970 年首次发布。随后,他们使用一种新编程语言 C 重写了 Unix 以使其具有可移植性。Unix 的开放性和可移植性使其被学术机构和企业广泛采用、复制和修改。

1977 年,伯克利计算机系统研究小组(CSRG)基于 AT&T 的第六版 Unix 开发了伯克利软件发行版(BSD)。由于 BSD 包含了 AT&T 所拥有的 Unix 代码,AT&T 在 1990 年代初对加利福尼亚大学提起诉讼(USL 诉 BSDi 案),这极大地限制了 BSD 的发展和应用。

Onyx Systems 于 1980 年开始销售基于微型计算机的早期 Unix 工作站。后来,Sun Microsystems 公司作为斯坦福大学学生项目的衍生公司,亦在 1982 年开始销售基于 Unix 的桌面工作站。尽管 Sun 的工作站没有像后来 Linux 那样利用通用 PC 硬件,但它代表了第一个成功商业化的运行 Unix 操作系统的单用户微型计算机的分发尝试。

1983 年,Richard Stallman 启动了 GNU 项目,目标是创建一个自由的类 Unix 操作系统。作为该项目的一部分,他编写了 GNU 通用公共许可证(GPL)。到 1990 年代初,几乎有足够的软件来创建一个完整的操作系统。然而,GNU 的内核(名为 Hurd)未能吸引足够的开发资源,导致 GNU 系统不完整。

1985 年,Intel 发布了 80386 处理器,这是首个带有 32 位指令集和分页内存管理单元的 x86 微处理器。

1986 年,AT&T 贝尔实验室的 Maurice J. Bach 发表了《UNIX 操作系统的设计》一书,详细介绍了 System V Release 2 的内核,以及 Release 3 和 BSD 的一些新特性。

1987 年,Andrew S. Tanenbaum 发布了 MINIX,这是一种类 Unix 系统,旨在用于学术教学,展示其教材《操作系统:设计与实现》中的原理。尽管 MINIX 提供了源代码,但其修改和重新分发受到限制。此外,MINIX 的 16 位设计不适应日益普及的 32 位 Intel 386 个人计算机架构。在 1990 年代初,面向 Intel 386 个人计算机的商业 Unix 操作系统价格过高,个人用户难以承受。

这些因素,加上缺乏被广泛采用的免费内核,促使 Linus Torvalds 启动了他的项目。他曾表示,如果当时 GNU Hurd 或 386BSD 内核可用,他很可能不会编写自己的内核。

Linux的诞生

Linus Torvalds 于 2002 年 1991 年,在赫尔辛基大学攻读计算机科学专业期间,Linus Torvalds 开始了一个项目,这个项目后来成为了 Linux 内核。他专门为他当时使用的硬件编写了该程序,并且独立于任何操作系统,因为他希望能够充分利用他新购置的 80386 处理器的功能。开发工作是在 MINIX 系统上使用 GNU C 编译器完成的。

1991 年 7 月 3 日,Linus Torvalds 为了在他的项目中实现 Unix 系统调用,尝试从 comp.os.minix 新闻组中获取 POSIX 标准文档的数字副本,但未能成功获取。因此,Torvalds 最初使用赫尔辛基大学用于运行 Sun Microsystems 服务器的 SunOS 文档来确定系统调用。他还从 Andrew S. Tanenbaum 的 MINIX 教材中学到了一些系统调用,该教材是 Unix 课程的一部分。

正如 Torvalds 在其著作《Just for Fun》中所写的,他最终写出了一个操作系统内核。1991 年 8 月 25 日,年仅 21 岁的 Torvalds 在 comp.os.minix 新闻组上发布了这个系统的公告:

"大家好,使用 MINIX 的朋友们:

我正在开发一个(免费的)操作系统(仅仅是个业余项目,不会像 GNU 那样大和专业),适用于 386(486) AT 克隆机。这个项目自 4 月以来一直在进行,现在开始接近完成了。我希望能听到大家对 MINIX 的喜欢或不喜欢之处的反馈,因为我的操作系统在某些方面有些类似(例如文件系统的物理布局,出于实用原因)。

目前我已经移植了 bash(1.08) 和 gcc(1.40),它们似乎工作正常。这意味着几个月内我可能会有一些实用的东西,我想知道大多数人希望有哪些功能。任何建议都欢迎,不过我不保证会实现它们 😃

Linus(torvalds@kruuna.helsinki.fi)

PS:是的——它没有任何 MINIX 的代码,并且它有一个多线程文件系统。它不具有可移植性(使用了 386 的任务切换等),并且可能永远只支持 AT 硬盘,因为那是我唯一拥有的 😦"

根据 Torvalds 的说法,Linux 在 1992 年开始变得重要,这是因为 Orest Zborowski 将 X Window 系统移植到 Linux,使其首次支持图形用户界面(GUI)。

在这里插入图片描述

命名

Linus Torvalds 最初想把他的发明命名为 “Freax”,这个词结合了 “free”(自由)、“freak”(狂热者)和 “x”(表示与 Unix 的联系)。在系统开发的初期,他将文件以 “Freax” 这个名字保存了大约半年。尽管 Torvalds 曾考虑过 “Linux” 这个名字,但他最初觉得这个名字过于自我中心。

1991 年 9 月,为了方便开发,Torvalds 将文件上传至 FUNET 网络的 FTP 服务器(ftp.funet.fi)。赫尔辛基科技大学的志愿管理员 Ari Lemmke 认为 “Freax” 这个名字不太好,因此未经 Torvalds 许可,将项目命名为 “Linux”。后来,Torvalds 同意使用 “Linux” 这个名称。

为了演示 “Linux” 的正确发音([ˈliːnʊks]),Torvalds 在内核源代码中附带了一个音频指南。

Linux使用GNU GPL 许可

最初,Torvalds 在自己的许可下发布了 Linux 内核,该许可对商业活动有限制。与内核配合使用的软件是 GNU 项目开发的软件,并基于 GNU 通用公共许可证 (GPL) 授权。Linux 内核的第一个版本 Linux 0.01 包含了 GNU 的 Bash shell 的二进制文件。

在 0.01 版本的发布说明中,Torvalds 列出了运行 Linux 所需的 GNU 软件,并指出 “仅有内核是不够的,你还需要一个 shell、编译器、库等。” 这些工具大多是 GNU 软件,且在 GNU Copyleft 许可证下发布。

1992 年,Torvalds 提议将内核改为在 GNU GPL 许可下发布,并在 0.12 版本的发布说明中宣布了这一决定。同年 12 月,他发布了 0.99 版本,并正式采用了 GNU GPL 许可证。Linux 和 GNU 开发者随后合作,将 GNU 组件与 Linux 内核整合,形成了一个完整的自由操作系统。Torvalds 表示,“将 Linux 采用 GPL 许可证绝对是我做过的最好的决定。”

GNU/Linux 命名争议

“Linux” 这个名称最初是由 Linus Torvalds 仅用于指代 Linux 内核。然而,内核通常与其他软件(尤其是 GNU 项目中的软件)一起使用。这种结合迅速成为 GNU 软件的最流行采用方式。1994 年 6 月,在 GNU 的公告中,Linux 被称为 “免费 UNIX 克隆”。此时,Debian 项目开始将其产品命名为 Debian GNU/Linux。1996 年 5 月,Richard Stallman 在 Emacs 19.31 编辑器的发布中将系统类型从 Linux 重命名为 Lignux,特意强调 GNU 与 Linux 的结合。但很快,这种拼写方式被放弃,改用 “GNU/Linux”。

这种命名法引发了不同的反应。GNU 和 Debian 项目采用了该名称,尽管大多数人仅用 “Linux” 来指代这一结合。

官方吉祥物

1996 年,Torvalds 宣布 Linux 将有一个吉祥物——企鹅。这是因为在选吉祥物时,Torvalds 提到他曾在澳大利亚堪培拉国家动物园和水族馆参观时,被一只小企鹅(小蓝企鹅)咬了。Larry Ewing 根据这个描述提供了今天大家熟知的吉祥物草图。Tux 这个名字是由 James Hughes 提议的,既来自 “Torvalds’ UniX” 的缩写,也指代穿着像企鹅一样颜色的礼服(tuxedo)。

新发展

社区开发

Linux 的开发工作主要由全球的开发者社区完成,他们提交建议改进内核的代码。此外,许多公司也为 Linux 的开发提供帮助,不仅贡献内核的开发,还撰写和分发与 Linux 捆绑的辅助软件。到 2015 年 2 月,超过 80% 的 Linux 内核开发者是有偿工作的。

Linux 不仅由像 Debian 这样的项目发布,也由与公司直接相关的项目(如 Fedora 和 openSUSE)发布。项目成员在各种会议和展会上会面,交换意见。其中规模最大的是德国的 LinuxTag,约 10,000 人每年聚集在此讨论 Linux 及相关项目。

开源发展实验室和 Linux 基金会

2000 年,开源发展实验室(OSDL)成立,作为一个独立的非营利组织,致力于优化 Linux 在数据中心和电信行业的应用。OSDL 也为 Linus Torvalds 和 Andrew Morton(直到 2006 年中期转投 Google)提供开发 Linux 内核的工作场所。2007 年 1 月 22 日,OSDL 与自由标准组织(FSG)合并成立 Linux 基金会,集中推动 Linux 与 Microsoft Windows 的竞争。

公司

尽管Linux是免费提供的,但公司还是从中获利。这些公司,其中许多也是Linux基金会的成员,为Linux的进步和发展投入了大量资源,以使其适合各种应用领域。这包括为驱动程序开发人员提供硬件捐赠,为开发Linux软件的人员提供现金捐赠,以及在公司雇佣Linux程序员。一些例子是戴尔、IBM和惠普,它们在自己的服务器上验证、使用和销售Linux,以及红帽(现在是IBM的一部分)和SUSE,它们维护着自己的企业发行版。同样,Digia通过Qt工具包的开发和LGPL许可来支持Linux,这使得KDE的开发成为可能,并雇佣了一些X和KDE开发人员。

在这里插入图片描述

桌面环境
KDE是第一个高级桌面环境(1998年7月发布的1.0版本),但由于使用了当时专有的Qt工具包,它引起了争议。[34]由于许可问题,GNOME被开发为一种替代方案。[34]两者使用不同的底层工具包,因此涉及不同的编程,并由两个不同的团体赞助,即德国非营利组织KDE e.V.和美国非营利组织GNOME基金会。
截至2007年4月,一位记者估计KDE拥有65%的市场份额,而GNOME的市场份额为26%。[34]2008年1月,KDE 4提前发布,出现了错误,导致一些用户转向GNOME。[35]2011年4月发布的GNOME 3因其有争议的设计变更而被Linus Torvalds称为“邪恶的混乱”。[36]
对GNOME 3的不满导致了Cinnamon的分叉,该分叉主要由Linux Mint开发人员Clement LeFebvre开发。这恢复了更传统的桌面环境,但略有改进。
资金相对充足的发行版Ubuntu设计(并于2011年6月发布)了另一个名为Unity的用户界面,该界面与传统的桌面环境截然不同,并被批评存在各种缺陷[37]和缺乏可配置性。[38]其动机是为台式机和平板电脑提供单一的桌面环境,尽管截至2012年11月,Unity尚未在平板电脑中广泛使用。然而,智能手机和平板电脑版本的Ubuntu及其Unity界面于2013年1月由Canonical有限公司推出。2017年4月,Canonical完全取消了基于手机的Ubuntu Touch项目,以便专注于Ubuntu Core等物联网项目。[39]2017年4月,Canonical放弃了Unity,并从17.10开始在Ubuntu版本中使用GNOME。[40]

相关文章:

Linux历史

Linux 于 1991 年由芬兰学生 Linus Torvalds 作为个人项目开始,旨在创建一个新的免费操作系统内核。在其历史发展中,Linux 内核经历了持续的增长。自 1991 年首次发布源代码以来,Linux 内核从少量的 C 语言文件,且受限于禁止商业发…...

C++ 方法积累

std::numeric_limits<UInt32>::max()placement new 用于控制分配空间 PostingListInMemory * posting_list arena.alloc<PostingListInMemory>();new (posting_list) PostingListInMemory();/// placement new;PostingListInMemory & operator(const Posting…...

区块链-智能合约Solidity编程

文章目录 一、ubuntu安装二、FISCO BCOS安装五、 WeBASE安装5.1 WeBASE简介5.2 节点前置服务搭建5.3 调用HelloWorld合约 七、Solidity极简入门7.1. 值类型7.2. 变量数据存储和作用域7.3. 函数7.4 控制流7.5 数组&映射7.6 结构体7.7 修饰符7.8 事件7.9 面向对象7.10 抽象合…...

VS Code创建VUE项目(一)工具安装与项目创建

一.安装与配置npm 1.下载安装Node.js 安装Node.js 下载地址&#xff1a; Node.js — 在任何地方运行 JavaScript (nodejs.org)或下载 | Node.js 中文网 下载后一步步安装就好&#xff08;安装过程基本一路直接“NEXT”就可以了&#xff0c;直到Finished&#xff09;&#x…...

cudnn8编译caffe过程(保姆级图文全过程,涵盖各种报错及解决办法)

众所周知,caffe是个较老的框架,而且只支持到cudnn7,但是笔者在复现ds-slam过程中又必须编译caffe,我的cuda版本是11.4,最低只支持到8.2.4,故没办法,只能编译了 在此记录过程、报错及解决办法如下; 首先安装依赖: sudo apt-get install git sudo apt-get install lib…...

Docker安装Nginx

前提&#xff1a;Docker已安装好&#xff0c;本人使用的为自带docker的云服务器&#xff0c;docker常用命令已掌握&#xff0c;yjj为在根目录创建的一个文件夹&#xff0c;可自行修改对应的目录。 1、安装镜像&#xff0c;可去dockerhub上面找&#xff0c;一般都是组件名称。do…...

大数据治理:构建新时代数据生态的关键

摘要 随着信息技术的飞速发展和数字化浪潮的席卷,大数据已成为当今社会的核心资源。如何有效治理大数据,不仅关系到数据资源的利用效率,还对隐私保护、网络安全和社会秩序产生深远影响。本文深入探讨了大数据治理的概念、面临的挑战以及治理框架的构建,从技术、法律和伦理等…...

Leetcode 1223 LCA of Deepest TreeNode

题意&#xff0c;找到所有最深的叶子节点的LCA https://leetcode.com/problems/lowest-common-ancestor-of-deepest-leaves/description/ 第一个想法是模块的想法, LCA 找到所有最深的叶子节点两两组合 可行&#xff0c;但是算法复杂度很高而且你先要从顶到下&#xff0c;再从…...

C++从入门到起飞之——红黑树 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1. 红⿊树的概念 2. 红⿊树的实现 2.1 构建整体框架 2.2 红黑树的插入 2.3 红黑树的验证 2.4 红黑树…...

Java基于SSM微信小程序物流仓库管理系统设计与实现(lw+数据库+讲解等)

选题背景 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…...

[LeetCode] 733. 图像渲染

题目描述&#xff1a; 有一幅以 m x n 的二维整数数组表示的图画 image &#xff0c;其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr , sc 和 color 。你应该从像素 image[sr][sc] 开始对图像进行上色 填充 。 为了完成 上色工作&#xff1a; 从初始像素…...

智能EDA小白从0开始 —— DAY23 PyAether深度解析与技术展望

引言&#xff1a;技术革新与行业需求的碰撞 在半导体行业快速发展的今天&#xff0c;芯片设计的复杂性和对效率的要求日益提升。传统的芯片设计工具和方法已经难以满足当前行业的需求&#xff0c;特别是在面对大规模、高性能芯片的设计时&#xff0c;设计师们面临着前所未有的…...

从深海探测到海洋强国:数字孪生助力海洋装备跨越式发展

海洋广袤无垠&#xff0c;蕴藏着丰富的资源。近现代以来&#xff0c;人类使用各种手段探索海洋探索&#xff0c;广袤无垠的海洋与人类的生活越来越紧密&#xff0c;至少10亿人口摄入的蛋白质来自海洋&#xff0c;全球超过90%的货物、数据信息交流在海洋中转&#xff1b;海洋中丰…...

架构师备考-背诵精华(系统质量属性)

系统质量属性 根据GB/T 16260.1 定义&#xff0c;从管理角度对软件系统质量进行度量&#xff0c;可将影响软件质量的主要因素划分为6种维度特性包括&#xff1a;功能性、可靠性、易用性、效率、维护性、可移植性 功能性 适合性、准确性、互操作性、依从性、安全性 可靠性 容错…...

Pycharm下载安装教程(详细步骤)+汉化设置教程

今天讲解的是Pycharm安装教程和配置汉化设置&#xff0c;希望能够帮助到大家。 创作不易&#xff0c;还请各位同学三连点赞&#xff01;&#xff01;收藏&#xff01;&#xff01;转发&#xff01;&#xff01;&#xff01; 对于刚入门学习Python还找不到方向的小伙伴可以试试…...

网络安全入门

网络安全入门是指学习和了解网络安全基础知识和技术的入门阶段。网络安全是指保护计算机系统、网络和数据免受未经授权的访问、使用、泄露、破坏以及其他威胁的技术和措施。 要入门网络安全&#xff0c;可以按照以下步骤进行&#xff1a; 了解网络安全基本概念&#xff1a;学习…...

你真的了解Canvas吗--解密十【ZRender篇】

目录 👊🏻入口 动画讲解二 Animator Element Transformable graphic 总结 书接上篇你真的了解Canvas吗--解密九【ZRender篇】由于一个bug的篇幅需要续写这个下篇,不过那块的bug内容对我们这篇要讲的动画也是息息相关的,因为Transformable这个类主要就是和变换相…...

mac安装brew时踩坑解决方案

安装包 mac上如果按照git等工具可能会使用brew&#xff0c;例如使用&#xff1a;$ brew install git命令&#xff0c;如果电脑没有按照brew&#xff0c;则会提示&#xff1a;zsh: command not found: brew 解决方案 需要我们打开brew的官网https://brew.sh/&#xff0c;复制…...

基于Handsontable.js + Excel.js实现表格预览和导出功能(公式渲染)

本文记录在html中基于Handsontable.js Excel.js实现表格预览、导出、带公式单元格渲染功能&#xff0c;在这里我们在html中实现&#xff0c;当然也可以在vue、react等框架中使用npm下载导入依赖文件。 Handsontable官方文档 一、开发前的准备引入相关依赖库 <!DOCTYPE ht…...

重学SpringBoot3-集成Redis(十三)之点排行榜实现

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;十三&#xff09;之点排行榜实现 1. 为什么选择 Redis 来实现排行榜&#xff1f;2. 项目环境准备2.1. 添加依赖2.2. 配置 Redis 连…...

Java 中方法参数传递的陷阱

前言 在编程过程中&#xff0c;我们经常会遇到一些看似简单却容易出错的问题。本文将通过一个具体的例子&#xff0c;探讨 Java 中方法参数传递的陷阱&#xff0c;并提供详细的解决方法。希望这篇文章能帮助你在未来的开发中避免类似的错误。 问题背景 假设我们的任务是计算…...

哪家云电脑便宜又好用?ToDesk云电脑、顺网云、达龙云全方位评测

陈老老老板&#x1f934; &#x1f9d9;‍♂️本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09;生活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f9d9;‍♂️本文简述&#xff1a;讲一下市面上云电脑的对比。 &#x1f9d9;‍♂️上一篇文…...

【汇编语言】寄存器(内存访问)(三)—— 字的传送

文章目录 前言1. 字的传送2. 问题一3. 问题一的分析与解答4. 问题二5. 问题二的分析与解答结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言…...

6 机器学习之应用现状

在过去二十年中&#xff0c;人类收集、存储、传输、处理数据的能力取得了飞速提升&#xff0c;人类社会的各个角落都积累了大量数据&#xff0c;亟需能有效地对数据进行分析利用的计算机算法&#xff0c;而机器学习恰顺应了大时代的这个迫切需求&#xff0c;因此该学科领域很自…...

相似度为 K 的字符串

题目链接 相似度为 K 的字符串 题目描述 注意 s1和s2只包含集合 {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’} 中的小写字母s2是s1的一个字母异位词 解答思路 可以深度优先遍历交换字母使得s1和s2尽可能接近&#xff0c;基本思路是&#xff1a;设定一个指针idx指向s1和s2的…...

[云] Project Analysis

项目要求分析&#xff1a; 开放性选题&#xff1a; 主题范围&#xff1a;任何与云计算系统相关的主题。项目类型&#xff1a;可以是技术、商业或研究项目。团队规模&#xff1a;最多可组成三人小组。 示例主题&#xff1a; 分析公共云数据&#xff1a;例如&#xff0c;AWS公共数…...

腾讯六宫格本地识别,本地模型识别,腾讯六图识别

基于K哥爬虫昨天发的文章&#xff0c;特此训练了一版腾讯模型&#xff0c;效果不错&#xff0c;特此感谢K哥的指导&#xff0c;效果如下图: 有需求&#xff0c;有疑问的欢迎评论区点出...

Transformer图解以及相关的概念

前言 transformer是目前NLP甚至是整个深度学习领域不能不提到的框架&#xff0c;同时大部分LLM也是使用其进行训练生成模型&#xff0c;所以transformer几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。接下来本文将从顶层往下去一步步掀开transformer的面…...

Nginx缓存静态文件

在Python项目中&#xff0c;通过Nginx缓存静态文件&#xff08;如CSS、JS、图片等&#xff09;&#xff0c;可以有效提升网页的加载性能。Nginx可以帮助你缓存静态资源&#xff0c;减少服务器负担&#xff0c;并加速页面加载。 1. 配置Nginx缓存静态文件 首先&#xff0c;你需…...

【隐私计算】隐语HEU同态加密算法解读

HEU: 一个高性能的同态加密算法库&#xff0c;提供了多种 PHE 算法&#xff0c; 包括ZPaillier、FPaillier、IPCL、Damgard Jurik、DGK、OU、EC ElGamal 以及基于FPGA和GPU硬件加速版本的Paillier版本。 本文我们会基于GPU运行HEU Docker容器&#xff0c;编译打包GPaillier并测…...