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) 開發及維護軟體。

二、執行需求

作業平台

本計劃為一跨平台的開發計劃,任何具備下列特性的作業平台,皆在考量之中:

  1. TCP/IP 連結
  2. 多工作業能力
  3. 具階層式的檔案系統
  4. 提供具名資料串流及共享記憶體的 IPC 機制
  5. 提供資源使用上的共用互斥之協調機制

依上述要求者,目前主要以 unix 平台為運作平台,如 Linux, FreeBSD 等,而 Win32 平台亦可。

函數庫

為達成 standard API 的目標,需要下列的函數庫:

  1. 符合 ANSI C 所定義的 C 語言函數庫
    用於與作業系統相關度較低的場合,例如字串比對。
  2. POSIX.1 規格的 API
    POSIX.1 定義了可移植性作業系統的 C 語言介面,在這之上發展程式,可增加移植性。若部份的 POSIX.1 的函數定義,和 ANSI C 所定義者有衝突時,以 POSIX.1a 為準。
  3. 相容 BSD socket 之 API
    這是為了提供網路作業的功能。 BSD 家族是以系統呼叫的方式存在,其他系統如 Linux 以函數庫的方式存在,而 Win32 平台上,則提供了 Winsock 函數庫。
  4. Pthread 函數
    亦即 POSIX.1c ,是為了提供多執行緒的功能。 相容者有 GNU Pth library 。
  5. REGEX 函數
    符合 POSIX.2 所定義的字串 Regular Expression 常式。一般使用 Henry Spencer REGEX 函數庫,其演算法及效率較佳。 由於 HS REGEX library 幾乎算是公眾軟體 (PD) ,作者在文件上自已說的,因此在許多 Open Source Software 中皆可見到其蹤影,例如 APACHE, mSQL, PHP 等。 若作業系統本身已提供,則不必另外安裝。
  6. MD5 函數
    在 TTP 中,預設使用 md5 做為雜湊函數及密碼編碼函數。可用 RSA 所釋出的 MD5 routines 。 若作業系統本身已提供, 則不必另外安裝。
  7. Unix DBM 函數
    提供相容於 Unix DBM 程式設計介面之函數庫,例如 GDBM 、 Berkerly DB 。

三、架構規劃

服務內容

觀察 BBS 所提供的服務內容,可分成三大主要項目:

除上述三大項目外, BBS 尚可提供其他的服務內容,例如生活資訊、文章選集、線上娛樂等等,但這些項目是可選擇的而非必需的,其提供的形式及內容,全由 BBS 系統管理者決定,並無一定的規範,故不在本計劃的規劃中。

程式架構

依程式的運作方式,包含了下列三種架構:

軟體層次

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

ttp-layer

四、軟體設計與開發

API (Application Programming Interface)

對應 layer 0 的實作內容。

API 的內容:

實作上,分為 API library 及 RPC (Remote Procedure Call) server :

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 的伺服程式:

目前實作上的問題,在於沒有一個統一的資料庫語言及伺服程式,使得 shell/client/application 必須依個別伺服程式之通訊協定,如 POP3, NNTP 等等,分別連接不同的伺服程式才能存取資料。

Web 導覽介面另行設立一個子計劃來發展,計劃名稱為「The Griffin Project」。