为什么一些人喜欢去掉 Vim 欢迎页上的“帮助乌干达的可怜儿童”?
回答问题之前把下面所有的回答看了一遍,实在让我感到失望。
因为几乎没有一个答主能讲得出来 Vim 为什么会加这行字,反而瞎喷的人很多。
首先,如果是命令的方式通过 Vim 打开文件的话(比如终端输入 vim a.txt
回车),这个欢迎页是不会显示的。直接启动 Vim 的时候,也并不会每次启动都显示“Help poor children in Uganda!(帮助乌干达的可怜儿童!)”。
比如我随手通过 macOS 的终端,使用 vim
或 vi
命令启动系统内置的 Vim,就有可能会发现欢迎页显示“Sponsor Vim development!(赞助 Vim 开发!)”:
多打开关闭几次的时候,必然会出现“Help poor children in Uganda!”:
不仅如此,Vim 欢迎页还会显示“Become a registered Vim user!(成为一个注册的 Vim 用户!)”。
除此之外就没有了。这三行文字的显示并不随着 Vim 的启动有规律地轮换出现,因此这很明显是随机显示的。
那么,Vim 在欢迎页的这一部分,究竟是如何实现的呢?
我亲自去 GitHub 上搜了下 Vim 的源代码,结果在 src/version.c
中找到了答案,就在该文件从第 4135 行开始到第 4179 行结束的部分[1]:
/* Show the sponsor and register message one out of four times, the Uganda
* message two out of four times. */
sponsor = (int)time(NULL);
sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0);
/* start displaying the message lines after half of the blank lines */
row = blanklines / 2;
if ((row >= 2 && Columns >= 50) || colon)
{
for (i = 0; i < (int)(sizeof(lines) / sizeof(char *)); ++i)
{
p = lines[i];
#ifdef FEAT_GUI
if (p_im && gui.in_use && gui_lines[i] != NULL)
p = gui_lines[i];
#endif
if (p == NULL)
{
if (!p_cp)
break;
continue;
}
if (sponsor != 0)
{
if (strstr(p, "children") != NULL)
p = sponsor < 0
? N_("Sponsor Vim development!")
: N_("Become a registered Vim user!");
else if (strstr(p, "iccf") != NULL)
p = sponsor < 0
? N_("type :help sponsor<Enter> for information ")
: N_("type :help register<Enter> for information ");
else if (strstr(p, "Orphans") != NULL)
p = N_("menu Help->Sponsor/Register for information ");
}
if (*p != NUL)
do_intro_line(row, (char_u *)_(p), i == 2, 0);
++row;
}
}
即便读者不明白代码如何实现,从注释部分也能很快看出:在 Vim 中“帮助乌干达儿童”、“赞助开发”和“注册用户”三者文字出现的概率之比为 2:1:1。
(指针变量 p 用于存放指向要显示的赞助信息的内存地址,通过源代码可以看到,该功能还可以显示与救助孤儿的相关提示,和“帮助乌干达儿童”一样与 ICCF Holland 相关,但需要在 Vim 的 GUI 版才能看到,参见该文件的第 4111 行)
就本问题而言,我无法知道为什么会有人要删除“Help poor children in Uganda!”这句话,但是,假若真有人介意它,完全可以这么做:
- 自行修改 Vim 配置,使得该行不在 Vim 的欢迎页面里出现。
- 使用插件,因为 Vim 的扩展性强,可以通过一些插件来直接跳过欢迎页。
- 由于 Vim 完全开源,而 Vim 许可规定的是如何分发修改的 Vim 及其衍生版本。因此在不涉及分发的情况下(仅仅出于自用目的),完全可以将源代码克隆下来,然后自行将这句话删除,再在本地编译一次。
……
毕竟,Vim 无论其代码还是用户的自定义面,都是相当开放自由的。
尽管如此,我还是希望想去掉那行字的人知道 Vim 帮助说明里有这么一句话,可以通过在 Vim 里键入 :help iccf
命令看到:
Vim is Charityware.(Vim 是一款慈善软件。)
Vim 的使用固然完全免费,但既然它有慈善公益性质,那么对于用户而言,如果认为 Vim 有价值,就可以捐一笔钱给一个好的事业。正如上句引用后面紧接的这句话:
You can use and copy it as much as you like, but you are encouraged to make a donation for needy children in Uganda.
(您可以随意地使用和复制它,但我们鼓励您为乌干达的贫困儿童捐款。)
可能有些人并不理解,为什么 Vim 会鼓励用户向乌干达的贫困儿童捐款呢?
因为 Vim 项目的创始人布莱姆·米勒(Bram Moolenaar)曾经在乌干达南部的 Kibaale 地区的儿童中心当过一名义工,接触到了当地儿童生活窘迫的现状,这激发了他创建一个公益组织帮助这些儿童的想法。
在布莱姆的不懈努力下,这个想法也随之落地为一个名为“荷兰国际儿童保育基金(International Child Care Fund Holland, ICCF Holland)”的非政府组织(Non-Governmental Organization, NGO)[2],其 99% 的钱款去向都将用于帮助乌干达儿童[3]。
当然,这背后更深层次的原因,是乌干达这个国家的国情。
乌干达坐落在东非的中心地带。它横越赤道,北和南苏丹接壤,西和刚果民主共和国毗连,南界坦桑尼亚和卢旺达,东临肯尼亚,其大多数地区为热带气候,土地肥沃,每年有两次雨季,自然环境良好,被誉为“非洲明珠”[4],在 2021 年,乌干达的人口已达到 4585 万。
然而,三十多年来,乌干达一直存在贫困的问题。根据世界银行(World Bank)调查的数据显示,在过去的若干年里,生活在贫困线以下的乌干达人口比例一直在波动。
由于乌干达的经济主要依赖于农业,2012-2013 年至 2016-2017 年期间,乌干达因突如其来的干旱而贫困率激增[5]。在 2019-2020 年度,乌干达的贫困现状有所改善,然而仍有接近 30% 的人口处于贫困状态[6]。
新冠疫情的到来,又让乌干达的许多城市和农村的家庭陷入经济上的低迷,更不用说乌干达有约 80% 的人口生活在农村,其经济和资源与城市的不平等程度在加深。
与此同时,新冠疫情在乌干达的人力资本积累改善,特别是教育事业方面也带来了不小的创伤:在 2020 年 3 月至 2021 年 10 月期间,乌干达的学校完全或部分关闭了 83 周(根据联合国教科文组织的说法,这创下了世界上关闭时间最长的学校记录)。
在 2020 年 3 月实施封控之前,大约 90% 的 6-18 岁乌干达学生能够进入学校读书,然而到 2021 年的 3 月和 4 月之间,这一比例直接下降到了 46%[5]。
因而,乌干达的儿童会面临如下几个大难题[7]:
- 营养不良:很多乌干达儿童经常食不果腹,因此身体的发育和成长会受到影响。
- 生命健康存在威胁:除了上一条外,还有比如疟疾、腹泻、新冠病毒和艾滋病毒等疾病的肆虐,但许多儿童无法获得足够的医疗保健资源。
- 受教育程度低:乌干达基础设施和学习设施的条件很差,尽管乌干达的法律规定儿童必须接受七年的义务教育,然而多数儿童因家庭条件不好而无法完成学业。
- 生存困难:很多乌干达儿童被迫流落街头,部分儿童因过早打工,成为了资本剥削之下薪资待遇低廉的“童工”。
- 其他外界的不良因素:政策的重视力度不够,没有落实对于儿童权益的保障体系,贩卖与虐待儿童的现象依然存在。
由此就能明白,Vim 的项目创始人布莱姆为什么会下定决心帮助这些孩子。
有人评论说:“开源软件少些政治上的内容总是好的”,遗憾的是,就本问题的背景而言,这句话我无法认同。
因为 Vim 的使用完全免费和自由,没有逼迫任何一个用户捐赠,也没有道德绑架任何一个用户。有心的读者都应该注意到,之前引用那句话的用词是“encouraged to”,而不是语气更强烈的“ought to”,更不用说 Vim 项目捐赠对乌干达的帮助,是作为人类朴素的同理心的体现,已经超越了一般的政治意义范畴。
能发现本问题下的很多答主对捐赠 Vim 的行为表示不屑,我也清楚这些答主的心理,但我依然不能苟同。
众所周知,人是有私心的社会性动物,不过,无论用户有没有对开源软件的私心,开源软件都一视同仁地开放对待用户——Vim 就是这样。
作为用户个体,你当然可以不选择捐赠它,无论什么原因。
甚至你可以不痛不痒地说:”帮助乌干达儿童这件事,和我月薪几千块有什么关系啊?“
但是,这个世界上有的人并不这么想——他们真的会为了 Vim 的发展,还有乌干达儿童的生活条件的改善而愿意尽己之力,定期捐出自己的几美元,甚至几十美元、几百美元。
前面提到的荷兰国际儿童保育基金,虽然网站的更新频率着实不高,风格也和布莱姆的个人网站一样简陋,但翻阅了整个网站,确实能感受到背后的志愿者在努力改善乌干达孩童的处境,而不是随口说说。正如布莱姆本人讲的那样[2]:
“When doing our daily things, it’s sometimes hard to imagine that there are still people who struggle to get food and clean water. With a small amount of money, the life of the poor children can be drastically improved.”
(在做我们自己日常事情的时候,有时很难会想象到仍然有人在为获得食物和干净的水而挣扎。只要用少量的钱,就可以大大改善贫困儿童的生活。)
而且,就在今年 7 月底(即布莱姆过世之前的倒数第七天),这一组织就为乌干达募集了 6 万欧元(约合人民币 477023.37 元)[8]。
这些捐赠的人,其举动虽不必也不值得大书特书,但由于他们真正付出了行动,从精神境界上来说,无疑比毫无敬畏之心、只在道德高地上指指点点的人更加高尚。
最后,在我最初被推送到这个问题的时候(不是写这个回答的时候),Vim 的创始人布莱姆先生还健在,而 8 月 5 日晚上,我意外地得知了他病逝的噩耗。
回顾他近 62 年的一生,他是一名拥有过硬技术实力的开源软件开发者,这从他创立的最广为人知的开源项目 Vim 就能看出。这款既适用于命令行又适用于 GUI 的文本编辑器,其跨平台、灵活性强的编辑功能赢得了相当一部分程序员用户的青睐。
但他又并不满足于此,希望乌干达儿童能够有接受教育的机会和更好的生存环境,为此他经常往返于荷兰和乌干达之间,付出了自己不小的精力,却依然过着清贫潦倒的日子。
在了解他的生平的过程中,我颇能感受到他既“兼济天下”又“独善其身”的风范。
作为普通人,我从未见过布莱姆先生,所以恕我没法给他一个评价。不过,当了解到他和 Vim 欢迎页那行文字背后的故事后,从此,每当我启动 Vim 并看到欢迎页的时候,我不仅没有改动它的想法,还会多停几秒留意一下它了。
这么做没有别的,就是为了向布莱姆先生致以最真挚而崇高的敬意。
感谢阅读~
:wq