软件世界表面上充满缩写、协议和版本号,背后却藏着一套很有人情味的命名文化:有人用妻子和孩子的名字,有人借用电影角色,有人从地图上找岛屿,还有人专门发明能够自己解释自己的递归缩写。

本文整理一些常见编程语言、操作系统、数据库、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 项目的大本营,TomcatAntStrutsCommons 等项目都曾与它有关。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 生态还延伸出了一套咖啡文化:

名称含义
JavaBeansBean 是咖啡豆,也是 Java 组件模型
Spring Bean延续 JavaBean 的 Bean 概念
CaffeineJava 高性能缓存库,名称即“咖啡因”
EspressoAndroid UI 测试框架,名称即“浓缩咖啡”
Amazon CorrettoAmazon 的 OpenJDK 发行版;corretto 与意大利咖啡表达有关

二、Ubuntu:形容词与动物的同首字母游戏

Ubuntu 不是动物名。它来自非洲哲学词汇,含义接近“人因他人而成为人”或“人性与共同体”。

Ubuntu 的开发代号采用:

Adjective + Animal
形容词       动物

关键不只是“形容词 + 动物”,而是两者的首字母必须一致。英语修辞中称为 alliteration,即头韵。

版本代号大致含义
4.10Warty Warthog长疣的疣猪
6.06 LTSDapper Drake衣着整洁的公鸭
8.04 LTSHardy Heron坚韧的苍鹭
10.04 LTSLucid Lynx清醒的猞猁
12.04 LTSPrecise Pangolin精确的穿山甲
14.04 LTSTrusty Tahr可靠的塔尔羊
16.04 LTSXenial Xerus好客的非洲地松鼠
18.04 LTSBionic Beaver仿生河狸
20.04 LTSFocal Fossa专注的马岛獴
22.04 LTSJammy Jellyfish幸运的水母
24.04 LTSNoble Numbat高贵的袋食蚁兽
26.04 LTSResolute 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。

后来蛇的形象太适合作为标志,反而成了主流视觉符号。

CC++

BCPL 简化成 B,B 的继任语言自然叫 C。

C++ 中的 ++ 是 C 语言自增运算符,因此名字表达的是“增强后的 C”:

C++;

C#

# 可以理解为音乐中的升号,表示比 C 更高一阶;它的图形也像四个 + 叠在一起。不过具体视觉解释常带有宣传性质,不应当成唯一正式词源。

Ruby

Ruby 的设计受到 Perl 影响。Perl 让人联想到珍珠 pearl,Ruby 作者松本行弘选择了另一种宝石“红宝石”作为名称。

Rust

Rust 一般被解释为生命力顽强的锈菌,而不只是金属“生锈”。这个名字短、容易记,也带有在恶劣环境中顽强生存的意味。

Go

Go 强调简短、快速和直接行动。其吉祥物是 Go Gopher。官方名称是 Go,不是 Golanggolang 主要因为搜索和域名需要而流行。

六、数据库:作者把全家名字都用上了

MySQL 与 MariaDB 的命名很有人情味。

名称来源
MySQLMonty Widenius 的大女儿 My
MariaDBMonty 的小女儿 Maria
MaxDB名称与其儿子 Max 有关

因此,MySQL 中的 My 不是英语“我的”,而是人名。

其他数据库的名称则更偏功能描述:

名称来源
PostgreSQLPOSTGRES 项目后来加入 SQL 支持
RedisRemote 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 个字母 →

HelmIstio

  • Helm:船舵,也是 Kubernetes 的包管理工具。
  • Istio:名称具有“扬帆”的航海意象。

Terraform

terra 是土地,terraform 是改造地形。这个名称非常准确地表达了“使用代码改造基础设施”。

Ansible

Ansible 来自科幻作品中的即时或超光速通信设备。自动化工具通过一个控制端协调大量远程主机,与这个意象很契合。

Prometheus

Prometheus 是希腊神话中把火带给人类的普罗米修斯。用于监控系统时,这个名字带有“带来可见性和知识”的意味。

九、Apache 大数据动物园

Hadoop 生态可能是开源世界最完整的命名连续剧。

名称来源或隐喻
HadoopDoug Cutting 儿子的黄色玩具象名字
ZooKeeper项目太多像动物园,需要管理员
Pig能“吃下”各种数据
Hive蜂巢,表达大量节点协作
Mahout印地语中的驯象人,呼应 Hadoop 大象
Spark火花,强调快速计算
Flink德语中有敏捷、迅速之意

这里既有家庭故事,也有围绕 Hadoop 大象逐渐形成的生态内部梗。

十、消息系统与服务器

名称来源
Kafka作者喜欢作家弗朗茨·卡夫卡,认为名字适合消息系统
RabbitMQRabbit 品牌形象 + Message Queue
ActiveMQActive + Message Queue
nginx读作 engine x
RedisRemote Dictionary Server

Kafka 的名称经常被过度解读成“复杂、荒诞的消息系统”。更可靠的说法是,作者喜欢卡夫卡的作品,并觉得这个名字听起来适合一个写入型系统。

十一、程序员最爱的递归缩写

递归缩写的特点是:缩写的展开中又包含缩写自己。

名称展开
GNUGNU's Not Unix
PHPPHP: Hypertext Preprocessor
WineWine Is Not an Emulator
YAMLYAML 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 当作唯一且完整的官方词源。

十三、命名套路总结

软件名称大致可以归入以下几类:

  1. 地理名称

    Java、Jakarta、Lombok、Kotlin、Catalina、macOS 各版本。

  2. 家庭与私人纪念

    Debian、MySQL、MariaDB、Hadoop。

  3. 影视和文学作品

    Debian 的《玩具总动员》、Python 的 Monty Python、Kafka、Ansible。

  4. 功能隐喻

    Docker、Kubernetes、Hibernate、Terraform、ZooKeeper。

  5. 动物与吉祥物

    Ubuntu、Hadoop、Tomcat、Go。

  6. 递归缩写与文字游戏

    GNU、PHP、WINE、YAML、C++。

  7. 先起名字,后补全称

    Ant、PHP 等项目的部分解释带有反向构造色彩。遇到特别工整的全称时,应当区分它是原始词源,还是后来为了好记而补出的解释。

结语

软件命名并不是无关紧要的装饰。一个好名字能够形成项目文化,帮助社区记住版本,也能把原本冰冷的技术系统变成有故事的东西。

下一次看到 CATALINA_HOME、Ubuntu 的 jammy 软件源、Debian 的 sid 分支,或者 Kubernetes 的船舵标志时,它们就不再只是陌生的技术单词,而是一张由岛屿、咖啡、电影、神话和程序员幽默组成的地图。

参考资料