开源项目的5年长跑,runcv1.0终于正式发布!(代码片段)

张晋涛 张晋涛     2022-12-10     475

关键词:

本文我来分享下与我们(搞容器化/K8S 从业者)息息相关的一个基础项目 runc 是如何自 2016 年发布了 v1.0.0-rc1 到现在历经 5 年长跑,从 rc1 一直到 rc95 ,如今终于正式发布 v1.0 版本的过程,及这中间的故事。

大家好,我是张晋涛。

在 2018 年 11 月底时,我写了一篇文章 《runc 1.0-rc6 发布之际》 , 那应该是我第一次公开介绍 runc。如果你还不了解 runc 是什么,以及如何使用它,请参考我那篇文章。本文中不再对其概念和用法等进行说明。

在 2019 年 3 月底时,我写了另一篇文章 《runc 1.0-rc7 发布之际》,介绍 runc 1.0-rc7 发布的原因,及那个版本中最主要的修复 CVE-2019-5736 。其中也介绍了关于 runc/Docker 等对于 Linux 内核兼容性的问题,感兴趣的小伙伴可以看看。

关注我的朋友们,应该也在 K8S 生态周报 中多次看到过我对 runc 的介绍,包括其特性及安全漏洞等方面。

在 2015 年 6 月, Docker ,CoreOS 和其他一些公司共同成立了 OCI (开放容器计划) 组织,其最主要的内容有两个:

  • 容器运行时规范
  • 容器镜像规范

Docker 将其运行时捐赠给了 OCI ,作为容器运行时规范的基础实现,托管在了 https://github.com/opencontai... 也就是现在大家看到的 runc 了。

发布历程

我们来看看 runc 版本发布的历程,以便了解它为何长跑 5 年。

runc versionrelease timeruntime-spec version备注
runc v1.0-rc12016.06.04v1.0.0-rc1
runc v1.0-rc22016.10.01v1.0.0-rc2-38-g1c7c27d
runc v1.0-rc32017.03.22v1.0.0-rc5
runc v1.0-rc42017.08.09v1.0.0runtime-spec 首次发布 v1.0
runc v1.0-rc52018.02.27v1.0.0首次计划作为最后一个 rc 版本
runc v1.0-rc62018.11.21v1.0.1-49-g5684b8a计划是 1.0 之前的最后一个功能版本,包含了一些规范合规性的修正
runc v1.0-rc72019.03.28v1.0.1-59-g29686db修复 CVE-2019-5736
runc v1.0-rc82019.04.26v1.0.1-59-g29686db修复 v1.0.0-rc7
runc v1.0-rc92019.10.05v1.0.1-59-g29686db修复 CVE-2019-16884
runc v1.0-rc102020.01.23v1.0.1-59-g29686db修复 CVE-2019-19921
runc v1.0-rc902020.05.12v1.0.1-59-g29686db与 runc v1.0-rc10 相同,是为了修正 version scheme
runc v1.0-rc912020.07.02v1.0.2-8-g237cc4f开始支持 cgroup v2 ;一些规范性的问题得到解决
runc v1.0-rc922020.08.06v1.0.2-23-g4d89ac9修复我在 runc v1.0-rc91 中发现的 bug
runc v1.0-rc932021.02.04v1.0.2-35-ge6143cacgroup v2 得到稳定支持,
runc v1.0-rc942021.05.10v1.0.2-57-g1c3f411修复 runc v1.0-rc93 中的 regressions
runc v1.0-rc952021.05.19v1.0.2-57-g1c3f411修复 CVE-2021-30465
runc v1.02021.06.22v1.0.2-57-g1c3f411

我在上面的表格中,专门增加了一列 runtime-spec version ,表示 OCI 组织中的容器运行时规范的版本。我们来总结下这个发布进程:

  • 在 runc v1.0-rc5 之前,runc 其实也没打算发布正式版,毕竟标准还没正式完成呢,实现也不可能先出稳定版;
  • runc v1.0-rc7 , rc 9 ~ rc 10 均是为了修正严重的安全问题;
  • runc v1.0-rc90 纯粹是解决 version scheme 的问题;
  • runc v1.0-rc91~rc93 主要功能点是在 cgroup v2 的支持,以及一些跟规范集成的问题;
  • runc v1.0-93 之后,其实就基本控制代码冻结了,直到 runc v1.0-rc95 修复了一个安全漏洞;
  • 目前主要的几个仓库也都已经测试了跟 runc 代码仓库中最新代码的集成,相关的问题也已经修复。

从这里看到的三个主要耗时的点如下:

  • runtime-spec 尚未正式发布 v1.0 版本;
  • 修复安全漏洞和自身的 bug ;
  • 完成新特性的耗时;

规范未发布 v1.0 耗时的部分这里就不多说了,这也是个依赖项,对于大多数的项目/软件开发都会有类似的情况,只能去推动规范的发布了;

至于特性,bug 和安全漏洞等的耗时,这其实跟 runc 项目的功能和其定位有关。runc 偏底层了一些,这就需要有更多相关领域的知识来支撑。就拿我在 runc v1.0-rc 91 中发现的那个bug 来说,对 Linux 内核源码不太了解的人,确实会花费比较多时间的。

- switch 
- case mode&unix.S_IFBLK == unix.S_IFBLK:
+ switch mode & unix.S_IFMT 
+ case unix.S_IFBLK:
    devType = configs.BlockDevice
- case mode&unix.S_IFCHR == unix.S_IFCHR:
+ case unix.S_IFCHR:
    devType = configs.CharDevice
- case mode&unix.S_IFIFO == unix.S_IFIFO:
+ case unix.S_IFIFO:
    devType = configs.FifoDevice
default:
    return nil, ErrNotADevice

有趣的是 runc v1.0 版本 Release 的标题是 "A wizard is never late, nor is he early, he arrives precisely when he means to." 这大概也很符合 runc 的发布历程了吧 :)

但无论如何,runc 经过 5 年长跑,终于发布了 v1.0 版本!感谢每一个为之付出过的小伙伴!

欢迎大家下载更新! https://github.com/opencontai...


欢迎订阅我的文章公众号【MoeLove】

bsv基础架构团队正式发布liteclienttoolbox工程中的三个开源项目

...1a;bitcoinsv.ioBSV基础架构团队正式发布以下三个激动人心的开源项目,它们均隶属于LiteClientToolbox工程项目。正式发布BitcoinJ-SVv1.0.1BitcoinJ-SV是旧版BitcoinJ库的轻量级版本,针对可大规模扩容BSV区块链做了大量的优化工作。此... 查看详情

dataease模板市场正式发布

2022年6月21日,DataEase开源数据库可视化分析平台正式发布模板市场(https://dataease.io/templates/)。作为广大社区用户期待已久的功能之一,模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方... 查看详情

剑桥高材生归国创业,15年ai长跑终于迎来ipo

 图片来源于网络文丨智能相对论作者丨陈选滨历经半年的沉寂,AI领域终于迎来了一个新高潮——又一家AI企业走向IPO,这次的主角是来自苏州的对话式人工智能平台型企业思必驰。日前,思必驰于上交所科创板提交... 查看详情

jqgrid历史和现状

jqGrid历史时间事件jquery版本开源协议2007年5月5日发布1.0beta版jquery1.1.2MIT/GPL2007年6月30日发布1.1beta版MIT/GPL2007年8月4日发布2.0正式版MIT/GPL2007年10月7日发布3.0rc版jquery1.2.1MIT/GPL2008年3月7日发布3.0finalpreview版MIT/GPL2008年3月22日发布3.0正... 查看详情

2021年全球知名开源项目大更新

下面简单回顾2021年一些带来较大变化和影响的项目更新信息。PHP8.1.0正式发布枚举,只读属性,First-class可调用语法,新的初始化器,纯交集类型,Never返回类型,Final类常量,显式八进制数字表示法... 查看详情

jqgrid历史和现状

...5日,发布了1.0beta版本。从下图可以看到,jqgrid的开源协议是MIT/GPL协议。2007年6月30日,发布1.1beta版本。从下图可以看出,大家最熟悉的demo演示当时还没有。2007年8月4日,发布2.0正式版。2007年10月7日,发... 查看详情

新增ui测试模块,metersphere一站式开源持续测试平台发布v1.20lts版本

2022年5月5日,MeterSphere一站式开源持续测试平台正式发布v1.20LTS版本。这是继2021年5月发布v1.10LTS版本后,MeterSphere开源项目发布的第二个LTS(LongTermSupport)版本。MeterSphere开源项目组将对MeterSpherev1.20LTS版本用户提供... 查看详情

giteereward正式启航,海量悬赏即将到来

一个月前,Gitee上线了开源项目Issue悬赏功能GiteeReward,在小范围公测后,得到了诸多好评与反馈,马建仓代表Gitee团队向大家鞠躬~在公测的这一个月时间里Gitee团队根据大家的反馈,也在不断地打磨产品的使用体验,保证大家... 查看详情

再传捷报!dataease开源项目githubstar数突破2000!

2021年8月6日13:00,FIT2CLOUD飞致云旗下开源项目——DataEase开源数据可视化分析平台GitHubStar数突破2000个。此时距DataEase开源项目正式对外发布仅经历了40天。DataEase开源项目于2021年6月28日正式对外发布,6月30日晚间即进入GitH... 查看详情

华为正式捐赠欧拉:操作系统领域的重量级开源项目

...系统产业峰会上,华为携手社区全体伙伴共同将欧拉开源操作系统(openEuler,简称“欧拉”)正式捐赠给开放原子开源基金会。华为计算基础软件副总裁、欧拉开源社区理事长江大勇、开放原子开源基金会理事长杨涛... 查看详情

2015年,facebook排名前5的开源项目

...//www.infoq.com/cn/news/2016/01/facebook-open-source-projectsFacebook坚信开源的力量。当社区集合起来编写代码时,其好处是不可估量的。有人能指出问题所在,同时解决方案也会很快跟进。借助于社区的力量,大 查看详情

.net6rc1正式发布

...的第一个版本,该版本将于11月正式发布,作为在开源MIT协议下整合所有不同的.NET开发模组件的开源跨平台实现。这是一个从2014年开始,持续多年的,以改变应用开发游戏规则的努力,由于COVID-19大肆虐,推迟... 查看详情

腾讯王巨宏:开源是一项长跑,与开发者共赢开源未来

...术峰会在武汉召开,腾讯首次披露了在5大技术领域的开源新进展,并回顾了腾讯开源的四大变化。腾讯公司副总裁王巨宏表示,云与开源共生共荣、相互支撑,共同为用户和开发者创造价值,将是未来行业的... 查看详情

2017年6大热门开源项目

摘要:2017年哪些开源项目值得关注?让我们来看看2017年的6大热门开源项目。以下列表显示了开放源码社区在过去十年的发展程度。这里所有提及的项目(Lab41除外)均于2014年之后发布,而且每个项目都已在各自的社区中发挥重... 查看详情

终于来了!微软正式推出vscode测试api

随着VisualStudioCode1.59.0正式版本的发布,全新的插件测试API也从试验版本进入了正式版本。自2020年9月起至今,经过了将近一年及数次版本迭代的打磨,不管是API的功能性还是易用性,与首个预览版本相比都获得了... 查看详情

终于来了,idea2021.1版本正式发布,完美支持wsl2(代码片段)

...好习惯IntelliJIDEA2021.1EAP版本已经发布了很久,就在今天,终于等到正式版的发布。这个大版本最大的更新内容,就是支持WSL2和JAVA16了。而且除了支持WSL2,也支持其他形式的“ssh远程运行”,就像clion那样;让你的java程序开发在... 查看详情

2017年5月笔记

学习ReactNative必看的几个开源项目http://www.open-open.com/lib/view/open1465268659981.html饿了么RN大神开源的reading项目,已经完成Android和iOS双适配。https://github.com/attentiveness/readingReactNative开源项目-稀土掘金客户端(Android、iOS双适配)http 查看详情

苦熬4年中国面板终于取得零的突破,正式向苹果供应oled面板

中国最大也是全球最大的液晶面板企业京东方已正式向苹果供应OLED面板,用于iPhone12上,这是京东方在2017年量产OLED面板以来首次实现向苹果供应OLED面板的宏愿。苹果对全球手机供应链拥有巨大的影响力,基本上只要... 查看详情