: 開始看 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" 聲明:
: Pirates BBS package
Eagles BBS 裡頭涉及到全螢幕文字編輯的程式碼,在檔案 pbbs/vedit.c 中,其中
"pbbs" 就指 Pirates BBS,授權聲明如下:
: 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 核心設計」,所有
教材都公開釋出,並提供對應的講解錄影:
[1] 台灣的 BBS 發展相當早,並在 1990 年代創造出豐富多元的生態,但可惜隨著關鍵
經營者的淡出,不易追溯完整歷史並作出統計。可參考「電子佈告欄與現代生活」:
[2] 已知現存中文 BBS 站台:
[3] 可見
gslin 彙整相關的授權議題討論:
[4] 最初的程式碼由清大楓橋驛站移植過來,由於當初台大 (除了校方的 BBS 站) 未有
學生自行架站的經驗,因此架站的過程發生許多困難,當時有位站長隨口說出:
"Son of Bitch",沒想到 BBS 站台竟然架設成功,後來由駱子逸提議將站名以諧音
"Sun of Beach" 取為「陽光沙灘」,這便是站名的由來。
[5] 參見「台灣前期 BBS 與 maple 發展史」:
[6] 台灣 Telnet BBS 的沿革:
[7] Eagles BBS 和早期 BBS 的原始程式碼:
[8] Old versions of the GNU General Public License:
[9] Linux Journal 在 1994 年刊載由 Eagles BBS 作者撰寫的 "The Birth of Eagles
BBS" 一文:
[10] ve 原始程式碼和平台相關的修改:
[11] Ptt BBS 的全螢幕編輯器原始程式碼:
[12] GNU nano:
[13] GNU's Not Unix:
[14] Pico text editor:
[15] Pine email client:
[16] Alpine (email client):
[17] GNU nano 發展沿革和功能簡述:
[18] 從 Revolution OS 看作業系統生態變化:
--