DOMJudge 介绍与选型指南

DOMjudge 是 ICPC 全球总决赛官方使用的开源自动评测系统(domserver+judgehost+chroot 沙箱)。本文联网溯源其定位、架构与 2026 现状:9.0.1 稳定版、GPL-2.0、ICPC 2018 起主力系统,并给出与 CMS、Kattis 的量化选型对比与决策建议(数据来源与查询日期均已标注)。

DOMJudgeDOMjudge代码评测PHP 编程Ubuntu22.042026/10/28

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.1domjudge.org 首页 Download 徽章,2026-10-28
上一稳定线8.3.2domjudge.org/download,2026-10-28
主版本大版本9.0 系列(当前)官方下载页
发行形态源码 tarball:https://www.domjudge.org/releases/domjudge-9.0.1.tar.gzdomjudge.org/download,2026-10-28
开发仓库github.com/domjudge/domjudge官方 about 页
支持渠道邮件列表 DOMjudge-devel、官方 Slack、安全报告 team@domjudge.orgdomjudge.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 由三大角色构成,天然是一个多机拓扑:

  1. 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。
  2. judgehost(评测守护):运行 judgedaemon 的 Linux 主机,通过 REST API 从 domserver 拉取待评测提交;可多机并行,这是"分布式判题"的实现载体。
  3. 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 三者画像

维度DOMjudgeCMS (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 fork301418不适用
技术栈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)云端托管,不可见
APIREST 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 真机实测:

  1. 本文(A1):定位、架构与选型决策;
  2. 部署篇:《Ubuntu 22.04 安装 DOMJudge 9.0.1 指南》——domserver 与 judgehost 的源码安装、数据库初始化、chroot 构建与端到端验证,含全程排障实录;
  3. 配置篇:《DOMJudge 9.0.1 配置参数详解》——db-config.yaml 六大类 61 项参数、Web/API/数据库三种修改通道与题目级覆盖,含配置误清事故复盘;
  4. 命令篇:《DOMJudge 9.0.1 常用 CLI 命令与工具详解》——随包 CLI 工具逐个实测、用户与 ACL 增删、备份恢复回环,含 --help 陷阱清单。

若你正处于选型阶段,建议先读本文与部署篇的排障小节,对运维成本建立直觉后再决策。