IT 软件命名趣史:从 Java 群岛到 Ubuntu 动物园
软件世界表面上充满缩写、协议和版本号,背后却藏着一套很有人情味的命名文化:有人用妻子和孩子的名字,有人借用电影角色,有人从地图上找岛屿,还有人专门发明能够自己解释自己的递归缩写。
本文整理一些常见编程语言、操作系统、数据库、Java 组件和开源基础设施的名称来源。部分广为流传的故事只是双关或民间解释,文中会特别说明。
文中的软件名称会优先链接到项目官网、官方文档或官方基金会页面。官网只能证明项目身份和技术信息;如果官方没有记录命名动机,本文不会仅凭同名关系把传说写成定论。
一、Java 生态里的“群岛”
Java 生态与地理名称格外有缘。Java、Jakarta、Lombok、Kotlin 和 Catalina 放在一起,几乎可以组成一张软件世界地图。
| 名称 | 地理来源 | 在 Java 生态中的含义 |
|---|---|---|
| Java | 印度尼西亚爪哇岛及爪哇咖啡 | Java 编程语言 |
| Jakarta EE | 位于爪哇岛上的雅加达 | 原 Java EE |
| Lombok | 印度尼西亚龙目岛 | Java 编译期代码生成工具 |
| Kotlin | 俄罗斯芬兰湾中的科特林岛 | JVM 编程语言 |
| Catalina | 美国加州圣卡塔利娜岛 | Tomcat Servlet 容器 |
1. Java:先有岛,再有咖啡,最后有语言
Java 语言最初叫 Oak,名字来自 James Gosling 办公室外的一棵橡树。由于商标冲突,开发团队必须换名,最后选择了 Java。
Java 这个名称通常被认为直接来自 Java coffee(爪哇咖啡)。咖啡之所以叫 Java coffee,又是因为它产自印度尼西亚的爪哇岛。
爪哇岛 Java
↓
爪哇咖啡 Java coffee
↓
Java 成为咖啡的俗称
↓
Java 编程语言
这也解释了 Java 的咖啡杯标志,以及后来大量与咖啡有关的生态名称。
2. Jakarta EE:一座位于 Java 岛上的城市
Jakarta 是印度尼西亚首都雅加达,位于爪哇岛西北部。这个名字在 Java 历史中出现过两次。
早期的 Apache Jakarta Project 是 Apache 旗下 Java 项目的大本营,Tomcat、Ant、Struts 和 Commons 等项目都曾与它有关。Jakarta EE 官方 FAQ 记载,Apache 当年选择 Jakarta,一说是因为促成项目成立的会议在 Sun Microsystems 一间名为 Jakarta 的会议室举行。
2017 年后,Oracle 将 Java EE 移交给 Eclipse Foundation,但 Java 商标仍属于 Oracle。社区不能继续以 Java EE 为新平台命名,于是在 2018 年投票选择了 Jakarta EE。
这次改名形成了一个巧妙的地理双关:
Jakarta EE 建立在 Java 之上
现实中的 Jakarta 位于 Java 岛上3. Lombok:岛屿与辣椒
Project Lombok 是 Java 常用的编译期代码生成工具,可以通过注解生成 getter、setter、构造器和 builder:
@Data
@Builder
public class User {
private String name;
}
Lombok 同时是印度尼西亚的龙目岛,位于巴厘岛东侧。在印尼部分地区的语言中,lombok 还与辣椒有关,所以 Project Lombok 使用红辣椒作为标志。
官方资料没有像 Kotlin 那样明确记录完整的命名决策,因此更严谨的说法是:它的名称确实对应龙目岛和辣椒,但不要把未经证实的具体命名动机当作定论。
4. Kotlin:刻意向 Java 的岛屿命名致敬
Kotlin 得名于俄罗斯圣彼得堡附近芬兰湾中的 Kotlin Island(科特林岛)。
Kotlin 设计团队曾说明,他们选择岛名是在模仿 Java。于是,同在 JVM 上运行的两门语言,也分别对应两座岛:
Java → 印度尼西亚爪哇岛
Kotlin → 俄罗斯科特林岛5. Catalina:Tomcat 的核心容器
Catalina 是 Apache Tomcat 的 Servlet 容器核心。Tomcat 4 开始采用新的 Catalina 架构,因此 Java 开发者经常见到:
CATALINA_HOME
CATALINA_BASE
CATALINA_HOME:Tomcat 程序安装目录。CATALINA_BASE:某个 Tomcat 实例的配置、日志、应用和运行目录。
Tomcat 的主要组件也各有名字:
Tomcat
├── Catalina:Servlet 容器
├── Coyote:HTTP/AJP 连接器
├── Jasper:JSP 编译引擎
└── Tribes:集群通信组件
Catalina 也是美国加州圣卡塔利娜岛的简称。macOS Catalina 同样以这座岛命名。不过,Apache 官方资料主要确认 Catalina 是 Tomcat 容器名称,没有清晰记录选择这个名称的完整动机,因此不宜再向外演绎。
6. Java 的咖啡支线
除了岛屿,Java 生态还延伸出了一套咖啡文化:
| 名称 | 含义 |
|---|---|
| JavaBeans | Bean 是咖啡豆,也是 Java 组件模型 |
| Spring Bean | 延续 JavaBean 的 Bean 概念 |
| Caffeine | Java 高性能缓存库,名称即“咖啡因” |
| Espresso | Android UI 测试框架,名称即“浓缩咖啡” |
| Amazon Corretto | Amazon 的 OpenJDK 发行版;corretto 与意大利咖啡表达有关 |
二、Ubuntu:形容词与动物的同首字母游戏
Ubuntu 不是动物名。它来自非洲哲学词汇,含义接近“人因他人而成为人”或“人性与共同体”。
Ubuntu 的开发代号采用:
Adjective + Animal
形容词 动物
关键不只是“形容词 + 动物”,而是两者的首字母必须一致。英语修辞中称为 alliteration,即头韵。
| 版本 | 代号 | 大致含义 |
|---|---|---|
| 4.10 | Warty Warthog | 长疣的疣猪 |
| 6.06 LTS | Dapper Drake | 衣着整洁的公鸭 |
| 8.04 LTS | Hardy Heron | 坚韧的苍鹭 |
| 10.04 LTS | Lucid Lynx | 清醒的猞猁 |
| 12.04 LTS | Precise Pangolin | 精确的穿山甲 |
| 14.04 LTS | Trusty Tahr | 可靠的塔尔羊 |
| 16.04 LTS | Xenial Xerus | 好客的非洲地松鼠 |
| 18.04 LTS | Bionic Beaver | 仿生河狸 |
| 20.04 LTS | Focal Fossa | 专注的马岛獴 |
| 22.04 LTS | Jammy Jellyfish | 幸运的水母 |
| 24.04 LTS | Noble Numbat | 高贵的袋食蚁兽 |
| 26.04 LTS | Resolute Raccoon | 坚毅的浣熊 |
早期几个版本没有严格按字母排序。从 Dapper Drake 开始,版本代号基本按字母表推进。走完 Z 后,再从 A 开始:
17.04 Zesty Zapus
17.10 Artful Aardvark
18.04 Bionic Beaver
18.10 Cosmic Cuttlefish
Ubuntu 的数字版本表示发布日期,而不是第几代:
Ubuntu 22.04
│ └─ 4 月
└──── 2022 年
开发代号不只是宣传名称,还会进入软件仓库配置。例如 Ubuntu 22.04 的仓库代号是 jammy。
三、Debian:《玩具总动员》角色大全
Debian 是创始人 Ian Murdock 当时的伴侣 Debra 与自己名字 Ian 的组合:
Debra + Ian = Debian
Debian 的版本代号则来自《玩具总动员》角色。原因是早期 Debian 项目负责人 Bruce Perens 曾在制作该电影的 Pixar 工作。
| Debian 代号 | 《玩具总动员》角色 |
|---|---|
| Buzz | 巴斯光年 |
| Rex | 塑料恐龙 |
| Bo | 牧羊女 Bo Peep |
| Hamm | 小猪存钱罐 |
| Slink | 弹簧狗 |
| Potato | 蛋头先生 |
| Woody | 胡迪 |
| Jessie | 翠丝 |
| Bullseye | 红心,胡迪的马 |
| Bookworm | 书虫 |
| Trixie | 三角龙 |
最妙的是 Debian 的永久不稳定分支:
unstable = sid
Sid 是电影中喜欢拆坏玩具的邻家男孩。把永远可能出问题的开发分支叫 Sid,非常符合角色设定。
四、macOS:从大型猫科动物到加州地图
macOS 的版本代号经历了两大阶段。
1. 大型猫科动物时期
Cheetah → Puma → Jaguar → Panther → Tiger
→ Leopard → Snow Leopard → Lion → Mountain Lion
这些名称塑造了早期 Mac OS X 的敏捷、力量和速度形象。
2. 加州地名时期
从 OS X Mavericks 开始,Apple 改用美国加州的地理名称:
| 名称 | 地理含义 |
|---|---|
| Mavericks | 加州著名冲浪地点 |
| Yosemite | 优胜美地国家公园 |
| El Capitan | 优胜美地著名花岗岩巨岩 |
| Sierra / High Sierra | 内华达山脉 |
| Mojave | 莫哈韦沙漠 |
| Catalina | 圣卡塔利娜岛 |
| Big Sur | 加州中部海岸地区 |
| Monterey | 蒙特雷 |
| Ventura | 文图拉 |
| Sonoma | 索诺玛 |
| Sequoia | 巨杉及红杉国家公园意象 |
| Tahoe | 太浩湖 |
所以“macOS 使用岛名”只对 Catalina 成立。更准确地说,现代 macOS 使用的是加州地名。
五、编程语言名称中的文化私货
Python
Python 并不是以蟒蛇命名。Guido van Rossum 当时喜欢英国喜剧节目《Monty Python's Flying Circus》,需要一个简短、独特又略带神秘感的名称,于是选择了 Python。
后来蛇的形象太适合作为标志,反而成了主流视觉符号。
C 与 C++
BCPL 简化成 B,B 的继任语言自然叫 C。
C++ 中的 ++ 是 C 语言自增运算符,因此名字表达的是“增强后的 C”:
C++;C#
# 可以理解为音乐中的升号,表示比 C 更高一阶;它的图形也像四个 + 叠在一起。不过具体视觉解释常带有宣传性质,不应当成唯一正式词源。
Ruby
Ruby 的设计受到 Perl 影响。Perl 让人联想到珍珠 pearl,Ruby 作者松本行弘选择了另一种宝石“红宝石”作为名称。
Rust
Rust 一般被解释为生命力顽强的锈菌,而不只是金属“生锈”。这个名字短、容易记,也带有在恶劣环境中顽强生存的意味。
Go
Go 强调简短、快速和直接行动。其吉祥物是 Go Gopher。官方名称是 Go,不是 Golang;golang 主要因为搜索和域名需要而流行。
六、数据库:作者把全家名字都用上了
MySQL 与 MariaDB 的命名很有人情味。
| 名称 | 来源 |
|---|---|
| MySQL | Monty Widenius 的大女儿 My |
| MariaDB | Monty 的小女儿 Maria |
| MaxDB | 名称与其儿子 Max 有关 |
因此,MySQL 中的 My 不是英语“我的”,而是人名。
其他数据库的名称则更偏功能描述:
| 名称 | 来源 |
|---|---|
| PostgreSQL | POSTGRES 项目后来加入 SQL 支持 |
| Redis | Remote Dictionary Server |
| MongoDB | 来自 humongous,意为巨大无比 |
| SQLite | 轻量、嵌入式的 SQL 数据库 |
| Elasticsearch | 强调有弹性、可扩展的搜索 |
| Lucene | 以创始人 Doug Cutting 妻子的中间名命名 |
七、Java 工具和服务器
| 名称 | 命名含义 |
|---|---|
| Spring | 象征传统企业 Java“寒冬”后的春天 |
| Hibernate | 休眠;对象保存后可以再次恢复 |
| Maven | 意第绪语中接近“专家、懂行的人” |
| Ant | 蚂蚁;也常被解释为 Another Neat Tool |
| Jenkins | 典型的英国管家名字,象征替开发者完成工作 |
| Tomcat | 公猫,强调独立、自立的形象 |
| Jetty | 码头或突堤,与网络连接和数据流相呼应 |
Ant = Another Neat Tool 很可能属于方便记忆的反向解释。软件领域经常先有名字,后来才补出一个漂亮的全称。
八、云原生的航海世界
容器与云原生项目喜欢使用航海隐喻。
Docker
docker 原意是码头工人。Docker 把应用打包进 container,而 container 本身又是集装箱,所以整个品牌形成了一套完整的港口运输隐喻。
Kubernetes
Kubernetes 来自希腊语,意思是“舵手”或“领航员”,负责驾驭由大量容器组成的船队。
K8s 是数字缩写:
K ubernete s
← 8 个字母 →Helm 与 Istio
Terraform
terra 是土地,terraform 是改造地形。这个名称非常准确地表达了“使用代码改造基础设施”。
Ansible
Ansible 来自科幻作品中的即时或超光速通信设备。自动化工具通过一个控制端协调大量远程主机,与这个意象很契合。
Prometheus
Prometheus 是希腊神话中把火带给人类的普罗米修斯。用于监控系统时,这个名字带有“带来可见性和知识”的意味。
九、Apache 大数据动物园
Hadoop 生态可能是开源世界最完整的命名连续剧。
| 名称 | 来源或隐喻 |
|---|---|
| Hadoop | Doug Cutting 儿子的黄色玩具象名字 |
| ZooKeeper | 项目太多像动物园,需要管理员 |
| Pig | 能“吃下”各种数据 |
| Hive | 蜂巢,表达大量节点协作 |
| Mahout | 印地语中的驯象人,呼应 Hadoop 大象 |
| Spark | 火花,强调快速计算 |
| Flink | 德语中有敏捷、迅速之意 |
这里既有家庭故事,也有围绕 Hadoop 大象逐渐形成的生态内部梗。
十、消息系统与服务器
| 名称 | 来源 |
|---|---|
| Kafka | 作者喜欢作家弗朗茨·卡夫卡,认为名字适合消息系统 |
| RabbitMQ | Rabbit 品牌形象 + Message Queue |
| ActiveMQ | Active + Message Queue |
| nginx | 读作 engine x |
| Redis | Remote Dictionary Server |
Kafka 的名称经常被过度解读成“复杂、荒诞的消息系统”。更可靠的说法是,作者喜欢卡夫卡的作品,并觉得这个名字听起来适合一个写入型系统。
十一、程序员最爱的递归缩写
递归缩写的特点是:缩写的展开中又包含缩写自己。
| 名称 | 展开 |
|---|---|
| GNU | GNU's Not Unix |
| PHP | PHP: Hypertext Preprocessor |
| Wine | Wine Is Not an Emulator |
| YAML | YAML Ain't Markup Language |
例如 GNU:
GNU
└── GNU's Not Unix
└── GNU's Not Unix
└── 永远可以继续展开
YAML 最初常解释为 Yet Another Markup Language,后来为了强调它主要描述数据而不是文档标记,改成递归缩写 YAML Ain't Markup Language。
十二、Git、Linux 与程序员式幽默
Linux
Linux 是 Linus + Unix 的组合。不过 Linus Torvalds 最初考虑的名字是 Freax,结合了 free、freak 和 Unix 的 X。最终,FTP 服务器管理员认为 Linux 更合适,并用它建立了目录。
Git
Git 在英国俚语里可以指令人讨厌或愚蠢的人。Linus 曾以自嘲方式给出过多种解释,而 Git 官方手册也曾用非常直白的描述:
the stupid content tracker
因此,Git 没有一个像 GNU's Not Unix 那样唯一、严肃的正式展开。把 Git 强行解释成某个固定首字母缩写,通常不可靠。
Apache HTTP Server
关于 Apache 名称,流传最广的是:
A Patchy Server
因为早期服务器由许多补丁组合而成。这个说法确实是巧妙双关,但 Apache 官方历史更强调对 Apache 原住民族的致敬。因此,不能把 A Patchy Server 当作唯一且完整的官方词源。
十三、命名套路总结
软件名称大致可以归入以下几类:
-
地理名称
Java、Jakarta、Lombok、Kotlin、Catalina、macOS 各版本。
-
家庭与私人纪念
Debian、MySQL、MariaDB、Hadoop。
-
影视和文学作品
Debian 的《玩具总动员》、Python 的 Monty Python、Kafka、Ansible。
-
功能隐喻
Docker、Kubernetes、Hibernate、Terraform、ZooKeeper。
-
动物与吉祥物
Ubuntu、Hadoop、Tomcat、Go。
-
递归缩写与文字游戏
GNU、PHP、WINE、YAML、C++。
-
先起名字,后补全称
Ant、PHP 等项目的部分解释带有反向构造色彩。遇到特别工整的全称时,应当区分它是原始词源,还是后来为了好记而补出的解释。
结语
软件命名并不是无关紧要的装饰。一个好名字能够形成项目文化,帮助社区记住版本,也能把原本冰冷的技术系统变成有故事的东西。
下一次看到 CATALINA_HOME、Ubuntu 的 jammy 软件源、Debian 的 sid 分支,或者 Kubernetes 的船舵标志时,它们就不再只是陌生的技术单词,而是一张由岛屿、咖啡、电影、神话和程序员幽默组成的地图。