open-oscar-server:用 Go 重生的 AIM 与 ICQ 服务器,能跑通 20 年前的客户端
该项目围绕「Self-hostable instant messaging server compatible with classic AIM and ICQ clients written in golang. (Independently developed, not affiliated with or endorsed by AOL).」构建,适用于实际场景的开源实践,提供可复用的工具链与集成方式。
秒懂
- 它是什么?
- open-oscar-server 是一个用 Go 编写的自托管即时通讯服务器,兼容经典 AIM 和 ICQ 客户端。它不模仿现代聊天软件,而是忠实还原 OSCAR 协议,让 Pidgin、vAIM 甚至 1998 年的 Windows AIM 都能连上来。
- 适合谁用?
- 如果你手头还有当年的 AIM 或 ICQ 安装包,或者你正在做协议逆向、怀旧软件考古,open-oscar-server 是目前少数能真正跑通这些客户端的开源服务器。它用 Go 提供单一二进制,管理 API 用 curl 就能操作,MIT 许可允许你随意改造。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 2 天前。
- 用什么语言写的?
- 主要是 Go(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决的是协议兼容,不是聊天需求
现代即时通讯服务器解决的是多端同步、消息回执、端到端加密这些问题。open-oscar-server 解决的是另一个问题:让 1998 年到 2005 年之间的 AIM 和 ICQ 客户端还能连上一个能用的服务器。AOL 早已关闭官方 OSCAR 服务,这些客户端内置的服务器地址全部失效。这个项目用 Go 重写了服务器端,让旧客户端重新找到归宿。它面向的不是普通用户,而是怀旧玩家、协议研究者、以及需要在内网复现老协议环境的开发者。README 明确列出支持的客户端版本,从 AIM 1.x 到 7.x,ICQ 从 98x 到 2003x,还有 TOC1 和 TOC2 协议的第三方客户端。这不是一个通用聊天服务器,它是一台时间机器。
架构:一个 Go 二进制,多种协议入口
根据仓库布局和文档,open-oscar-server 用 Go 编写,编译后是单个服务器程序。它实现的是 OSCAR 协议,这是 AIM 和 ICQ 当年使用的底层协议。README 中的功能列表显示,服务器同时处理 AIM 的登录、消息、聊天室、文件传输,以及 ICQ 的离线消息和状态。值得注意的是,AIM 6.x 和 7.x 的客户端协议与早期版本差异较大,项目专门用单独文档描述支持情况。TOC1 和 TOC2 是更轻量的文本协议,服务器也支持,这意味着 gaim、TiK 这类老客户端也能接入。服务器对外暴露一个 HTTP 管理 API,用于创建用户、管理聊天室、查看会话。这个 API 与客户端使用的 OSCAR 端口是分开的,管理员通过 curl 就能操作,不需要额外工具。
运行方式:从源码编译或直接下载二进制
README 为 Linux、macOS 和 Windows 提供了快速启动指南,但没有给出具体命令。不过从项目结构和 Go 语言惯例可以推断,你需要先安装 Go 工具链,然后克隆仓库并执行 go build。文档目录里有 BUILD.md 专门讲编译,LINUX.md、MACOS.md、WINDOWS.md 分别对应各平台。运行后,服务器默认监听 8080 端口提供管理 API。创建用户的命令很简单,比如在 Linux 上用 curl 发送 JSON:curl -d'{"screen_name":"MyScreenName", "password":"thepassword"}' http://localhost:8080/user。ICQ 用户的 screen_name 是数字,比如 100003。删除用户、改密码、创建聊天室都是类似的 HTTP 请求。客户端配置需要把 AIM 或 ICQ 的服务器地址指向你运行 open-oscar-server 的机器,具体端口和协议细节在 CLIENT.md 和 CLIENT_ICQ.md 里。
管理 API:一个没有 UI 的控制台
open-oscar-server 没有图形管理界面,所有管理操作都通过 HTTP API 完成。README 展示了完整的端点:GET /user 列出用户,POST /user 创建,DELETE /user 删除,PUT /user/password 改密码。会话管理用 GET /session 查看所有在线用户。聊天室管理支持创建和列出公共聊天室,POST /chat/room/public 和 GET /chat/room/public。这个 API 设计得很直白,用 PowerShell 或 curl 就能调用。但要注意,API 没有认证机制,README 中所有示例都没有带 token 或密钥。这意味着任何能访问 8080 端口的人都能创建或删除用户。在内网测试没问题,但如果暴露到公网,这就是一个严重的安全漏洞。项目文档没有提到任何鉴权方案,这是需要自行解决的。
功能边界:文件传输只限 LAN,ICQ 功能更少
功能列表里有一个明显的分界线。AIM 侧支持文件共享,但分两种:LAN Only 的 Direct Connect 和 Get File,以及支持 LAN 和 Internet 的 Send File。这意味着跨公网的文件传输能力有限,RENDEZVOUS.md 文档专门解释这部分。ICQ 侧的功能更基础,只有即时消息、个人资料、用户搜索、状态和离线消息,没有文件传输,没有聊天室。如果你主要用 ICQ,这个服务器能提供的基本功能比 AIM 少得多。另外,警告系统(Warning)是 AIM 特有的机制,允许用户给其他用户加警告分,这在现代聊天软件里已经消失。这个功能被完整实现,说明项目追求的是协议忠实度,而不是现代可用性。
局限与风险:老协议没有加密,API 无鉴权
最大的局限是安全性。OSCAR 协议诞生于 1990 年代,当时没有内置加密。open-oscar-server 忠实复现了这个协议,所以客户端与服务器之间的通信是明文传输。在局域网里测试没问题,但通过互联网使用,消息内容可以被抓包。项目文档没有提到 TLS 支持,也没有提到任何加密扩展。另一个风险是管理 API 的开放,如前面所述,8080 端口没有认证。这两个问题叠加,意味着部署到公网几乎等于裸奔。另外,项目处于活跃开发中,v0.24.0 是 2026 年 6 月发布的,版本号还是 0.x,API 可能变化。README 明确说这是非商业项目,不接受捐赠,这意味着维护动力完全来自社区兴趣。
替代方案:Openfire 与 Matrix 的对比
如果你想要的是现代自托管聊天服务器,open-oscar-server 不是唯一选择。Openfire 是一个 Java 写的 XMPP 服务器,支持多种客户端,有 Web 管理界面和插件系统。它的协议是 XMPP,与 OSCAR 完全不同,但可以通过网关插件连接 AIM 和 ICQ。区别在于,Openfire 是面向现代使用的,有用户认证、TLS 加密、群组聊天等完整功能,但你需要配置更多东西。另一个方向是 Matrix 协议,比如 Synapse 服务器,它提供端到端加密和联邦机制,但完全不兼容老客户端。如果你只是想让 Pidgin 连上服务器,open-oscar-server 是唯一直接支持 TOC 协议的选择。如果你需要安全性和现代功能,应该放弃老客户端,选 XMPP 或 Matrix。
维护与许可:MIT 许可,活跃但版本号低
项目使用 MIT 许可,这意味着你可以自由使用、修改、分发,甚至闭源。README 没有提到贡献指南,但文档目录里有 BUILD.md,说明编译流程有记录。社区通过 Discord 服务器交流,链接在 README 顶部。从发布节奏看,v0.22.0 在 2026 年 1 月,v0.23.0 在 3 月,v0.24.0 在 6 月,大约每两个月一个版本,说明维护活跃。但版本号停留在 0.x,意味着 API 和协议实现可能不稳定。升级成本方面,由于是 Go 写的,编译和替换二进制很简单,但你需要关注每个版本的变更日志,因为管理 API 可能调整。项目不接捐赠,也没有商业支持,所有问题都要靠 Discord 社区。
编辑结论
如果你手头还有当年的 AIM 或 ICQ 安装包,或者你正在做协议逆向、怀旧软件考古,open-oscar-server 是目前少数能真正跑通这些客户端的开源服务器。它用 Go 提供单一二进制,管理 API 用 curl 就能操作,MIT 许可允许你随意改造。但如果你想要移动端推送、端到端加密或现代群组功能,这个项目不适合你,它只忠实于 1999 年的协议。建议先确认你的客户端版本是否在支持列表里,比如 AIM 6.x 和 7.x 走的是单独文档,ICQ 只支持到 2003 版。部署前用 Docker 或编译好的二进制跑一遍,用管理 API 创建两个测试账号,再用 Pidgin 连接验证基本消息收发。这个项目不会帮你把老协议翻译成现代体验,它只是把历史协议重新点燃,值不值得用取决于你是否真的需要那团火。
社区笔记