科普----Linux的前世今生

news2024/11/13 8:57:38

提到电脑的操作系统

相信大多数人会脱口而出:Windows!MacOS!

没错,这确实是目前市场上主流的两款操作系统。

但对于从事IT相关工作的人们来说,还有一种系统也必须拥有姓名

那就是Linux

看到这个词,大家的读法可能都不太统一。

不过这并不重要,因为有人说过:Linux是自由的,包括它的读音

我们今天就来看看这个自由的Linux操作系统的前世今生

为什么要有操作系统呢?

20世纪40-50年代,电子管技术得到了发展,诞生了第一台电子管计算机

由于零件的集成度太低,一台计算机必须用一个超大house来放置,而且这台机器在当时价值数百万美元,一般人用不起,都是一些豪横的组织才用得起。

早期的计算机是没有操作系统的,操作人员直接和计算机硬件交互,

类似下面这样...

所有的操作在控制台上进行,控制台上有显示灯、触发器、输入输出设备每次作业都需要有专门的的人员来操作,使用汇编语言写程序到纸片上,再穿孔成卡片,再将这些卡片交给专门的操作人员去操作,再花费时间等操作结果。

不仅计算机成本高,操作过程还极其复杂。

人们很自然就想到减少机器时间的浪费,于是就诞生了批处理系统

Tips:批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。这种采用批量处理作业技术的操作系统称为批处理操作系统,不具有交互性。

对用户来讲,这种面向批处理作业的操作系统,尽管简化了操作过程,但对于需要立即得到响应的用户来说还是太慢了。

直至20世纪70年代,分时操作系统Unix诞生。

1969年,贝尔实验室的肯·汤普森(Ken Thompson)由于在一台老古董计算机PDP-7上玩游戏比较卡,运行速度比较慢,决定自己写一个操作系统。于是趁老婆带娃回娘家的两个月时间,自己在家用汇编语言开发出了Unix系统。

1973年丹尼斯·里奇(Dennis Ritchie)对B语言进行改造创造了C语言,原本用汇编语言编写的UNIX也改用C语言进行编写,并由此产生了UNIX VersionV。

1974年UNIX系统正式向外界披露,自此一发不可收拾。

两位大神:(还请记住他俩)

          Ken Thompson 肯·汤普森  (左) UNIX之父

          Dennis Ritchie 丹尼斯·里奇(右) C语言之父

随着UNIX系统的应用越来越广泛,贝尔实验室的老大也就是UNIX版权所有者AT&T公司却下了一步臭棋:他们把原本低廉甚至免费开源的UNIX改为闭源 并开始收费,甚至还对之前的UNIX及其衍生版本也声明了版权

这就让人特别不爽,因为那些UNIX的变种大部分都是各个机构在UNIX源码基础上进行扩充和改进才形成的。

凭什么你说声明版权就声明版权?

于是在1983年,当时30岁的理查德·马修·斯托曼(Richard Matthew Stallman)发起了GNU计划,目标是创建一套完全自由的操作系统GNU。之后,他又建立了自由软件基金会来协助该计划的实施。

        自由软件运动的精神领袖 —— 理查德·马修·斯托曼

1989年,为了避免 GNU 所开发的自由软件被其他人所利用而成为专利软件,斯托曼找了一群律师起草了广为使用的GNU通用公共协议证书(GNU General Public License),即GPL协议

Tips:GPL 协议的核心就是要对源码进行公开,并且允许任何人修改源码,但是只要使用了 GPL 协议的软件源码,其衍生软件也必须公开源码,准许其他人阅读和修改源码。

为了构建开放、自由的Unix环境,理查德•斯托曼开发出来一系列大名鼎鼎的软件,每个单独拿出来都够人骄傲一辈子:

  • Emacs

  • GNU C (gcc)

  • GNU C Library (glibc)

  • Bash shell

尽管开发出了一系列的优秀软件,但在当时并没有一款“自由的核心”存在,所以GNU软件仍旧只能在那些有专利的 Unix 平台上工作,直到 Linux 的出现。

1991年,芬兰赫尔辛基大学的一名学生林纳斯·托瓦兹(Linus Torvalds)在Minix的启发下,开发了Linux系统内核

          Linux之父--林纳斯·托瓦兹(Linus Torvalds)

林纳斯当时的想法很简单,因为需要经常访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他就编写了磁盘驱动程序和文件系统。而这就是Linux的第一个雏形

开发完成后,他希望这个程序可以获得大家的一些修改建议,于是在1991年10 月5号他便将这个核心放置在网络上提供大家下载,同时在 BBS 上面贴了一则消息:

“Hello everybody out there using minix-

I'm doing a (free) operation system (just a hobby,

won't be big and professional like gnu) for 386(486) AT clones.”

而这个举动,让全世界的程序员大佬都纷纷参与到Linux内核代码修改编写的工作。

在自由软件之父理查德·斯托曼的精神感召下,林纳斯很快以Linux这个名字把这款类Unix的操作系统加入到了自由软件基金(FSF)的GNU计划中,并通过GPL的通用性授权。  

短短几年间,在Linux身边已经聚集了成千上万的狂热分子,大家不计得失的为Linux增补、修改,并随之将开源运动的自由主义精神传扬下去,也就是说,Linux其实更是一个时代的结晶

1994年3月,Linux 1.0发布,代码量达17万余行,Linux用户超过10万

1996年6月,Linux 2.0内核发布,此时的Linux进入了实用阶段,在全球拥有350万的用户。

随着开源软件运动的开展,也展开了一场历史性的Linux产业化运动

因为Linux本身是开源的,再加上GPL并没有限制从事商业行为,于是涌现了越来越多的商业公司和团队来开发自己的Linux distribution。

Ubuntu、Red HatSuSEFedoraDebianCentOS等。

但因为这些不同版本的操作系统内核都是Linux,所以大家合在一起统一叫做Linux发行版

Tips:将Linux内核配备一些软件、工具以及图形界面提供给用户直接使用,这就是Linux发行版操作系统。

Linux受到程序员们广泛追捧,也正是归功于其免费开源的特点,并且不断有大批程序员向Linux社区提供代码。

模块化程度高硬件支持广泛安全稳定可移植性良好都是Linux在开发者眼中不可或缺的优势。Linux 可以说是一个近乎完美的操作系统,而且有着广阔的前景,值得我们每一个计算机爱好者学习和应用。

“ 程序员们成就了Linux,而Linux也成就着越来越多的程序员。”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

unity游戏开发003:深入理解Unity中的坐标系

Unity游戏开发 “好读书,不求甚解;每有会意,便欣然忘食。” 本文目录: Unity游戏开发 Unity游戏开发深入理解Unity中的坐标系前言1. 坐标轴2. 左手坐标系3. 世界坐标系 vs. 局部坐标系4. 坐标变换5. 注意事项 总结 深入理解Unity中…

虚幻5|简单装备武器

一,首先我们要创建一个actor蓝图类 打开组件添加一个静态网格体,点击该组件,右侧细节找到网格体资产,选择需要的武器 三,打开角色的骨骼网格体,添加武器插槽 这个有些动作包里的骨骼网格体是加了骨骼&…

10 - Linux系统安全及应用

目录 一、账号安全控制 1.系统账号清理 2.密码安全控制 3.命令历史限制 4.终端自动注销 二、用户切换和用户提权 1. su 命令 - 切换用户 1.1 su 命令的用途及用法 1.2 限制使用su 命令的用户 1.3 查看su操作记录 2. sudo 命令 - 用户提权 2.1 sudo 命令的用途及用法…

Unity转Unreal5从入门到精通之如何实现一个简单的AI寻路

前言 我们今天使用最基础的引擎知识,来给大家创建一个简单的AI,可以追踪目标,攻击目标。 使用Unity类比的话,就是一个怪物预制体,放到了寻路上,当他视野看到目标后,就一直追踪目标,…

转账记录是怎样使用ZK实现证明的

目录 转账记录是怎样使用ZK实现证明的 1. 准备阶段 2. 生成证明 3. 转账记录的验证过程 4. 隐私保护 5. 应用场景 结论 转账记录是怎样使用ZK实现证明的 转账记录使用ZK(零知识证明)实现证明的过程,主要依赖于零知识证明技术中的协议,如ZK-SNARKs(Zero-Knowledge S…

72、docker资源管理

一、docker数据卷 容器和宿主机之间数据共享-----------挂载卷------------容器内的目录和宿主机的目录进行挂载。实现数据文件共享。 容器的生命周期是有限的,一旦重启所有对容器内部文件数据的修改以及保存的数据会被初始化,所以为了防止数据丢失&am…

Java语言程序设计基础篇_编程练习题16.22(播放、循环播放和停止播放一个音频剪辑)

题目:16.22(播放、循环播放和停止播放一个音频剪辑) 编写一个满足下面要求的程序: 使用AudioClip获取一个音频文件,该文件存放在类目录下。放置三个标记为Play、Loop和Stop的按钮,如图16-46a所示。单击Pla…

什么是调度中心控制台,它在现代运营管理中扮演什么角色?

在现代复杂多变的运营环境中,调度中心控制台作为企业内部信息管理的核心枢纽,扮演着至关重要的角色。它不仅是一个技术平台,更是企业高效运营和智能决策的重要支撑。接下来就给大家科普一下关于调度中心控制台知识点,及在现代运营…

HarmonyOS笔记4:从云数据库获取数据

移动应用获取数据的方式主要有: 1.从网络中获取数据接口API。 2.从华为云数据库获取云数据库的资源。 3.从移动终端直接获取本地的数据 在HarmonyOS笔记3中已经完成了方式一从网络中获取数据接口API的方式。在本篇笔记中,将讨论从云数据库中获取数据。 因…

极狐GitLab CI/CD 如何构建镜像并推送到 azure 镜像仓库?

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

远程访问安全:rsync、ProFTPD、OpenSSH和VNC漏洞分析

文章目录 rsync未授权访问概念复现个别工具检测批量工具检测 proftpd远程命令介绍CVE-2015-3306复现 openssh信息泄露介绍复现 libssh身份绕过介绍条件危害复现 向日葵远程RCE介绍条件靶场: VNC配置不当介绍复现 在当今高度互联的数字时代,远程访问工具已…

[Qt][Qt 事件][上]详细讲解

目录 1.事件介绍2.事件的处理3.鼠标事件4.按键事件5.moveEvent6.resizeEvent 1.事件介绍 事件是应⽤程序内部或者外部产⽣的事情或者动作的统称 在Qt中使⽤⼀个对象来表⽰⼀个事件,所有的Qt事件均继承于抽象类QEvent 事件是由系统或者Qt平台本⾝在不同的时刻发出的…

深入理解C#中的yield关键字:提升迭代性能与效率

文章目录 前言一、yield return二、yield break总结 前言 在C#中,yield 关键字是特别用于迭代器块和方法中的,它允许你逐个返回序列中的元素,而不是一次性返回整个集合。使用 yield 可以显著提高处理大数据集或进行复杂迭代时的性能和内存效率…

【数据结构初阶】队列经典习题两道

hello! 我是云边有个稻草人 目录 一、用队列实现栈 二、用栈实现队列 Relaxing Time ! 正文开始—— 一、用队列实现栈 225. 用队列实现栈 - 力扣(LeetCode) 根据题目要求,我们要用两个队列来实现栈的相关功能&…

虚拟机上使用Ubuntu1804上编译qt5.12.9部署到jetson nano上

开发qt界面,基于Qt5.12.9,开发环境使用虚拟机加载Ubuntu1804,开发完成后的qt程序最后部署到jetson nano上,使用的通用编译器是gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu 安装编译器 本文中直接将gcc-linaro-7.5.0-2019.…

汇昌联信做拼多多店铺如何运营?

汇昌联信如何在拼多多上运营店铺,是许多电商新手和希望扩展市场的商家所关注的问题。在这个快速发展的电商平台上,掌握正确的运营策略,对于提升店铺销量、增强品牌影响力至关重要。接下来,我们将详细探讨如何有效运营拼多多店铺。…

Angular由一个bug说起之九:AWS S3 文件下载问题

引言 在现代 Web 开发中,我们经常需要处理来自全球不同地区的数据,这包括文件名中可能包含的非拉丁文字符。最近,在一个项目中,我们遇到了一个与 Amazon S3 服务相关的挑战,涉及到文件名编码的处理。当从 S3 下载文件…

Redis分布式部署方式-主从复制

分布式部署Redis方式 分布式系统,涉及到一个非常关键的问题:单点问题 单点问题:如果某个服务器,只有一个节点(只搞一个物理服务器,来部署这个服务器程序),会遇到一些困难&#xff…

多线程学习之ThreadLocal详细笔记

ThreadLocal详细笔记 一、ThreadLocal的基本概念二、ThreadLocal的独特性2.1 数据访问方式2.2 线程安全实现2.3 适用场景 三、ThreadLocal 的简单使用四、ThreadLocal 的工作原理五、ThreadLocal和内存泄漏的关系5.1 ThreadLocalMap的Entry的Key设计成弱引用5.2 弱引用会导致内…

超简单4行代码-STM32F103的HAL实现有源蜂鸣器报警

1、概述 在嵌入式项目开发中,使用蜂鸣器作为简单的报警或提示装置非常常见。根据不同的应用场景,我们可能会选择有源蜂鸣器或无源蜂鸣器。本文将重点介绍如何通过STM32F103系列单片机,利用HAL库,仅通过4行代码实现对有源蜂鸣器的…