当前位置: 首页 > 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 连…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...