N-API 是用来给 Node.js 构建本机插件的 API,它由 Node.js 官方维护。此 API 将是 Node.js 的应用程序二进制接口(Application Binary Interface,ABI)稳定版。它旨在将插件与底层 JavaScript 引擎中的更改隔离开来,这样低版本已经编译好的模块可以直接在高版本的 Node.js 上运行而无需重新编译。
但是 Node.js 成员 James M Snell 指出:N-API 的发音是 “En-Ay-Pee-Eye”,这个发音和 “nappy” 比较接近。nappy 的意思是“尿片、尿布”。
你以为他是因为这个名字不好听才建议改名的吗?不。他随后又指出:“nappy” 经常被用来形容黑人的头发,而且含贬义。而且 N-API 不能明确的表示这个 API 的含义。所以他建议改名。
我们都知道,最近美国的舆论是“黑命贵”,而没想到现在已经发展到了“黑发贵”了。
这个 API 是用来开发本机插件的,也就是 Native Addons,所以叫 N-API。如果不用这个名字,那么用什么呢?于是 James M Snell 建议使用 “Stable ABI”,也就是“稳定的 ABI”,简写为 S-ABI。
看到这儿我就不淡定了!如果因为 N-API 发音是对黑人的头发不友好,那这个发音简直是对十几亿中国人不友好。S-ABI,发音 “SABI”,音同……算了,我不写了,这种词汇我都不好意思写出来。
最终 N-API 被改名为了 Node-API。
当我去 GitHub 去看相关的 issue 和 pr 时,发现另一个不解的事情。Node 仓库的默认分支还是 master,而不是 main:
众所周知,受美国大规模的 “Black Lives Matter” 运动影响,为了安抚愈演愈烈的民众情绪,GitHub 把默认分支从 master 修改为了 main。因为 master/slave 会让人联想起主从,进而联想到奴隶制,进而联想到黑奴。很多软件的 blacklist/whitelist(黑名单/白名单)也修改为了 dennylist/allowlist(禁止名单/允许名单)。
Node.js 这么担心 N-API 发音涉嫌不尊重黑人头发,那又为什么不把 master 修改为 main 呢?
这个 issue 是 2021 年 1 月 1 日提的:https://github.com/nodejs/abi-stable-node/issues/420 美国文字狱进入了新阶段。