TIP 計劃說明書
作者: rock (遊手好閒的石頭成)
E-Mail: shirock@mail.educities.edu.tw
版本: 2.0.1
初版日期: April 17, 2001
最近修訂日期: August 14, 2001
零、前言
The TIP Project 可考之日期,起自 1998/1/10 。 事實上在此之前,我早於 1995 年時,即著手修改 Firebird BBS
之程式碼,那時開始便有許多構想;至 1997 年開始進行系統性的修改及發展動作,進而提出此計劃之初步規劃,最後於 1998 年正式設立網站及
mailing-list 。
關於本計劃的詳細歷史,請看「History of The TIP Project」。
由於此計劃是從我維護 bbs.touc.edu.tw 及 bbs.isu.edu.tw 的程式時開始,故分別取兩站之首字而得 TIP (Touc and
Isu Parties) 為此計劃名稱。
以下以 TTP 表示 The TIP Project 。
一、計劃目標
此計劃是一關於 BBS (Bulletin Board System) 的發展計劃,其原始碼根基於 Firebird BBS 系統。
主要目標為達成 Firebird BBS 系統的標準化 (standardization) ;次要目標則希望可按使用者的不同需求,提供多元化的使用方式。
在標準化上,有三大訴求。
Standard data format
在資料儲存 (data storage) 上,尋求標準而一致的資料格式,且兼顧彈性及擴充性,以利資料的處理、傳送及轉換。
Standard application protocol
對最終用戶 (end-user) 而言,本計劃將可提供標準的應用通訊協定服務,使用戶可於任何時、地,藉助任何裝置 (anytime, anywhere)
,使用 BBS 提供的服務。
Standard API (Application Programming Interface)
建立一致的 API ,以利程式人員 (programmer) 開發及維護軟體。
二、執行需求
作業平台
本計劃為一跨平台的開發計劃,任何具備下列特性的作業平台,皆在考量之中:
- TCP/IP 連結
- 多工作業能力
- 具階層式的檔案系統
- 提供具名資料串流及共享記憶體的 IPC 機制
- 提供資源使用上的共用互斥之協調機制
依上述要求者,目前主要以 unix 平台為運作平台,如 Linux, FreeBSD 等,而 Win32 平台亦可。
函數庫
為達成 standard API 的目標,需要下列的函數庫:
- 符合 ANSI C 所定義的 C 語言函數庫
用於與作業系統相關度較低的場合,例如字串比對。
- POSIX.1 規格的 API
POSIX.1 定義了可移植性作業系統的 C 語言介面,在這之上發展程式,可增加移植性。若部份的 POSIX.1 的函數定義,和 ANSI C 所定義者有衝突時,以
POSIX.1a 為準。
- 相容 BSD socket 之 API
這是為了提供網路作業的功能。 BSD 家族是以系統呼叫的方式存在,其他系統如 Linux 以函數庫的方式存在,而 Win32 平台上,則提供了 Winsock
函數庫。
- Pthread 函數
亦即 POSIX.1c ,是為了提供多執行緒的功能。 相容者有 GNU Pth library 。
- REGEX 函數
符合 POSIX.2 所定義的字串 Regular Expression 常式。一般使用 Henry Spencer REGEX 函數庫,其演算法及效率較佳。
由於 HS REGEX library 幾乎算是公眾軟體 (PD) ,作者在文件上自已說的,因此在許多 Open Source Software 中皆可見到其蹤影,例如
APACHE, mSQL, PHP 等。 若作業系統本身已提供,則不必另外安裝。
- MD5 函數
在 TTP 中,預設使用 md5 做為雜湊函數及密碼編碼函數。可用 RSA 所釋出的 MD5 routines 。 若作業系統本身已提供, 則不必另外安裝。
- Unix DBM 函數
提供相容於 Unix DBM 程式設計介面之函數庫,例如 GDBM 、 Berkerly DB 。
三、架構規劃
服務內容
觀察 BBS 所提供的服務內容,可分成三大主要項目:
- 使用者 (User)
使用者的資料包含了使用者的個人註冊資訊、安全等級 (使用權限、群組) 、及私人檔案等內容。
- 信件傳遞與貯藏 (Message delivery and storage)
信件 (message/article) 包含了私人的信件 (mail) 及公開的佈告 (post) 。 私人的信件貯藏在使用者的個人信箱 (mailbox)
,而公開的佈告貯藏在版面/討論區 (board) 。
- 即時通訊 (Instant Message)
即時通訊包含了線上使用者動態查詢 (online user activity query) 、傳呼 (page) 、短訊發送 (message)
及多人對談 (talk, chat) 四種主要行為。
除上述三大項目外, BBS 尚可提供其他的服務內容,例如生活資訊、文章選集、線上娛樂等等,但這些項目是可選擇的而非必需的,其提供的形式及內容,全由 BBS
系統管理者決定,並無一定的規範,故不在本計劃的規劃中。
程式架構
依程式的運作方式,包含了下列三種架構:
- 文字終端機架構 (Mainframe architecture)
提供文字使用者介面 (text-based UI) 即 shell ;而使用者通常利用 telnet 程式,以虛擬終端機方式簽入主機,使用 BBS 服務。

- 主從式架構 (Client/Server architecture)
使用者利用相互搭配的客戶端工具 (client) ,連結伺服端所提供的服務 (server) ,例如以 Outlook 配 SMTP/POP3/NNTP
server , MS Chat 配 IRC server 。 TTP 預期將支援 POP3, IMAP, NNTP, IRC, LDAP 等 RFC
所規範的應用通訊協定。

- 分散式架構 (Distributed architecture)
用戶層 (Browser) - 應用程式層 (Application) - 資料庫層 (DBMS) 的分散式架構,用戶層統一採用 Web browser
作為前端工具,由應用程式伺服器以 CGI, ASP, SSI 等型式,向資料庫伺服器取得資料處理後,交給瀏覽器呈現在使用者眼前。 TTP 以 POP3/IMAP
server, NNTP server 等伺服端軟體充當 DBMS 。

軟體層次
依軟體與 BBS 資料實體間的相關程度,分成四個層次:

- Layer 0
API 。
- Layer 1
Server for internet services ,對應主從式架構的 server 及分散式架構的 DBMS 。
- Layer 2
Shell ,對應文字終端機架構的 UI 。
- Layer 3
Application ,對應主從式架構的 client 及分散式架構的 application 。
四、軟體設計與開發
API (Application Programming Interface)
對應 layer 0 的實作內容。
API 的內容:
- 降低應用軟體對系統平台的依存性
透過函數介面,簡化系統呼叫的動作;同時隱藏不同作業平台間,系統呼叫的差異性,使發展者在發展程式時,可以減少平台差異的困擾,增加程式的可攜性。
- 提供基於個體導向之資料類別
由於 TTP 的軟體開發介面,是以 C 語言實作,故此處所稱之類別,是概念性的用法,不是指 C++ 的 class 。 針對 BBS 所處理的主要資料,設計專門處理的資料類別,例如帳號資料、討論區資料等,隱藏資料處理的實際動作,增加底層資料庫系統轉換或擴充的彈性。並針對某些特定的工作,設計一組函數,使發展者可以輕鬆地以一個函數達成一個原本由許多函數所做的繁瑣工作。
- 資料處理的安全性
加入資料共享問題的考量,保證資料不會因為其他程式的干擾而造成遺失、錯誤。
實作上,分為 API library 及 RPC (Remote Procedure Call) server :
- API library
用於程式的編譯、連結。
- RPC server
提供遠端程序呼叫本地端 API 的閘道。
API library 之實作軟體為 TIP bbslib ,而 RPC server 的實作軟體為 WWCGS (Wide-Wing Common
Gateway Server) 。
伺服程式 (Server)
對應 layer 1 的實作內容。
按照 RFC 或具普遍性之網路通訊規格,重新設計伺服端及主機端程式,以便提供多元化的使用方式,滿足使用者的不同需求。 這同時也是本計劃的次要目標。
同時這些伺服程式,也將充做 DBMS 。
應用程式 (Application)
對應 layer 2/3 的實作內容。
文字使用者介面的實作軟體為 Firebird BBS Shell 。
設計一個可整合 BBS 服務內容於一身的 client ,可以連接 BBS 系統中分散的各項服務 (POP3, IMAP, NNTP, IRC ,etc.)
的伺服程式, 避免使用者安裝多種軟體的不便,以及為使用不同服務的內容,而在不同的 client 間切換的困擾。
而針對 Web 所帶來之新型態的電腦使用習慣,設計 Web 導覽介面,提供整合性的使用介面,也為經常使用不同電腦的使用者,提供集中的資料儲存點。 重點在規劃分散式架構的
application 部份。
實作重點
TTP 集中在伺服端的發展,儘量簡化各軟體的設定,並將設定內容集中放置。
所謂「集中在伺服端發展」,是說
TTP 主要只開發主機端的軟體,而使用者端(或稱前端)的工具,則儘量使用現成的、其他軟體提供者已有的軟體,不另行開發。
如此一來,使用者可不必隨著主機端軟體的更新、昇級,而變更其使用的工具,減少學習新軟體的困擾。
「簡化設定,將設定內容集中放置」,符合 TTP 架構的軟體,其設定方式都是簡單的 key=value 的方式,而沒有區塊、巢狀設定方式,且設定內容都是放在同一個檔案中
(預設是 /bbs/etc/sysconf.ini ) 。 只有少數的 TTP 軟體,因為是改自其他的軟體,其本身有自已的設定方式,限於人力,尚未修改成符合
TTP 方式的設定。
預期將提供下列 internet application protocol 的伺服程式:
- Rockymail
SMTP, POP3, IMAP, NNTP
- WWCGS
LDAP, SOAP
- IRC of The TIP Project
IRC
目前實作上的問題,在於沒有一個統一的資料庫語言及伺服程式,使得 shell/client/application 必須依個別伺服程式之通訊協定,如
POP3, NNTP 等等,分別連接不同的伺服程式才能存取資料。
Web 導覽介面另行設立一個子計劃來發展,計劃名稱為「The Griffin Project」。