看板 Gossiping作者 jserv (松鼠)標題 Re: [問卦] 原來上 ptt 可以學 linux 操作..時間 Fri Apr 23 00:01:26 2021
※ 引述《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
補充台灣前期 BBS 與 maple 發展史 - 看板 BBSview - 批踢踢實業坊
不是啥重要的東西 不過我覺得現在許多 BBS 都拿掉版權宣告 實在有點可惜 到秘密情人 資訊站為止 可謂 Maple 家系的前身 Pirate Bulletin Board System Version: 1.00 Copyright (C) 1990 Edward A. Luke Eagles Bulletin Board System Version: 2.00-3.00
[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 (臺灣)
※ 文章代碼(AID): #1WWPtdhW (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1619107303.A.AE0.html
推 Cinor: 先推在睡2F 04/23 00:03
推 watashiD: 這篇文章值1000P幣...10F 04/23 00:04
推 askacis: 有神快拜,請收下我的膝蓋29F 04/23 00:08
→ jserv: 我想到今年還沒在八卦板發文廣告課程,就發篇廢文(116特色)32F 04/23 00:10
推 k1400: Holy34F 04/23 00:10
→ jserv: 順便緬懷 Xshadow 博士...35F 04/23 00:10
※ 編輯: jserv (140.116.246.163 臺灣), 04/23/2021 00:12:17
推 CSMUck: 娘子快出來看上帝36F 04/23 00:11
推 cpz: 我以為這裡只有廢文...41F 04/23 00:12
→ jserv: 23 年前,Xshadow 在內的眾多高手討論 BBS 的未來:43F 04/23 00:14
推 nejoy: 朝聖推!47F 04/23 00:15
推 xhung: 推 感謝分享 太神了49F 04/23 00:15
推 lpoijk: 老師,umn.edu 初四啦!!!50F 04/23 00:15
推 Rsew: 朝聖51F 04/23 00:15
推 ubcs: 推 等等m53F 04/23 00:16
推 ben870818: 類推jserv 還有老師寫不完的練習...58F 04/23 00:18
推 lucas: 推76F 04/23 00:24
推 hkai: 專業推77F 04/23 00:24
→ furbyyeh: Xshadow過世了唷? RIP79F 04/23 00:25
推 NVCat: 神80F 04/23 00:26
推 Gcow8: 感動推86F 04/23 00:28
推 Two4: Push90F 04/23 00:29
推 ZaneLin: 太神了...跟無線電那篇一樣 跪著看92F 04/23 00:32
→ jserv: @furbyyeh, 是的,整整一年前93F 04/23 00:34
※ 編輯: jserv (140.116.246.163 臺灣), 04/23/2021 00:37:35
噓 iGao: 板主還不快把這篇M起來,在混膩?102F 04/23 00:37
推 ryama: 看不懂但是推108F 04/23 00:40
推 foxey: 好多好久未曾聽到的熟悉站名啊110F 04/23 00:40
推 STi2011: 嚇死我了 看不懂115F 04/23 00:42
→ jserv: @gx9900824, 我116,我發廢文我驕傲122F 04/23 00:45
→ jserv: @TISH12311, 歡迎嗆我,反正現在是下課時間131F 04/23 00:49
→ jserv: @joke3547, 我一直想開關於開放原始碼「文化」的通識課程133F 04/23 00:51
推 reemir: 老師我會努力寫作業的 QQ134F 04/23 00:51
推 ltytw: 推135F 04/23 00:51
→ jserv: 不過問題在於,對「文化」有興趣的學生可能不懂程式碼,而能夠理解程式碼的學生,對於「文化」的敏感度可能不高136F 04/23 00:51
→ jserv: 所以我只好開「教學生準備科技公司面試」的大學課程,無奈140F 04/23 00:52
→ TISH12311: 回復得那麼快想也知道是自己開發出來的機器人阿141F 04/23 00:53
推 basslife: 現在會寫底層的都是神人了142F 04/23 00:53
推 crazydj: 原來是c語言,我還以為是c罩杯~148F 04/23 00:54
→ jserv: @crazydj, 這兩者我都熟悉呀 (笑)150F 04/23 00:55
推 ibki: 推152F 04/23 00:55
→ jserv: @lpoijk, 你去發文推坑,讓我可介紹UMN和Linux核心的大事153F 04/23 00:57
推 CCNK: 有神出現了156F 04/23 00:59
→ jserv: @mystina43, Xshadow 當然是資工大神159F 04/23 01:00
→ jserv: @reemir, 好,歡迎送 pull request 過來161F 04/23 01:01
推 pr9558: 考古文好猛162F 04/23 01:01
推 weboau: 老師好 辛苦了 請多保重身體164F 04/23 01:01
推 lcw1995: 推 奇怪最近專業文很多166F 04/23 01:02
推 bill0205: 推 寫底層程式真的都好神QQ173F 04/23 01:10
推 von912: 哭了 感動174F 04/23 01:11
推 v7q4: 嗯!跟我想的差不多187F 04/23 01:20
推 CGSBN: 淚推197F 04/23 01:29
→ jserv: @iGao, 真的被 m 了,讓我好緊張201F 04/23 01:30
→ IVicole: 連兩篇專業神文QQ205F 04/23 01:33
推 liaon98: jserv 有神快拜208F 04/23 01:37
推 upu: 大學上過陳年興老師的課,印象深刻217F 04/23 01:43
推 Lumix7: 先跪再說221F 04/23 01:45
推 eqt2010: 懷念寬達,大學四年同學兼室友...當初還被他抓去當電研社副社長,利用報廢電腦成立第一代網咖賺社費...222F 04/23 01:46
推 Cireiat: 好文,今晚是怎麼了,教育之夜啊
有幸曾與陳年興老師共事過,真的猛226F 04/23 01:53
推 azure: 宅色夫!!!229F 04/23 01:55
推 hawls: 推!230F 04/23 01:55
推 HHH555JJJ: 希望那堂通識開成的話也能開放 後輩考不上但也想聽233F 04/23 01:57
→ davide68: 今天太多神了!娘子,出來看啊237F 04/23 02:02
推 wtfconk: 好冗長的老人懷古…245F 04/23 02:11
推 plus5566: 推老師,推陳老師,推大神!文化跟程式碼這個太有趣了,想知道,程式碼的部分要了解到大概怎樣的程度才能對這塊深入?249F 04/23 02:14
推 as6633208: ....明明都是中文,但我卻完全不懂意思252F 04/23 02:15
推 nikolas: 為什麼那個時代這麼多神人 反觀現在 系統環境都改善了 人似乎沒有變強?257F 04/23 02:22
推 RinHizakura: 推,最近就發現自己對文化很感興趣但是程式還遠遠不行 qq259F 04/23 02:22
推 YeaPa: 懷念老師的授課,推個261F 04/23 02:22
→ jserv: @plus5566, 其實有旺盛的好奇心即可,例如想知道為何C語言標準函式庫<stdio.h>裡頭提供的printf,是受哪些更早期的資訊系統影響,而有printf這樣的命名和格式
1960年代發展的CTSS作業系統,即內建printf,後者一路從270F 04/23 02:43
→ jserv: Multics和Unix繼承至今,儘管過了將近60年,存取方式卻雷同276F 04/23 02:46
推 bluu: 教授安安277F 04/23 02:46
→ jserv: 你說,這樣的「文化」背景是不是值得我們去探究嗎?278F 04/23 02:47
→ jserv: 我在課堂有時會忍不住「考古」,談上述的資訊系統演化,但學生通常會說:「一堆廢話,我只想知道聯發科面試考什麼?」280F 04/23 02:48
→ a740125: 沒想到還能在文章裡看到我指導教授的名字283F 04/23 02:50
推 oryzae: 讚,深入簡出,linux系統真的多虧這些無私的人分享結果284F 04/23 02:51
推 TobyH4cker: 現在資訊科技的發展建基在過去歷史洪流中萌生的各種小發想286F 04/23 02:52
推 aiballen: 推個神人教授,值得分享的好文288F 04/23 02:53
推 pcchou: 留一下名,等老師通識開成,老師可以開在夏季學院!289F 04/23 02:55
推 lolicat: 教授不要當我(X291F 04/23 02:59
→ TobyH4cker: 而且過去留下的影子不曾消失過,比如 referer 這樣的拼寫錯誤沿用到現在,還有time.h的month從0開始影響了Java的Date又接著被JavaScript 沿用至今
我覺得教授可以從類似這樣的出發點去發展292F 04/23 02:59
推 gaduoray: 推 這是論文吧XDDDDD298F 04/23 03:10
推 RichLook: 雖然看不懂 但還是先推個302F 04/23 03:18
推 obfly: 先推再睡307F 04/23 03:35
推 airyptt: 推,這篇應該要進精華吧!312F 04/23 03:41
推 ttwginq: 原來上 PTT 可以看論文313F 04/23 03:42
推 naihsi: 有神快拜319F 04/23 03:52
推 xru03: 推321F 04/23 04:01
噓 pig2014: 幹jserv真的很屌324F 04/23 04:03
推 fonef: 推325F 04/23 04:06
→ pig2014: 但我覺得未來是C++的時代了329F 04/23 04:07
推 frakw: 推331F 04/23 04:10
推 gjcl6: 講中文好嗎335F 04/23 04:20
推 icedata: 感謝各位神人們的貢獻343F 04/23 04:48
推 yupei: 專業考古文推344F 04/23 05:02
推 c88tm: 講古欸XDDDDD345F 04/23 05:03
推 ME13: 腿356F 04/23 05:44
推 sample: 我媽問我為何跪在電腦前面358F 04/23 06:01
推 pkhio: 先推363F 04/23 06:22
推 ppptofff: 看到[]就暈倒,時間太多366F 04/23 06:24
推 jaxson: 有神出沒,快推368F 04/23 06:30
推 anludy: 娘子!快出來看神!376F 04/23 06:47
推 Pictor: 推,太神了!378F 04/23 06:50
→ jserv: @ppptofff, 當你撰寫 Brainf*ck 程式時,會看到更多 [ ]382F 04/23 06:52
推 ManGo: 如果您還在,是不是很多事情都會不一樣385F 04/23 06:55
推 wetor: 用PTT看PTT演進史 讚讚387F 04/23 07:00
推 loveadu: 給我想的差不多,給推391F 04/23 07:04
推 tksq: 推392F 04/23 07:05
推 rd2l4: 推394F 04/23 07:08
推 tracyo: 哇屋是大師399F 04/23 07:12
→ jserv: @aa7520tw, 《餘生太長,你太難忘》(福祿丸子)401F 04/23 07:12
※ 編輯: jserv (140.116.246.163 臺灣), 04/23/2021 07:18:43
推 aa429: 推408F 04/23 07:20
推 dk094: 推424F 04/23 07:41
推 kc: 大神文426F 04/23 07:42
推 ddoy7: 推427F 04/23 07:44
推 cocota: 哎 教授又在bbs上寫論文了啦431F 04/23 07:45
推 s87069: 這可以進探索頻道的節目了吧?!435F 04/23 07:51
推 paint: 時代的眼淚436F 04/23 07:51
推 rnmrn: 朝聖437F 04/23 07:52
推 vinca: 推442F 04/23 07:56
推 inote: 跪著朝聖443F 04/23 07:57
推 ilgwt: 拜!445F 04/23 08:00
推 ttuys: 推448F 04/23 08:00
推 iung: 楓橋和沙灘都玩過的人朝聖推451F 04/23 08:02
推 P5566: 推455F 04/23 08:07
推 asidy: 乾,來ptt看老人講古461F 04/23 08:16
推 cagman: 先推再看463F 04/23 08:19
推 antis: 神476F 04/23 08:30
推 ttnguirfy: 拿論文充當發文吧(咦?) 教授還不快去期刊發表!477F 04/23 08:30
推 OGC218: 你不要這樣專業好不好,我跪得很痠481F 04/23 08:34
推 RLH: 親身經歷一段歷史 感覺好神奇482F 04/23 08:35
推 ZO20: 推483F 04/23 08:38
推 shiwa: 酷欸485F 04/23 08:40
推 cons: 推推486F 04/23 08:41
推 diiky: 推494F 04/23 08:53
推 dodoju: 真的是寶貴的歷史496F 04/23 09:01
噓 daye2012: 寫到讓人家看不懂乾脆不要寫499F 04/23 09:10
→ karmel: 還有人能酸呵呵504F 04/23 09:19
推 Mark87: 以免人家覺得我看不懂506F 04/23 09:22
推 gargamel: 現在才知道陳博就是Xshadow...510F 04/23 09:29
--