“先发布,后审核”:Go模块生态的阿喀琉斯之踵?

本文永久链接 – https://tonybai.com/2025/07/07/go-module-supply-chain-attack-case 大家好,我是Tony Bai。 最近,GitLab的安全研究团队披露了一起极其巧妙的供应链攻击,目标直指 Go 社区中一个流行的 MongoDB 模块。这个案例本身已经足够令人警醒,但如果我们拨开攻击手法的层层迷雾,会发现其背后暴露出的,可能是整个开源生态,包括我们所依赖的 Go Modules,一个根本性的、与生俱来的脆弱性。 ...

July 7, 2025 · 7 min · Tony Bai

透视软件供应链安全:SBOM标准解读与Go项目生成指南

本文永久链接 – https://tonybai.com/2025/05/22/go-sbom-practice 大家好,我是Tony Bai。 近年来,软件供应链安全事件频发,从 SolarWinds 到 Log4Shell,每一次都给业界敲响了警钟。在这样的背景下,软件物料清单 (SBOM, Software Bill of Materials) 的重要性日益凸显。无论是甲方爸爸的硬性要求(尤其是在2B软件交付和白盒交付场景),还是我们自身对软件透明度和安全性的追求,SBOM 都已成为现代软件开发不可或缺的一环。 ...

May 22, 2025 · 13 min · Tony Bai

认知负荷对编程语言选择和学习的影响

认知负荷对编程语言选择和学习的影响 | Tony Bai Tony Bai一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ 关于我 文章列表 认知负荷对编程语言选择和学习的影响 十月 24, 2024 0 条评论 ...

October 24, 2024 · 14 min · Tony Bai

后端程序员一定要看的语言大比拼:Java vs. Go vs. Rust

这是Java,Go和Rust之间的比较。这不是基准测试,更多是对可执行文件大小、内存使用率、CPU使用率、运行时要求等的比较,当然还有一个小的基准测试,可以看到每秒处理的请求数量,我将尝试对这些数字进行有意义的解读。 为了尝试尽可能公平比较,我在此比较中使用每种语言编写了一个Web服务。Web服务非常简单,它提供了三个REST服务端点(endpoint)。 ...

May 1, 2020 · 9 min · Tony Bai

为buildc添加安装包制作相关功能

在"也谈C应用安装包制作与部署“一文中,我提到了为每一个源码工程建立单独的安装包制作工程(setup project)的想法,这两天我就一直在折腾这件事儿^_^。 最初我并没有想去搞一个通用的安装包制作工具,只是为一个现有的源码工程建立了一个试验性质的安装包工程,并实现了其构建脚本(build.py)。但之后考虑到各个项目都要建立一个对应的安装包工程,安装包工程的构建脚本build.py势必会沦落成被copy来copy去的下场,这显然不是一个很好的解决问题的办法。那是否需要再单独设计和实现一个安装包制作工具呢?工具多了,大家用起来肯定会很烦,不能自找没趣^_^。要知道为程序员编写工具可是一件很困难、很头疼,需要你很谨慎的事情。现在我们已经有了源码工程构建工具buildc,我前几天还为buildc添加了安装脚本,并用之改造了一个真实的工程,并给大家做了讲解,可以说大家对buildc算是接受了。 ...

February 10, 2012 · 4 min · Tony Bai

为buildc添加setup脚本

buildc在发布0.1.0版时并没有做好安装脚本,当时的建议是直接下载0.1.0的源码包或svn export/checkout源码包,并手工将buildc目录位置加入到用户的PATH环境变量中。近期buildc计划正式投入到项目中使用,为了方便大家安装以及以后的统一升级维护,我花了些时间给buildc加上了setup脚本。 Python有标准的程序分发方案,不过我对这些了解不多。buildc本身很简单,我觉得没有必要把安装做得很复杂,所以就自己动手编写了一个setup.py,不到100行,用于安装buildc。 Python的标准安装脚本也叫setup.py,我这里也借鉴了这个名字。有了setup.py,buildc的安装就简单多了: * 下载buildc Release包(当前最新是buildc-0.1.1) * 解压发布包,在发布包路径下,执行setup.py install [–prefix=YOUR_INSTALL_PATH] ...

February 7, 2012 · 3 min · Tony Bai

C语言项目构建管理辅助工具 – buildc

这几年我一直从事C语言项目的开发。这些项目的规模都不算小,少则十几万代码,多则几十万行代码,至少也都算得上是中型项目吧。项目构建工具使用的是传统的Make工具,构建脚本都是自行编写的,构建时直接在顶层目录下敲入make即可。 这种传统的构建方式其实是很耗时费力的。比如执行make之前你需要根据项目代码的实际路径重新设定一些环境变量或修改Makefile中的某些标识路径的变量;你还要将项目依赖的各种内部公共库、第三方开源库悉数找到,并安装在指定目录下,修改Makefile中这些第三方库的路径配置。只有做完这些后,你才能顺利地执行Make。以后每当你更换一个环境,你就要将上面的步骤重复执行一遍。有的项目第三方依赖较多,要完整地搭建一个项目构建环境所耗费的时间也是很惊人的,特别是对一些不熟悉项目构建的新人更是如此。另外随着产品被要求具备在多个平台上运行的能力,你的构建脚本还要支持在多个平台上的构建,你要为项目所依赖的第三方库准备多个平台的版本;当某个依赖库版本进行了升级,你还要手工在多个环境下进行更新。 ...

December 8, 2011 · 10 min · Tony Bai

Build ArgoUML and AndroMDA

由于Dominoo近期策略的改变,所以我开始关注和研究UML和MDA领域较为出名的开源项目。我准备先拿ArgoUML和AndroMDA“开刀”。 ...

January 19, 2005 · 4 min · Tony Bai