nix Usenet 新闻组里发了一封帖子,称自己正在做一个自由的操作系统,“就是个兴趣爱好,不会搞得像 GNU 那么大那么专业”。
事情的发展显然远超他的预期,如今小到传感器,大到超级计算机,从智能手机、手表、汽车等日常用品到航天器等设备,Linux 内核的身影已无处不在。
随着迄今为止最大版本 Linux Kernel 5.8 于今年 8 月初的发布,Linux 内核已拥有超过 2 万名贡献者,历史 commit 数超过 100 万次,迎来一个新的里程碑。
Linux 基金会从 2008 年开始每年发布 Linux 内核报告,但此前一直难以将其发展过程完整串联起来。
今年,借助 Daniel German 博士的 cregit 工具,他们成功追溯到了第一个版本,Linux 内核的发展时间线变得清晰。根据版本控制方式,可大致分为以下三个阶段:
版本控制对社区协作能力影响重大,这在 2000 年代初是一件令人颇为苦恼的事情。使用版本控制系统,也就是 BitKeeper 之前,贡献者需要将补丁提交至邮件列表,待 Torvalds 接受后放进源码树,再发布整个树的新版本。 在这种方式下,具体是谁在做贡献、贡献的数量和路径都不够透明。 2002 年 2 月 4 日,BitKeeper 的使用标志着 Linux 内核 commit 历史的开启。然而 BitKeeper 为专有软件,这一决定在社区中遭受了长期质疑。 直到 2005 年,BitKeeper 拥有者 Larry McVoy 决定收回无偿使用 BitKeeper 的许可。Torvalds 本人当时又对现成的 CVS 和 Subversion 等集中式版本控制工具感到不满,因此自己动手,用十天时间写出了 Git 的第一个版本。 Git 目前已成为开发者们非常熟知且广泛使用的分布式版本控制系统。Linus Torvalds 则表现得更多的是迫于无奈,他曾声称自己“根本不想做源代码管理,觉得这是计算机世界中最无趣的事情”。 自从版本控制系统由 BitKeeper 改为 Git 后,Linux 内核每年的贡献者和 commit 数量都在稳步增长。历年的内核报告数据显示,2005 年 5 月发布的 2.6.12 版本平均每小时收到 2 次 commit。 15 年后,2019 年的平均数是每小时 9.4 次。而在最新的 5.8 内核中,平均每小时 commit 数达到了 10.7 次。
首个内核版本 linux-0.01.tar.Z 由 88 个文件和 10,239 行代码组成,运行在 i386 这样单一的硬件架构上。到了 5.8 版本,这一数据扩张为 69,325 个文件和 28,442,673 行代码,并能够在 30 多种主要的架构上运行。 数量上的庞大仅是 Linux 内核代码的表象,它自身更是形成了一套复杂的体系,不熟悉的人往往不知从何处下手,极有可能“牵一发而动全身”。这或许也是内核维护者难寻的原因之一。 Linux 内核发布第一天起的某些代码仍在当前版本中使用,例如 Torvalds 和大学好友 LarsWirzenius 共同编写的 vsprintf 例程,它也是为数不多存在至今的首次 commit 中的源代码。
今年的内核报告提到,有 2,964 个能被追溯至 1991 年的 token 如今在 5.8 版本中也能找到。5.8 版本超过一半的代码写于近 7 年内,但之前所有年份都对此版本有贡献。过去的代码不断在后续的版本中留下痕迹。 持续膨胀的内核文件量和代码行数未见得完全是一件好事,为了使系统不变得臃肿,内核维护者需要做一些修枝剪叶的工作。 Linux 内核中未使用的代码和文件都会被视情况删除,有一些版本还会进行大的清理,例如 2018 年的 4.17 版本,删除了 8 个架构,净减少代码大约 180,000 行。 不仅仅是源码,Linux 内核维护者还会关注空白行和代码注释,以确保源码的可读性。
2004 年对开发者原创证书(Developer Certificate of Origin,简称 DCO)的标准化是 Linux 内核史上的一个关键变化点。DCO 的引入为开发者和用户提供了法律保护,同时又不至于增加程序负担。 它极大地提高了跟踪补丁进入内核的路径的能力,加上版本控制系统向 Git 的过渡,DCO 有效地减轻了开发者做贡献的开销,因此变得很受欢迎,后来也被许多其他开源项目采用。 随着 DCO 的标准化使用,现在几乎所有的 commit 都有一个 Signed-off-by 标签。通常每个 commit 平均会有两个该标签,能够反映代码在合并之前的维护者层次结构,有助于追溯补丁进入代码的路径。
社区曾对发布周期进行了大量的探讨和实验,并逐渐找到了行之有效的发布模式,发布周期也几乎完全可预测——每个发布周期由时长两周的“合并窗口”开始,这时,新功能经适当的 review 后可被纳入接下来要发布的 git 仓库。 一旦它被标记为 rc1,那么集成测试、调试和稳定化的周期就开始了。然后每周对 rc 候选版本进行标记,直到达到目标质量和稳定性。发布后,随着下一个合并窗口的到来,这个周期又开始循环。 内核的主线树由 Linus Torvalds 维护,这棵树引入了所有新功能。新的主线(Mainline)内核每 2 到 3 个月发布一次。但这样的发布节奏较慢,难以满足大多数用户的需求。因此,从 2005 年开始,每周发行一次稳定版(Stable)内核。 用户还想要受维护时间更长的版本,于是 2006 年发布的 2.6.16 版本成为第一个长期支持(LTS)版本内核。此后每年都有一个新的 LTS 内核,该内核将由内核社区维护至少 2 年(从 4.4 版本开始延长至 6 年)。 Linux 内核官网公布了所有现存 LTS 版本的发行日期、EOL 日期及维护者(目前 6 个 LTS 版本都由 Greg Kroah-Hartman 和 Sasha Levin 这两人维护)。
在过去十年中,每年有超过 400 个组织为 Linux 内核做出贡献。其中相当一部分可能只有过一次 commit。从每年的 commit 比例来看,其中 1/3 贡献来自神秘的长尾。也就是图中最上面浅灰色 “Others” 的部分。 Linux 基金会指出,企业的贡献会根据业务需求和战略的不同而有所变化。前 20 名贡献者中,有些是 2007 年之后才加入,有些在此前做过很多贡献的公司,被收购后便不再继续参与。贡献者的多样性为内核发展赋予了一些弹性。 除了组织贡献者,Linux 内核社区成员也致力于增加个人贡献者的多样性,他们通常愿意花费自己的时间来指导新的开发者。 Linux 基金会有一个 KernelMentorship(LKMP)项目,用来帮助新加入开源的开发者进行实验、学习,并为开源社区做出贡献。
报告的最后,Linux 基金会指出,内核社区的重点是保持一个共同的目标,即拥有一个没有回归的高质量操作系统,愿意根据需要创建新的流程和工具,以帮助提高效率,并继续提升 Linux 内核的可靠性。 内核测试现在也引入了一些自动化测试工具:静态分析工具如 sparse(语义解析器)、smatch(源匹配器)和cocicheck(语义补丁,测试特定的 bug),由 0-day 和 Hulk Robot 这样的自动测试机器人在 Linux 内核树上运行。 机器人在发现和跟踪 bug 上起到不少作用。这些测试工具能够帮助开发人员跟上上游内核的速率变化,并继续改进内核版本,提升其稳定性。 Linux 内核如今被应用于诸多领域,基金会认为,改进基础设施,进行正确的安全分析,是接下来要应对的重大挑战之一。 目前 Linux 内核已拥有一个很好的基础,它应当继续引领创造最佳实践,以促进整个开源软件行业的发展。
文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。
网上有这么多基于Linux内核的免费OS系统,Endless OS不算太出名,但它有可能是最特殊的一....
任何系统的运转都需要能量。计算机系统依靠电能运行。而能量的获取是有成本的,因此如果能在保证系统运转的....
网上有这么多基于Linux内核的免费OS系统,Endless OS不算太出名,但它有可能是最特殊的一....
网上有这么多基于Linux内核的免费OS系统,Endless OS不算太出名,但它有可能是最特殊的一....
原文链接: 由于目前HarmonyOS源码只支持在Linux系统中进行编译,所以需要Linux环境下的工程目录映射到Windows环境下...
本文只梳理大致的脉络,不做详尽的叙述。 一、计算机的发明 世上本无路,走的人多了,就有了路。世上本无....
本篇主要讲述进行嵌入式Linux 开发所必备的基础知识, 以实用和够用为标准进行介绍,与嵌入式Lin....
之前很多孩子就和我说老师我会linux,我就会反问,你学软件测试,你会linux你知道linux的东西如何和企业结合吗? 不是你只会...
由于目前HarmonyOS源码只支持在Linux系统中进行编译,所以需要Linux环境下的工程目录映射到Windows环境下,然后使用DevE...
20年前,IBM 看到 Linux 的巨大潜力,将其引入 IBM Z,二者的强强联合,满足了企业在互....
本文档的主要内容详细介绍的是Linux的基础学习笔记资料总结包括了:一、 常用命令,二、 磁盘管理,....
本篇主要讲述嵌入式 Linux 产品开发过程中的内核/驱动开发部分相关内容,包括 Linux 内核裁....
目录 前言 top命令 htop命令 ps命令 free命令 vmstat命令 iosat命令 ne....
本文以 32 位系统为例介绍内核空间(kernel space)和用户空间(user space)。....
一、Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备....
微软刚刚宣布了要在 11 月 18 日举办Azure 开放日线上活动的消息,主题将围绕开发者们颇为关....
很多流行的Linux发行版都支持ss以及很多监控工具使用ss命令.熟悉这个工具有助于您更好的发现与解....
通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,....
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说....
英特尔发布了他们基于Xe-LP微架构的数据中心服务器GPU,初期主要针对高密度、低延迟的Androi....
本书全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖nux操作系统的安装及相关工具...
牛津字典中对“ kernel”一词的定义是:“较软的、通常是一个坚果可食用的部分。”当然还有第二种定....
本节资料从第24章开始,分别讲述了LCD和USB驱动程序移植、基于Qtopia和GUI开发、基于X和....
本节资料从字符设备驱动程序开始讲起,介绍了相应的设备驱动程序开发;后面还介绍了Linux异常处理体系....
当你开始使用 Linux 并关注关于 Linux 的网站和论坛时,你会经常遇到诸如 GUI、CLI ....
按上文描述,得到一个集成各种开发环境的VSCode之后,使用VSCode打开源码所在目录文件夹,这里....
很多初学者会问,嵌入式Linux怎么学?下面就来讨论讨论这个问题。 嵌入式Linux可以分为两部分:底层系统、应用开发。 对于...
在2020紫光展锐市场峰会平行论坛、工业智联专题论坛上,紫光展锐智能显示副总裁钟宝星表示,紫光展锐正....
Linux内核结构Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进....
ARM-linux 的交叉编译环境,一般的教程都是在linux 系统(比如ubuntu)上安装lin....
上一篇文章中《图解Linux网络包接收过程》,我们梳理了在Linux系统下一个数据包被接收的整个过程....
下文是在看csapp的时候引发的一些思考,其实之前看anup的时候也有所了解,不过时间有点长了,所以....
因为要对百万、千万、甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的....
近日,Linux 内核的稳定分支维护者 Greg Kroah-Hartman 在欧洲开源峰会上向人们....
本部分资料主要是关于嵌入式Linux系统移植,介绍相关概念、源码结构、相应的配置、编译、连接过程,以....
本节覆盖的内容还是挺多的,包括I2C总线协议及硬件介绍,以及它的一些操作实例;还有LCD控制器的介绍....
本书从最简单的点亮一个LED开始,由浅入深地讲解,使读者最终可以配置、移植、裁剪内核,编写驱动程序,....
本书个面介绍了嵌入式 Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖n....
背景 Linux 作为最大也是最成功的开源项目,吸引了全球程序员的贡献,到目前为止,共有两万多名开发....
硬盘分成相同大小的单元,我们称为块(Block)。一块的大小是扇区大小的整数倍,默认是4K。在格式化....
Linux内核提供了完整的USB驱动程序框架。USB总线采用树形结构,在一条总线上只能有唯一的主机设....
Linux 是一种自由和开放, 用C 语言和汇编语言写成, 并符合POSIX 标准的类Unix 操作....
有时候需要在 Linux kernel-大多是在需要调试的驱动程序-中读写文件数据。在 kernel....
根据数据分析机构NetMarketShare的最新统计,操作系统市场中,Windows 10在十月份....
想看看看有没有大佬使用虚拟机乌班图进行环境配置的视频教程。最近就卡在这了,没学过Linux,很无奈,不会用。 ...
前言 对于某些对时间精度要求较高的程序,用 c 写延时显得有些力不从心,故需用到汇编程序。 本人通过....
容器技术起源于Linux,是一种内核虚拟化技术,提供轻量级的虚拟化,以便隔离进程和资源。尽管容器技术....
Linux设置服务开机自动启动的方式有好多种,这里分别介绍一下centos操作系统开机脚本自启动和ubuntu操作系统脚本开机自启动的方...
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性....
一、内核简介内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,....
近日,腾讯安全团队向Linux社区提交了多个NFC(Near Field Communication....
这是一个简短的文档,描述了Linux内核的首选代码风格。代码风格是因人而异的,而且我不愿意把我的观点....
在Linux下的开发中,printf打印调试信息默认输出到标准输出 stdout (即屏幕/终端)中....
过去几年,IBM的企业客户聊的最多的就是数字化转型,最近几个月的疫情又进一步的凸显了数字化转型的重....
本文通过对Linux下串口驱动的分析。由最上层的C库。到操作系统系统调用层的封装。再到tty子系统的....
内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程序连接到物理硬件....
从技术层面来说可以分为硬件层,驱动层,系统层和应用层。那么这些你们真的能明白吗,不明白或者有疑...
TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。 这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。 这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。 处理器子系统基于ARM Cortex-A9内核,PowerVR SGX图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。 可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...

