※ 引述《freertos (@@)》之铭言:
: 今天在玩 pi
: 开始看 linux 指令
: 要修改档案, 使用 nano
: 然后就是要存盘... 当当
: 是 ctrl+x
: 哇~~~~~
: 原来上 ptt 就已经预习了 linux 操作.
: 真的棒! 履历上可以写 熟悉 linux 了吧~
这恰好连结台湾特有的 BBS (电子布告栏) 文化及早期 Linux (和 BSD) 文字编辑器的
关联。也让我想起一年前过世的陈升玮博士,他的旧名是陈宽达,并以 Xshadow 的名号
驰名于早期的台湾资讯科技圈。为了怀旧和区隔他近期在资料科学、人工智能,及金融
科技领域的成就,以下我用 Xshadow 称呼陈博士,强调他在国立清华大学就读大学部和
硕士班时期,对于台湾 BBS 界做出的显著贡献。
台湾的 BBS 站台一度到 1000 个的规模 [1],但现在仍有效的站台数量已大幅减少 [2]
清华枫桥驿站 BBS 是其中最知名的站台,并直接影响许多 BBS 站的技术发展,XShadow
曾投入 MapleBridge BBS (寓意“枫桥”) 的开发,这个专案可简称为 Maple BBS,以
GNU GPL 授权条款释出,尽管部分程式码的授权有争议 [3],仍获得广大采纳并由许多
富有才华的高手 (大多是当时的大学生和研究生) 改写,其中包含阳光沙滩(英文名:
Sun of Beach,简称 SOB) BBS [4],后者是台湾大学第一个由学生架设的 BBS 站台,
而 Ptt BBS 则演化自 SOB BBS [5]。
Xshadow 一干高手并非从无到有打造 BBS,而是修改 Phoenix BBS (交大资工凤凰城
资讯站),后者又修改自 Eagle BBS (作者为 Raymond R. Rocker 及 Dominic B. Tynes)
[9]。1990 年代初期,当时 BBS 是命令式的操作界面,玩 BBS 必须要输入各种命令,
交大资工系的高手将 Eagle BBS 改为选单式界面,使得 BBS 上的网友们只要按上下左右
键就可享受丰富的 BBS 功能。由于交大资工站名叫“凤凰城资讯站”,这套广泛被采用
(包含中华人民共和国境内的大学院校 BBS 站台) 被称为 Phoenix BBS。
许多现今我们熟悉的 BBS 功能,如 KTV 包厢式聊天室、线上 Call-in (在后继的 SOB
BBS 称为“水球”)、动态看板等等,可追溯到清华枫桥驿站提出的实作,可惜那年代
人们不常用版本控制系统,否则我们应该可瞻仰 Xshadow 的程式修改历程。
Eagles BBS 起源于 Pirate BBS (有时也书写为 Pirates BBS)。1992 年,台湾国立中山
大学的陈年兴教授改写 Pirates BBS,成为世界上第一款中文版本的 Telnet BBS,在
校园推广结果一炮而红,也就是中山大学美丽之岛站,陈教授将原始码回馈给 Pirates
BBS 原作者 [6]。
正因为 Pirates BBS 采用 GNU GPL 授权释出,上述累积的成果才得以公开协作和分享。
Maple BBS 在 Xshadow 等人的投入,逐步成为今日我们熟悉的操作接口和风格,但里头
仍保有 Eagles BBS 的影子,我们可浏览 Eagles BBS 的程式码 [7],以 ebbs-3.1.1
(即 Eagles BBS v3.1.1) 为例,档案 "README" 声明:
: It is the successor to Eagles BBS version 2, which was built upon Ed Luke's
: Pirates BBS package
Eagles BBS 里头涉及到全萤幕文字编辑的程式码,在档案 pbbs/vedit.c 中,其中
"pbbs" 就指 Pirates BBS,授权声明如下:
: This program is free software; you can redistribute it and/or modify
: it under the terms of the GNU General Public License as published by
: the Free Software Foundation; either version 1, or (at your option)
: any later version.
亮点是采用 GNU GPL 第 1 版释出 [8],后者是在 1989 年由自由软件基金会 (FSF) 所
颁订,但 Pirates BBS 释出于 1990 年,GNU GPL 第 2 版要到 1991 年才释出,恰好
是 Linux 核心对外发布的年份 (但早期 Linux 核心不是透过 GNU GPLv2 发布,是技术
社群朋友建议下,才用 GPLv2 发行至今)。
让我们继续研究 Eagles BBS 的原始程式码 pbbs/vedit.c: (前方数字为行号)
581 | case CTRL('X'): case CTRL('W'):
582 | clear() ;
583 | foo = write_file(filename);
584 | if (foo != KEEP_EDITING) return foo;
不难发现,在 Eagles/Pirates BBS 中,Ctrl-X 和 Ctrl-W 都有储存目前文章到档案的
作用,且这样的按键操作延续到现在的 Ptt BBS。同一个原始程式码另一处:
422 | prints("Type Ctrl-Z for help\n") ;
原来 Ctrl-Z 印出编辑器的操作指引,是三十年前就存在的惯例。继续阅读程式码:
712 | char *helptxt[] = {
713 | "\01General Commands:",
714 | "Ctrl-X Save and Exit (or Ctrl-W)",
715 | "Ctrl-L Redraw Screen",
716 | "Ctrl-Z Call up this help screen",
717 | "",
718 | "\01Cursor and Movement Commands:",
719 | "Ctrl-F Forward character",
720 | "Ctrl-B Backward character",
有没有发现现在用的 Ptt BBS 是“活化石”呢?上方程式码定义的快速键,实作于名为
vedit 的程式码中。Maple BBS 改写源于 Eagle BBS 的 Phoenix BBS 程式码,保留已有
的组合按键,将全萤幕编辑器称为 ve [10],尽管两者资料结构和处理逻辑已截然不同,
但 vedit 到 ve 的演化痕迹仍在。截至发文时间,Ptt BBS 关于全萤幕编辑器的原始
程式码 [11] 最后一次修改于 2019 年五月,里头仍存在 "vedit" 函式名称。
大致说明 Ptt BBS 和此前台湾 BBS 系统的沿革,我们来看 GNU nano [12]。1999 年该
软件释出时,使用 TIP 这名称,模仿 GNU 是 GNU's Not Unix 的简称 [13],这个 TIP
表示 "TIP Isn't Pico",其中 Pico [14] 是华盛顿大学为了开发 Pine [15] 邮件客户
端软件,一并实作的文字编辑器,首度释出于 1989 年。Pico 就是 Pine composer 的
简称,允许使用者全萤幕进行文字编辑,而由于 Pine 和 Pico 并非采用自由软件授权
条款发行,所以才有 GNU nano 这项专案的诞生。2007 年华盛顿大学重写 Pine,
加上 Unicode 支援和若干新特征,以 Apache License 释出新软件 Alpine [16],此时
GNU nano 已是广泛散布的软件,但仍保有 Pico 相容的操作 [17]。
对比 1989 年释出的 Pine/Pico 和 1990 年发布的 Pirates BBS,我们可见 Ctrl-X
作为离开 (exit) 编辑器,Ctrl-B/F 分别表示 backward 和 forward,和 Ctrl-K 作为
cut (也有删除列的作用) 等组合键有着相似的行为,或许反映那个年代的惯例。
Linux 其实只是作业系统核心,正如 Linus Torvalds 在纪录片 "Revolution OS" [18]
提及的说法:
: “作业系统就是你永远不会看到的东西,因为没有人直接使用作业系统,人们使用的是
: 程式。在他们的电脑上,作业系统唯一的使命就是,帮助其它程式执行,所以作业
: 系统从未独立运行,而仅是默默等待程式,来向它要求现有资源、某个存在硬盘上的
: 档案或要求其它程式将这个程式连接到外面去,然后作业系统再一步步地,试着让
: 人们写程式容易一些”
无论是 Ptt BBS 的 mbbsd (BBS 文字模式主程式) 抑或 GNU nano,都是 Linux 这个
核心之上的应用程式,你我现在可在 Ptt BBS 上对话,就持续验证 Linux 核心的作用,
说“熟悉”Linux 的运作状况,是合理的,只是通常公司行号会期待招聘到“可延伸
Linux 核心的模组和系统呼叫,从而解决特定工程问题”的工程师。
Ptt BBS 运作在 GNU/Linux 作业系统之上。欢迎对 Linux 核心内部运作原理有兴趣的
朋友,关注全台湾唯一探讨最新 Linux 核心技术的大学课程“Linux 核心设计”,所有
教材都公开释出,并提供对应的讲解录影:
http://wiki.csie.ncku.edu.tw/linux/schedule
[1] 台湾的 BBS 发展相当早,并在 1990 年代创造出丰富多元的生态,但可惜随着关键
经营者的淡出,不易追溯完整历史并作出统计。可参考“电子布告栏与现代生活”:
http://ant.comm.ccu.edu.tw/course/100_Communication_life/network21/bbs.pdf
[2] 已知现存中文 BBS 站台:
https://bbslist.github.io/
[3] 可见 http://processor.tfcis.org:8080/bmost?itoc&4607
gslin 汇整相关的授权议题讨论:
https://blog.gslin.org/archives/2006/02/12/365/
[4] 最初的程式码由清大枫桥驿站移植过来,由于当初台大 (除了校方的 BBS 站) 未有
学生自行架站的经验,因此架站的过程发生许多困难,当时有位站长随口说出:
"Son of Bitch",没想到 BBS 站台竟然架设成功,后来由骆子逸提议将站名以谐音
"Sun of Beach" 取为“阳光沙滩”,这便是站名的由来。
[5] 参见“台湾前期 BBS 与 maple 发展史”:
https://www.ptt.cc/bbs/BBSview/M.1187798691.A.DD1.html
[6] 台湾 Telnet BBS 的沿革:
https://www.facebook.com/DannyLin8/posts/10156904689480975
[7] Eagles BBS 和早期 BBS 的原始程式码:
https://github.com/bbsmirror/BBSmirror/tree/master/EaglesBBS
[8] Old versions of the GNU General Public License:
https://www.gnu.org/licenses/old-licenses/old-licenses.html#GPL
[9] Linux Journal 在 1994 年刊载由 Eagles BBS 作者撰写的 "The Birth of Eagles
BBS" 一文:
https://www.linuxjournal.com/article/2789
[10] ve 原始程式码和平台相关的修改:
http://mirror.sars.tw/FreeBSD_Chinese_HOWTO/ve.html
https://github.com/clamtestbbs/ve
[11] Ptt BBS 的全萤幕编辑器原始程式码:
https://github.com/ptt/pttbbs/blob/master/mbbsd/edit.c
[12] GNU nano:
https://www.nano-editor.org/
[13] GNU's Not Unix:
https://www.gnu.org/gnu/gnu-history.html
[14] Pico text editor:
https://en.wikipedia.org/wiki/Pico_(text_editor)
[15] Pine email client:
https://en.wikipedia.org/wiki/Pine_(email_client)
[16] Alpine (email client):
https://en.wikipedia.org/wiki/Alpine_(email_client)
[17] GNU nano 发展沿革和功能简述:
https://www.nano-editor.org/history.php
[18] 从 Revolution OS 看作业系统生态变化:
https://hackmd.io/@sysprog/revolution-os-note