linux 内核开发

由于Linux内核社区在2016年庆祝了25年的开发历史,因此许多人向我们询问了该项目的长寿和成功秘诀。 我通常会开玩笑,说我们真的不知道如何到达这里。 在此过程中,该项目面临许多分歧和挑战。 但是,严重的是,我们之所以做到这一点,与社区的内省和变革能力有很大关系。

大约16年前,大多数内核开发人员从未亲自见过面-我们只通过电子邮件进行了交互-因此Ted T'so提出了“ 内核峰会”的想法。 现在,每年内核开发人员都希望亲自聚集一堂,解决技术问题,并且至关重要的是,回顾一下过去一年中我们做对了什么和做错了什么。 开发人员可以公开和诚实地讨论彼此之间的交互方式以及开发过程的工作方式。 然后,我们进行更改以改善流程。 我们开发了新工具,例如Git ,并不断改变我们的合作方式。

随着时间的推移,这种演变创造了一种弹性,使项目可以从一种优势转到另一种优势,同时避免了分散竞争项目资源的分叉。 我们可能需要很多年才能完全理解Linux内核成功的关键,但是即使到现在,也有一些教训很突出。

1.短的发布周期很重要。

在Linux项目的早期,每隔几年才发布一次新的主要内核版本。 这意味着在向用户提供新功能方面存在相当大的延迟,这使用户和发行商都感到沮丧。 但是,更重要的是,如此长的周期意味着必须立即集成大量代码,并且即使尚未准备好将代码带入下一个版本的压力也很大。

短周期解决了所有这些问题。 新代码可在稳定版本中快速提供。 在几乎恒定的基础上集成新代码,可以以最小的中断带来甚至根本的更改。 而且开发人员知道,如果错过了一个发布周期,那么每两个月就会有另一个发布周期,因此几乎没有动机去尝试过早地合并代码。

2.流程可伸缩性需要一个分布式的,分层的开发模型。

很久以前,所有更改都直接交给了Linus Torvalds,但很快就证明了这一点很笨拙,因为没有一个人能跟上一个像操作系统内核这样多样化的项目。 很早就出现了内核不同区域的维护者的想法,其中一部分内核的职责分配给了熟悉该区域的个人。 例如网络,无线,不同的驱动程序子系统(如PCI或USB)或不同的单独文件系统(如ext2或vfat)。 在数百名维护人员中分散代码审查和集成的责任,为该项目提供了资源来应对每个版本的成千上万的变更,而又不牺牲审查或质量。

没有合适的工具,像内核这样的项目将无法正常运作,而无法承受其自身的崩溃。

3.工具很重要。

内核开发一直在努力扩展,直到BitKeeper源代码管理系统的出现几乎在一夜之间就改变了社区的惯例。 改用Git带来了又一次飞跃。 没有合适的工具,像内核这样的项目将无法正常运作,而无法承受其自身的崩溃。

4.内核的高度共识导向的模型很重要。

通常,如果受人尊敬的开发人员反对,则建议的更改将不会合并。 对于发现在邮件列表中封锁了几个月的代码的开发人员而言,这可能会令人沮丧。 但是,这也确保了内核仍然适合各种用户和问题。 没有特定的用户社区能够以其他组为代价进行更改。 结果,我们有了一个单一的代码库,该代码库可以从小型系统扩展到超级计算机,并且适合多种用途。

5.内核强大的“不回归”规则也很重要。

十多年前,内核开发人员社区承诺,如果给定的内核在特定的环境中工作,那么所有后续内核也将在该环境中工作。 如果社区发现更改导致了回归,那么他们将非常Swift地解决该问题。 该规则使用户确信升级不会破坏他们的系统。 结果,他们愿意跟随内核开发新功能。

6.公司在这一过程中的参与至关重要,但是没有哪个公司能主导内核开发。

自2014年12月3.18版发布以来,代表近500家公司的5,062个人开发人员为Linux内核做出了贡献。大多数开发人员都为自己的工作付费—并且他们所做的更改为所服务的公司服务。 但是,尽管任何公司都可以根据其特定需求改进内核,但是没有公司可以朝着损害他人或限制内核功能的方向进行开发。

7.项目内不应有内部界限。

内核开发人员必须专注于内核的特定部分,但是只要可以证明更改合理,任何开发人员都可以对内核的任何部分进行更改。 结果,问题被固定在了问题的源头,而不是被解决,开发人员对内核整体有了更广阔的视野,即使是最顽强的维护者也无法无限期地拖延任何给定子系统的所需进度。

8.内核表明,重大的发展可以从很小的起点开始。

最初的0.01内核只有10,000行代码。 现在,它每两天增长一次。 开发人员现在添加的一些基本的微小功能将在将来开发为重要的子系统。

9.最重要的是,25年的内核历史表明,持续不断的合作可以带来共同的资源,而任何团队都无法自行开发这些资源。

自2005年以来,来自1300多家不同公司的大约14,000名个人开发人员为内核做出了贡献。 因此,Linux内核已成为其他领域的激烈竞争对手的公司大规模开发的通用资源。

这些总结以及有关Linux内核开发的更多详细信息,可以在与LWN的Jon Corbet共同撰写的2016 Linux Kernel Development Report中找到。

Libby Clark对本文有所贡献。

翻译自: https://opensource.com/article/16/12/yearbook-9-lessons-25-years-linux-kernel-development

linux 内核开发

linux 内核开发_25年Linux内核开发中的9课相关推荐

  1. javascript 开发_25个新JavaScript开发人员的免费资源

    javascript 开发 by freeCodeCamp 通过freeCodeCamp 25个新JavaScript开发人员的免费资源 (25 Free Resources for New Java ...

  2. linux内核用什么调试,什么是开发/调试Linux内核最有效和最优雅的方式

    以下是有关如何构建和运行自定义内核的说明. 获取来源 Linus Torvalds的树是[1]. 它在[2]上被标记为"主线". 要克隆它,请使用[1]中的信息: $git clo ...

  3. linux c内核开发,嵌入式uClinux的内核结构和开发环境

    1 引言 嵌入式操作系统是嵌入式系统的灵魂,而且在同一个硬件平台上可以嵌入不同的嵌入式操作系统.比如ARM7TDMI内核,可以嵌入Nucleus.VxWorks.uClinux等操作系统.在此主要对u ...

  4. linux 开发组织模式,Linux内核发布模式与开发组织模式(1)

    Linux内核社区经历20多年的发展,逐渐形成了一套完善的开发模式.作为想要加入社区进行开发的人来说,当然必须熟悉下这套模式啦,其中最重要的两点是: 内核发布模式 内核开发组织模式 本文将对第一点进行 ...

  5. Qt音视频开发06-海康sdk内核linux客户端

    一.前言 海康sdk的示例在官方是提供了的,但是无论UI还是交互简直是宇宙无敌的垃圾,猜测应该是初学者编写的,估计练手用的,所以老早就想把这个linux支持集成到自己的示例中,既然已经支持了windo ...

  6. arm linux 内核配置,Linux + ARM驱动开发环境配置(内核配置与编译)

    要想编写驱动,首先是建立内核目录树. ** 1.查看ARM开发板的内核版本 ** uname -a 我的arm开发板的版本是3.4.39 ** 2.安装必要的软件包 ** sudo apt-get i ...

  7. linux内核培训广州,嵌入式Linux驱动开发高级培训班-华清远见嵌入式培训中心

    课程目标 本课程以案例教学为主,系统地介绍Linux下有关FrameBuffer.MMC卡.USB设备的驱动程序开发.参加本课程学习的学员,因为具备了Linux设备驱动开发基础,所以本课程针对性较强, ...

  8. TCP/IP网络协议栈在Linux内核中的如何使用丨内核开发丨驱动开发丨操作系统丨内核源码

    TCP/IP网络协议栈在Linux内核中的如何使用 视频讲解如下,点击观看: TCP/IP网络协议栈在Linux内核中的如何使用丨内核开发丨驱动开发丨操作系统丨内核源码 C/C++Linux服务器开发 ...

  9. vscode读linux源码,vscode搭建linux内核开发环境

    vscode在linux下搭建内核驱动开发环境 一.前言 Souce insight是一个阅读.开发linux内核驱动模块的好工具,但是Source insight是收费的软件,而且没有原生linux ...

最新文章

  1. centos光盘修复引导_CentOS系统启动/boot/initramfs修复(实验)
  2. python连接linux服务器读取txt文件_python 读取Linux服务器上的文件方法
  3. html获取鼠标按键数,鼠标在IE、Firefox和Opera点击键所对应的数字代码
  4. mysql用in报错_Mysql子查询IN中使用LIMIT
  5. SwiftUI之如何使用@EnvironmentObject在视图之间共享数据
  6. c++标准库中,含有链表的类list
  7. 【英语学习】【Level 08】U03 My Choice L1 Good books are like good friends
  8. bzoj4033: [HAOI2015]树上染色(树形dp)
  9. linux命令快速手记 — 让手指跟上思考的速度(四)
  10. linux 关闭 vim配色方案,10 个你值得拥有的 Vim 配色方案
  11. 时间序列的分析和预测ARIMA
  12. 与孩子一起学编程03章
  13. 万年历 html 代码,用javascript 实现的万年历代码。
  14. 不存在有效_文水2单位存在安全隐患!
  15. java docx4j 使用教程_使用Docx4j操作PPT指南系列(二)
  16. spring aop 切面执行顺序和常见问题
  17. 网页在线验证工具(W3C国际标准验证)
  18. MATLAB/simulink仿真 光伏蓄电池恒流恒压充电 系统启动运行在恒流充电模式
  19. perror()函数
  20. IDEA 单行多行注释设置从当前鼠标位置开始 注释快捷键

热门文章

  1. 算法-两最长回文子串
  2. SpringBoot之Dubbox
  3. GNS3(eNSP)和VMWare搭建网络学习环境
  4. 微信公众平台开发(47)公交查询
  5. JS判断两种格式的输入日期的正确性
  6. 记录一次java.lang.ClassCastException的java类型转换异常解决方案-附最终解决方案
  7. Composition-based Multi-Relational Graph Convolutional Networks 多关系图神经网络 ICLR 2020
  8. java 数组 c foreach_在Java 8中,为什么Arrays没有给出forEach的Iterable方法?
  9. qt中QHBoxLayout或QVBoxLayout布局内控件的动态生成与显示
  10. 葡萄城 SpreadJS 表格控件 V11 产品白皮书