2020 年春季,我决定着手解决 curl 项目在开发方面缺乏可视化的问题。
代码行数的增长情况如何?随着时间的推移,我们增加了多少命令行选项?随着时间的推移,有多少人每年提交的代码超过 10 次?
我想要一个能从不同角度、视角和探测方式直观地展示项目进展情况的工具。我设想它就像一个复杂的医疗设备,用来监测病人,经验丰富的医生只需看一眼就能评估病人的健康状况。这个病人就是 curl,而医生就是像我一样的开发者。
GitHub 提供了一些基本的图表,但我发现(现在仍然觉得)它们的功能非常有限。我们也对仓库运行了gitstats 命令,所以也得到了一些基本的图表供我们参考。
自己做
我四处搜寻,看看有哪些现成的框架和方案可以作为我这个项目的基础,因为我确信自己需要做大量的定制工作。但我找到的方案都不太符合我的需求。所以我决定自己做一个,至少先从这个开始。
我决定为此生成静态图片,而不是在网站上添加我不熟悉的 JavaScript 框架。静态每日图片对于提升加载速度和 CDN 缓存都非常有利。由于我们已经禁止在网站上运行 JavaScript,这让我省去了与 JavaScript 对抗的麻烦。SVG 图片仍然是基于矢量的,应该可以很好地缩放。
从下载大小的角度来看,SVG 也是一种更好的格式,因为 PNG 对于这类图像几乎总是会生成更大的图像。
最初,我设想的只是少量图表,主要展示时间线,曲线从左下角向右上角延伸。后来证明,我的想法有点天真。
gnuplot
我之前看过别人用 gnuplot 生成的图像和图表,所以对它有一些基本的了解。既然 gitstats 已经用到了 gnuplot,我就决定深入学习一下。
gnuplot是一个已有 40 年历史的命令行工具,可以生成高级图表和数据可视化。它功能强大,但也意味着并非所有功能都简单易懂,但几乎所有图表、绘图和曲线它都能以某种方式处理。
我碰巧在网上遇到了 Lee Phillips,他慷慨地给了我一本他的书的 PDF 版本,书名恰如其分地叫做gnuplot 。这真的很有帮助!
生成用于 gnuplot 的数据
我决定,对于要生成的每个图表,我先用一个脚本收集并格式化数据,然后再用 gnuplot 在另一个独立的步骤中渲染图像。这样便于分步骤处理,也便于后续单独调整,而且如果我觉得某个图表有问题,也很容易查看其背后的数据等等。
我断断续续地在后台工作了大约两周,才得到了第一组可视化 curl 开发状态的图表。
然后,我编写了必要的粘合脚本,将第一个包含现有图表的仪表盘添加到 curl 网站上。该仪表盘为静态 HTML,显示静态 SVG 图像。
2020年3月20日,仪表盘的第一个版本显示了不少于20个独立的图表。我所说的“图表”指的是单独的图像,其中可能包含多个绘图/线条/曲线。第一个版本的仪表盘使用了23个独立的绘图,共计20个图表。
从那时起,我们每天都会在那里展示更新后的图表。
数据
用于绘制图表的所有数据都是公开可用的,我很乐意使用任何可用的数据:
- git 仓库(源代码、标签等)
- GitHub 问题
- 邮件列表存档
- curl漏洞数据
- HackerOne 报告
- 冰壶运动的历史细节
一如既往地公开透明。
然后它长大了
从那以后,我时不时会想到项目中的其他一些内容,比如代码、开发、Git 历史记录、社区、邮件等等,这些内容或许可以可视化,然后我就会往仪表盘里添加一两张图表。六年过去了,最初的二十张图已经扩展到一百张,其中包括近三百个独立的图表。
其中大部分内容都与主题相关,而少数则比较滑稽有趣。可谓良莠不齐。
图表 100
第100张图表于2026年3月15日添加,当时我重新启用了“漏洞版本”图表(该图表于3月16日首次出现在网站上)。它显示了每个历史版本已知的漏洞数量。我之前移除了这张图表,因为它变得难以阅读,但在新版本中,我只显示了每四个版本中的标签,这使得图表看起来比之前更加简洁。

今天我们还推出了一种新的 8 列显示模式。
可定制但可用
当然,很多图表都是内部使用的,而且专门针对 curl。这些图表以及整个仪表盘的脚本仍然是专门为 curl 及其特定环境和数据编写的。如果要让它们适用于其他环境,则需要进行一些调整和修改。
所有剧本当然都是公开的,任何人都可以查阅。
我以前也提供网站上所有用于渲染图表的 CSV 文件,方便用户访问,但后来发现这项工作几乎无人问津,所以我又把它删掉了。如果你知道怎么操作,把 .svg 扩展名换成 .csv,仍然可以获取大部分数据。
数据即知识
这些图表和插图不仅有趣,还能帮助我们从不同的角度和视角看待发展,并帮助我们得出结论,或者至少尝试得出结论。作为一个成熟且致力于做好本职工作的项目,我们从这些 curl 数据中学到的一些经验或许可以借鉴并应用到其他项目中。甚至可以作为我们决定下一步行动的依据。
我个人在无数篇博客文章、Mastodon 论坛帖子和公开的 curl 演示文稿中都使用过这些图表。它们有助于展示 curl 的开发进度。
笑话
在 Mastodon 上,我一直开玩笑说自己是个图表狂,而且每当我展示又一个添加到集合中的图表时,总会有人问一个几乎是必问的问题:仪表板上的图表数量图表怎么样?
早期我也编写了类似的脚本,以便立即满足该需求。2026年3月14日,我决定将其作为永久图表添加到仪表板上。

更进一步的玩笑(虽然有些人会觉得这已经不好笑了)是问我要一张图表,显示图表的数量。为了满足大家的需求,我也有这张图表。不过,这张图表并没有显示在仪表盘上:

更多图表
我确信随着时间的推移,我会(我们?)添加更多图表。如果您对我们应该展示哪些源代码或开发细节有任何好的想法,请告诉我。
链接
Git 仓库: https://github.com/curl/stats/
每日更新的 curl 控制面板: https://curl.se/dashboard.html
curl gitstats: https://curl.se/gitstats/
原文: https://daniel.haxx.se/blog/2026/03/15/one-hundred-curl-graphs/