Re: [問卦] 原來上 ptt 可以學 linux 操作..

八卦

5415185

: 今天在玩 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


--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.246.163 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1619107303.A.AE0.html
shiyeh1樓首推 04/23 00:02
Cinor2樓先推在睡 04/23 00:03
james7323樓有神快拜 04/23 00:03
sx41524樓是教授 04/23 00:03
DemonDeath5樓 04/23 00:03
haman6樓 04/23 00:03
blackofdeath7樓優文推一個 04/23 00:03
Su228樓 04/23 00:04
zero119959樓... 04/23 00:04
watashiD10樓這篇文章值1000P幣... 04/23 00:04
shadowdio11樓講中文 04/23 00:04
LeafLu12樓是教授欸 04/23 00:04
watashiD13樓是jserv... 04/23 00:04
tommytgm14樓這篇是PTT史料等級了吧 04/23 00:05
ohyafone15樓 04/23 00:05
crimson1116樓 04/23 00:05
kkb512sk17樓推推 04/23 00:05
roy38492118樓專業推 04/23 00:06
james73219樓看完再推 04/23 00:06
hellopiggy20樓專業! 04/23 00:07
lianpig556621樓玉山金科技長QQ 04/23 00:07
fdgkhdkgh22樓推推超讚老師 04/23 00:07
ymx3xc23樓太神啦 04/23 00:07
gamaqqq24樓推! 04/23 00:07
deeeplove25樓有神快拜 04/23 00:08
vincent891426樓太神啦 04/23 00:08
kbjent8045927樓 04/23 00:08
nopetw28樓 04/23 00:08
askacis29樓有神快拜,請收下我的膝蓋 04/23 00:08
Aequanimitas30樓太猛了 04/23 00:09