DOMJudge 介绍与选型指南
DOMjudge 是 ICPC 全球总决赛官方使用的开源自动评测系统(domserver+judgehost+chroot 沙箱)。本文联网溯源其定位、架构与 2026 现状:9.0.1 稳定版、GPL-2.0、ICPC 2018 起主力系统,并给出与 CMS、Kattis 的量化选型对比与决策建议(数据来源与查询日期均已标注)。
DOMJudge 介绍与选型指南
本文为认知与选型篇,全部信息来自官方站点、官方手册与项目仓库的联网溯源(查询日期 2026-10-28),不涉及本地实测;部署、配置与命令行的真机实测结论分别见本专栏 B/C/D 三篇。
一、DOMjudge 是什么
DOMjudge 是一套开源的程序设计竞赛自动评测系统(automated judge system)。按官方 about 页(domjudge.org/about,查询日期 2026-10-28)的表述:它提供赛题解答提交机制、全自动判题,并为团队(team)、评委(jury)与公众提供 Web 界面。
它不是面向 OJ(Online Judge)刷题平台的通用框架,而是为有明确时间窗、固定赛题集、现场或同步在线赛事设计的竞赛管理系统:团队端界面刻意保持简单高效,管理端则提供重判(rejudging)、答辩/澄清(clarifications)、逐次提交的详细判题信息等jury级能力。这一点是与通用 OJ(如 Hydro、HustOJ)最本质的定位差异。
三个关键事实(来源均为官方与项目仓库,查询日期 2026-10-28):
- ICPC 血统:自 2012 年起用于 ICPC 国际大学生程序设计竞赛全球总决赛,2018 年起成为其主力评测系统;区域赛如 NWERC(2007 起)、SWERC(2008 起)、BAPC(2004 起)、GCPC(2010 起)、UKIEPC(2015 起)长期使用,2023 年 NAC(北美锦标赛)亦在其列。
- 开放可扩展:分布式判题(judgehost 可横向加机器)、模块化的语言/编译器接入,并内置 REST API(兼容 ICPC Contest API 规范,官方文档站直接链接到 ccs-specs.icpc.io 草案)。
- 许可与活跃度:GPL-2.0(GitHub 仓库页 SPDX 标识),截至 2026-10-28,domjudge/domjudge 仓库 922 stars、301 forks——星数不高,但它属于"基础设施型"项目:真实影响力由 ICPC 世界总决赛而非社区星标度量。
二、版本与项目现状(2026-10-28 溯源)
| 项目 | 状态 | 来源 |
|---|---|---|
| 当前稳定版 | 9.0.1 | domjudge.org 首页 Download 徽章,2026-10-28 |
| 上一稳定线 | 8.3.2 | domjudge.org/download,2026-10-28 |
| 主版本大版本 | 9.0 系列(当前) | 官方下载页 |
| 发行形态 | 源码 tarball:https://www.domjudge.org/releases/domjudge-9.0.1.tar.gz | domjudge.org/download,2026-10-28 |
| 开发仓库 | github.com/domjudge/domjudge | 官方 about 页 |
| 支持渠道 | 邮件列表 DOMjudge-devel、官方 Slack、安全报告 team@domjudge.org | domjudge.org/about,2026-10-28 |
| 演示实例 | demoweb(官方在线 demo,含 API 文档入口 /demoweb/api/doc) | domjudge.org/documentation,2026-10-28 |
版本解读:DOMjudge 的版本节奏跟随年度赛事周期,9.0 系列为 2025-2026 赛季的现役版本;若追求久经赛事验证的保守选型,8.3.2 仍可获取。生产部署建议直接采用 9.0.1 并跟随小版本修复。
三、系统架构:domserver + judgehost + chroot 沙箱
DOMjudge 由三大角色构成,天然是一个多机拓扑:
- domserver(评测核心/网站):PHP Web 应用(官方 about 页标注 PHP ≥ 7.4.0,9.0 管理员手册实际要求 PHP ≥ 8.2.0,安装篇实测以 8.3.36 部署;需 Apache 或 Nginx 与 PHP CLI),持久层为 MySQL/MariaDB ≥ 5.5.3。承载团队提交、jury 审题、scoreboard、答辩与 REST API。
- judgehost(评测守护):运行 judgedaemon 的 Linux 主机,通过 REST API 从 domserver 拉取待评测提交;可多机并行,这是"分布式判题"的实现载体。
- chroot 沙箱:每个被评测程序在受限的 chroot 环境中编译运行,配合时间/内存限制与系统调用约束实现安全隔离——这是 DOMjudge 不依赖虚拟化的经典方案,也是它对"真实 Linux 服务器 + root 权限"要求的来源。
这套架构对部署者的含义:它要的不是一台服务器,而是一个小型集群(至少 1 台 domserver + 1 台 judgehost,可同机亦可分离);换来的是接近正式赛事级的可信判题与水平扩展能力。
官方声明的运行前提(domjudge.org/about,2026-10-28):至少一台拥有 root 权限的 Linux 机器;Apache 或 Nginx 搭配 PHP(about 页标注 ≥ 7.4.0,9.0 管理员手册要求 ≥ 8.2.0)与 PHP CLI;MySQL 或 MariaDB ≥ 5.5.3;以及需要支持的各编程语言编译器。详细软件清单由官方管理员手册(administrator manual)维护。
四、量化选型对比:DOMjudge vs CMS vs Kattis
竞赛评测系统的三条主流路线:自建开源 ICPC 系(DOMjudge)、自建开源 IOI 系(CMS)、商业托管 SaaS(Kattis 类)。以下数据逐项标注来源,查询日期均为 2026-10-28。
4.1 三者画像
| 维度 | DOMjudge | CMS (Contest Management System) | Kattis |
|---|---|---|---|
| 定位 | 现场赛/区域赛自动评测,ICPC 生态事实标准 | 通用竞赛管理,IOI 生态代表 | 商业评测 SaaS + 公开刷题站(open.kattis.com) |
| 官方背书 | ICPC World Finals 2012 起使用、2018 起主力系统(domjudge.org/about) | 为 2012 年国际信息学奥林匹克(IOI)设计(cms-dev.github.io) | 服务企业招聘筛选、大学课程与赛事托管(kattis.com) |
| 当前稳定版 | 9.0.1(domjudge.org) | 1.5.1(cms-dev.github.io) | 闭源服务,无版本号 |
| 开源许可 | GPL-2.0(GitHub 仓库页) | AGPL-3.0(GitHub 仓库页) | 不开源 |
| GitHub 星标 | 922(domjudge/domjudge) | 1043(cms-dev/cms) | 不适用 |
| GitHub fork | 301 | 418 | 不适用 |
| 技术栈 | PHP(Web)+ MariaDB/MySQL + Linux chroot 沙箱(官方 requirements) | Python 系分布式系统(cms-dev.github.io/docs) | 托管服务 |
| 数据主权 | 完全自持,GPL 自建 | 完全自持,AGPL 自建 | 数据在供应商侧 |
| 部署门槛 | 需 root Linux、PHP/MariaDB 运维能力 | 需 Python 系与多组件运维能力 | 近零,注册即用 |
| 判题扩展 | judgehost 水平加机器(官方 about) | 分布式设计(cms-dev.github.io) | 云端托管,不可见 |
| API | REST API,兼容 ICPC Contest API(ccs-specs.icpc.io) | 有,接口面向竞赛管理 | 有限 Web/API 能力 |
| 典型成本 | 服务器 + 自运维人力 | 服务器 + 自运维人力 | 订阅/按用付费 |
4.2 决策要点
- 要复现 ICPC 规则、对接 ICPC Contest API、跑现场赛/网络同步赛:选 DOMjudge。它的赛制语义(ICPC 计分、罚时、气球、答辩流)是原生的,而 CMS 的任务类型体系更偏 IOI/部分分场景。
- 要 IOI 式部分计分、批处理任务、更丰富的任务类型:优先评估 CMS;其 1.5.1 稳定线与 DOMjudge 9.0.1 的活跃节奏相比明显放缓(cms-dev.github.io,2026-10-28),选型时需评估自身接手维护的意愿。
- 不想自建、预算可期、或主要做招聘筛选/课程作业:Kattis 类 SaaS 更省力;代价是闭源、数据出域、定制受限。
- 要做刷题平台/长期运营的 OJ:三者都不是最优解——DOMjudge/CMS 是"赛事系统"而非"题库运营系统",应考虑专门的 OJ 项目(此为定位判断,不展开)。
4.3 自建路线下的 DOMjudge 与 CMS 一句话对比
同为自建,DOMjudge 用 PHP + MariaDB 的朴素栈换取了最低的运维心智负担与 ICPC 赛事的极限打磨;CMS 用 Python 分布式架构换取了任务类型的表现力。对绝大多数以 ICPC 赛制为蓝本的赛事与实训场景,DOMjudge 的栈更容易在既有 LNMP/LEMP 运维体系上落地。
五、适用与不适用场景
适合:
- 校赛/省赛/区域赛等 ICPC 赛制现场赛与线上同步赛;
- 高校程序设计实训、训练营的限时测验(需要防作弊的沙箱判题与罚时计分);
- 企业/机构内部算法竞赛(拥有 Linux 运维资源,且对数据主权敏感);
- 需要 Contest API 对接第三方大屏、证书系统的赛事工程。
不适合:
- 无 Linux root 权限的纯虚拟主机/共享托管环境(judgehost 的 chroot 沙箱与系统级限制需要特权);
- 需要题库运营、用户成长体系、题解社区的 OJ 平台;
- 无任何 Linux 运维人力且不愿付费托管的小团队(自建门槛真实存在,详见部署篇)。
六、部署与运维成本预估
基于官方 requirements 与架构(来源见第三节),自建一套最小可用的 DOMjudge 需要:
- 硬件:1 台 2C4G 级服务器承载 domserver(网站+数据库),1 台同规格机器承载 judgehost;50 人以下小型赛事可先同机部署,赛期前再拆分;
- 软件:Ubuntu 22.04 LTS 等发行版 + Nginx/Apache + PHP(9.0 手册要求 ≥8.2,实测 8.3.36)+ MariaDB + 各语言编译器(GCC/OpenJDK/Python 等);
- 人力:熟悉 Linux 服务管理的运维半天到一天可完成单机安装(具体步骤与实测排障见部署篇);判题机扩容为增量操作;
- 隐性成本:chroot 评测环境构建、PHP 运行限制调优、赛题测试数据制作是三处主要的经验成本,专栏 C/D 两篇对此有逐项展开。
七、本专栏阅读路线
本专栏四篇构成一条从认知到运维的完整路径,均基于 DOMjudge 9.0.1 + Ubuntu 22.04 真机实测:
- 本文(A1):定位、架构与选型决策;
- 部署篇:《Ubuntu 22.04 安装 DOMJudge 9.0.1 指南》——domserver 与 judgehost 的源码安装、数据库初始化、chroot 构建与端到端验证,含全程排障实录;
- 配置篇:《DOMJudge 9.0.1 配置参数详解》——db-config.yaml 六大类 61 项参数、Web/API/数据库三种修改通道与题目级覆盖,含配置误清事故复盘;
- 命令篇:《DOMJudge 9.0.1 常用 CLI 命令与工具详解》——随包 CLI 工具逐个实测、用户与 ACL 增删、备份恢复回环,含 --help 陷阱清单。
若你正处于选型阶段,建议先读本文与部署篇的排障小节,对运维成本建立直觉后再决策。