# 幫助 FreeBSD

### Jordan Hubbard

$FreeBSD: doc/zh_TW.Big5/articles/contributing/article.sgml,v 1.2 2006/07/10 07:31:20 vanilla Exp $

FreeBSD 是 FreeBSD基金會的註冊商標

IEEE, POSIX, 和 802 是 Institute of Electrical and Electronics Engineers, Inc. 在美國的註冊商標。

許多製造商和經銷商使用一些稱為商標的圖案或文字設計來彰顯自己的產品。 本文中出現的眾多商標，以及 FreeBSD Project 本身廣所人知的商標，後面將以 '™' 或 '®' 符號來標註。

無論是個人或是各種組織，如果希望為 FreeBSD 提供幫助，都可以在本文中找到合適的方法。

[ 章節模式 / 完整模式 ]

你希望替 FreeBSD 做點什麼嗎？太好了，我們歡迎你。FreeBSD 正是有賴於廣大使用者的貢獻才得以發展壯大的。我們不僅非常感謝您所做的貢獻，而且，這些工作對於 FreeBSD 的持續發展也至關重要。

也許與您想像的不同，您既不必得是一名出色的 Programmer，也無須和 FreeBSD core team 成員有很好的私交，我們會一視同仁的對待您的工作。 FreeBSD 的開發人員遍布全球，大家技術專長各異，年齡分布也非常廣泛。 然而，每天我們都在面對持續增加的工作，而苦於沒有足夠的人手，因此我們隨時歡迎您的幫助。

FreeBSD 計劃所處理的是一個完整的作業系統環境，而不只是一個 kernel 或是一些零散的工具包。 因此，我們的 `TODO` 待辦任務列表裡包含各式各樣的工作： 從文件、使用者測試、demo，到系統安裝程式和更專業的 kernel 開發。 因此無論您的技術水準如何，從事何種領域，都可以幫助這個計劃。

我們鼓勵從事和 FreeBSD 相關工作的企業和我們聯繫。 您需要一些特殊的擴展來使您的產品運轉起來嗎？ 您會發現我們很樂意答應您的請求，除非是特別稀奇古怪的。 您是否正從事相關的增值業務？ 讓我們來幫助您吧， 我們也許可以在某些方面相互合作。 自由軟體界正在努力打破舊有的框框(像是關於軟體開發、銷售和維護)， 我們希望懇請您至少能給它一次機會。

## 1 我們的需求

下面列出了一些需要完成的任務和子計劃， 它們代表 `TODO`(待辦任務列表) 列表的意思，以及使用者的要求。

### 1.1 正在進行中的任務(非程式開發人員)

很多參加 FreeBSD 計劃的人不是 Programmer。 這個計劃裡有文件撰寫者、網頁設計師、以及技術支援人員。 對於這些義工來說，他們只需要貢獻一些時間，並且具有學習的意願。

1. 您可以時常翻閱 FAQ 和手冊(Handbook) ，如果發現有解釋不清楚的地方，或是不合時宜的文件，甚至完全不正確的地方， 都請告訴我們。當然，若能順手把他們修正，並把勘誤寄給我們，那就更好了。:) (SGML 其實並不難學，但我們也不反對您直接提交一般 ASCII 的純文字版本)。

2. 幫助我們把 FreeBSD 文件翻譯成你的母語。 如果你的母語版本已經存在了， 也可以翻譯一些額外的文件，或者檢查那些已有的文件是否為最新版。 您可以先簡單看看 FreeBSD 文件計劃中有關 翻譯時的常見問題。 參加翻譯工作，並不是說您要孤軍奮戰翻譯所有 FreeBSD 文件。 身為義工，要做多少工作完全取決於您的意願。一旦某個人開始翻譯了， 之後幾乎一定會有其他人參與到這些工作中來。 如果時間有限，或者精力不夠去翻譯整份文件，那可以首先去翻譯安裝指南。

3. 閱讀 FreeBSD general questions 郵遞論壇 並偶爾翻閱(甚至有規律地這樣做) the comp.unix.bsd.freebsd.misc newsgroup 。與別人分享您的專業知識， 並幫助他們解決問題，是件令人愉悅的事情； 有時候，您甚至可以在這個過程中學到一些新東西！ 這些論壇有時也會為您激發出一些不錯的想法。

### 1.2 正在進行中的任務(程式開發人員)

列在這裡的大部分任務都需要您投入可觀的時間，或者需要您在 FreeBSD kernel 方面有豐富的知識，或者兩者都要。當然這裡也有很多重要的任務，適合像是 “weekend hackers” 這類只用週末就可以搞定的 Hacker。

1. 如果您正在跑的是 FreeBSD -CURRENT 版本，並且網路速度還不錯， 那麼可以到 `current.FreeBSD.org`， 這台每天會有一個新版本 —— 如果您有空， 您可以三不五時下載並安裝， 其間如果出了什麼問題，請告訴我們。

2. 閱讀 FreeBSD problem reports 郵遞論壇。這些問題，或許您能提供有建設性意義的意見， 或者幫忙測試一些 patch 。此外，甚至可以嘗試修正其中的一些問題。

3. 如果您知道有一些修正已經在 -CURRENT 上成功地使用， 但在經過一段時間(通常是 2 週左右)之後，仍未合併到 -STABLE (這步驟就是 MFC -- Merged From Current)，那麼可以給相關的 committer 人員發封禮貌的提醒信。

4. 將第三方(3rd party)軟體加入到原始碼中的 `src/contrib` 目錄。

5. 確保 `src/contrib` 中的原始碼是最新的。

6. 編譯原始碼(或是部分原始碼)時，請改用更高的警告等級(warning level) 以便偵錯(debug)用，並在完成測試、確認正常完畢之後，清除這些編譯的警告等級。

7. 更新那些在 ports 中使用過時的東西， 例如 `gets()` 或包含 `malloc.h` 所產生的警告。

8. 如果有為 ports 作了任何修正， 請記得將您的 patch 發給原作者 (這樣下次升級時，您的工作會變得輕鬆一些)。

9. 先取得正式的標準，如 POSIX® 的副本。 在 FreeBSD C99 & POSIX 標準相容計劃 網站上，可以得到相關鏈接。 請將 FreeBSD 的行為與上述的標準進行比較，若所得結果與 C99 & POSIX 標準不同的話， 特別是那些細節地方的微小差異，請發一個關於它的 PR (問題報告)。 如果可能，請指出如何修正它，並隨 PR 提交 patch 。 如果您認為標準有問題，請向這些規格標準的相關團體，請求對其進行重新的考慮。

10. 為這份列表提供更多建議！

### 1.3 查閱整個 PR 資料庫

FreeBSD PR 列表 這裡會顯示目前所有 PR 的問題狀態，以及由 FreeBSD 使用者提交的改進建議。 PR 資料庫同時包括了開發人員和非開發人員的任務。 查看那些尚未解決的 PR，並看看是否有您感興趣的任務。 這其中可能有一些是非常簡單的問題，只需要看一看並確認 PR 是正確的。 另外一些可能會非常複雜，或者完全未附任何修正。

首先看一看那些還沒有人接手的 PR。 如果 PR 已經分配給了其它人，但看起來是您能夠處理的， 您可以寄信給那個人，並詢問您是否可以提供幫助 —— 他們可能已經有可供測試的 patch ，或有一些可供討論的意見。

### 1.4 由 “Ideas” 中選一項

FreeBSD list of projects and ideas for volunteers 同樣地開放給有意願參與 FreeBSD 計劃的人。 這份清單將持續地更新，同時提供各個項目的資訊給所有人 （不論是否為程式設計人員）。

## 2 如何提供幫助

基本上可以分為以下 5 種方式：

### 2.1 錯誤報告和意見發表

通常，一般 的技術想法和建議應該發到 FreeBSD technical discussions 郵遞論壇。 同樣地，對於這些東西有興趣的人 (當然， 他們同時還要能夠容忍 大量的 郵件！) 可以考慮訂閱 FreeBSD technical discussions 郵遞論壇。 請參閱 FreeBSD 使用手冊 以了解關於這個郵遞論壇， 以及其它郵遞論壇的詳細情況。

如果您發現了 bug 或者想要提交某些修改， 請透過 send-pr(1) 程式或使用 網頁介面 的回報 來提交。請試著填寫 PR 的每個項目。 一般來說，除非 patch 檔超過 65 KB，我們建議在 PR 中直接附上 patch 就可以了。 若可直接套用 patch 到原始碼的話，那麼建議在 PR 的 Synopsis 欄位註明 `[PATCH]`。 對了，在附上 patch 時，請 不要 透過滑鼠的『複製、貼上』來進行，因為這樣做會把 Tab 變成空格， 會導致 patch 就不能用了。如果 patch 超過 20KB， 請考慮壓縮它並使用 uuencode(1) 來進行編碼。

在寫完 PR 之後，您會收到一封確認郵件以及事件追蹤編號。 請保留這個編號，因為事後可以用這編號發信到 `<bug-followup@FreeBSD.org>` 來回覆、提供關於該事件的後續資料。您需要做的是將編號放到郵件的標題中， 例如 `"Re: kern/3377"`。 若是同一問題的回覆方面，應該透過這種方式來進行。

如果您在一段時間 (超過 3 天甚至 1 週，這取決於您的郵件服務)之後仍然沒有收到確認信 或者由於一些原因無法使用 send-pr(1) 程式， 則可以發信到 FreeBSD problem reports 郵遞論壇 來請別人幫你代寄。

請參閱 這篇文章 了解如何撰寫好的問題報告。

### 2.2 對於文件的修訂

文件的修改方面，是由 FreeBSD documentation project 郵遞論壇 來審查。 請參閱 FreeBSD Documentation Project Primer 來獲得完整的教學細節。 請按照 Section 2.1 中介紹的方法使用 send-pr(1) 來提交新的文件，或者改善現有的文件 (哪怕是很小的改進也是歡迎的！)。

### 2.3 對於現有原始碼的修改

在現有原始碼上進行修改或增加功能，在某種程度上是需要更多技巧的事， 並且還跟您對於目前 FreeBSD 的開發現狀了解程度有關。 有多種方式可以得到被稱作 “FreeBSD-CURRENT” 的 FreeBSD 開發版本。 請參閱 FreeBSD 使用手冊的 相關部份 ，來了解使用 FreeBSD-CURRENT 的詳情。

在舊的原始碼上進行修改，則通常可能原始碼已過時， 或與新的版本差異太大而無法被重新整合到 FreeBSD 中。 如果您有訂 FreeBSD announcements 郵遞論壇 以及 FreeBSD-CURRENT 郵遞論壇 的話， 則可以透過它們來大致了解目前的開發狀態。

若您能夠儘量以最新的原始碼來進行您的修改， 則下一步要做的事情就是產生您所修改的 diff 檔， 並將它發給 FreeBSD 的維護人員。這項工作可以透過 diff(1) 命令來完成。

提交 patch 時，建議 diff(1) 格式採用 unified diff (可以用 `diff -u` 來產生)。不過，如果您修改了大量的原始碼， 則使用 `diff -c` 來生成的 context diff 的 diff 可能更容易閱讀，因而推薦使用。一般而言，大都是採用 `diff -ruN` 即可。

例如：

    % diff -c oldfile newfile

或

    % diff -c -r olddir newdir

將會對特定目錄，產生 context 的 diff 檔。

或者像是...

    % diff -u oldfile newfile

或

    % diff -u -r olddir newdir

將產生一樣的 diff ，但是格式為 unified 。

更多的細節部份，請參閱 diff(1)。

一旦您使用 diff(1) 來產生 diff 檔 (可以使用 patch(1) 命令來測試一下)，就可以提交它們，以便被 FreeBSD 收錄。 透過使用 Section 2.1 中所介紹的 send-pr(1) 程式就可以完成這項工作。 請注意：不要只把 diff 檔發到 FreeBSD technical discussions 郵遞論壇， 否則它們可能會被遺忘！ 我們會非常感激您提交的修改 (這是一個義工計劃！)； 因為我們都很忙， 因此有時不一定能夠立即修正問題，但 PR 資料庫將一直保持著這些記錄， 因此只要有人有了時間它們就能被改正了。 如果您的問題報告中包括 patch ，不要忘了在標題加上 `[PATCH]` 來強調一下。

如果您認為合適 (例如增、刪檔案或更改檔名)， 還可以考慮使用 `tar` 來將檔案打包，然後用 uuencode(1) 來編碼。此外，也可以用 shar(1) 產生的方式。

如果您的修改可能存在潛在的爭議，例如， 您不確定相關的版權問題，或者感覺需要經過更嚴格的復審才可以發佈它們， 則應直接發給 FreeBSD core team，而不是透過 send-pr(1) 來發送。 FreeBSD core team 這小組成員大多從事 FreeBSD 的日常工作。 需要注意的是，這個小組也因此十分忙碌， 因此只有在非常必要的時候，才應寫信給他們。

請參考 intro(9) 和 style(9) 以了解關於撰寫程式碼的風格偏好。 若能在送出相關程式碼之前，先了解這些，那對大家來說將是極大的幫助。

### 2.4 新原始碼或重要的加值軟體包

如果您打算提供規模較大的原始碼，或者為 FreeBSD 增加重要的新功能， 則可能必須將它們透過 uuencode 進行編碼，或傳到某個 Web 或 FTP 站點，以便更多的人能夠得到它。如果您沒有這樣的主機， 請到相關的 FreeBSD 郵遞論壇提出，看看是否有人願意幫您放置它們。

對於大量的原始碼而言，關於版權的問題肯定會被提出。 FreeBSD 基本系統中能夠使用的版權聲明包括：

1. BSD 版權。我們傾向於使用這類授權的原始碼， 因為它『不附加多餘的條件』，因而更能夠吸引商業企業使用。 FreeBSD 並不反對商業公司使用它的原始碼，相反， 我們積極地鼓勵商業公司使用我們的原始碼， 當然，如果它們若最終能把部分原始碼，重新捐贈給 FreeBSD 就更好了。

2. GNU General Public License，或簡稱 “GPL”。 我們並不很歡迎使用這樣授權的原始碼， 因為商業公司使用它需要做更多的工作。不過，由於很多使用 GPL 授權的原始碼目前是無法避免的 (compiler, assembler, text formatter等等) ，拒絕使用所有採用這樣授權的軟體是很不明智的。 採用 GPL 授權的原始碼會被放到原始碼的一些特定的位置，例如 `/sys/gnu` 或 `/usr/src/gnu`，以便那些認為 GPL 可能會造成麻煩的人能夠作出適當的判斷。

使用其它授權的原始碼在進入 FreeBSD 之前必須經過慎重的復審和考慮。 採用包含嚴厲限制的商業授權的原始碼，一般來說會被拒絕， 但我們鼓勵這些原始碼的作者，透過自己的管道來發布它們。

若要在您的成果上加入 “BSD-based” 版權的話， 請把下列文字放到每份原始碼的最開始部分， 並用適當的文字替換 `%%` 之間的文字。

    Copyright (c) %%proper_years_here%%
            %%your_name_here%%, %%your_state%%  %%your_zip%%.
        All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer as
       the first lines of this file unmodified.
    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY %%your_name_here%% ``AS IS'' AND ANY EXPRESS OR
    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    IN NO EVENT SHALL %%your_name_here%% BE LIABLE FOR ANY DIRECT, INDIRECT,
    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

            $Id$

為了方便您的使用，在 `/usr/share/examples/etc/bsd-style-copyright` 也可以找到此授權的副本。

### 2.5 贊助資金、硬體或 Internet mirror

我們非常願意接受各種形式的捐贈，以進一步拓展 FreeBSD 計劃 ，因為有您的支持，像我們這樣的義工努力才能夠有更大的成就！ 捐贈硬體也非常重要，因為這樣能夠幫助我們增加可支援的硬體種類， 而我們中的很多人並沒有足夠的資金來購置這些硬體。

#### 2.5.1 捐款

FreeBSD 基金會是一個非營利的、有課稅豁免權的基金會， 之所以會建立這個基金會，是為了讓 FreeBSD 計劃能夠可長可久。 因為該基金會屬 501(c)3 實體，一般而言捐款給基金會的話，可以免繳美國聯邦收入稅， 以及科羅拉多州收入稅。通常對於有課稅豁免權的實體進行捐贈的話， 可以折抵聯邦收入中應課稅部分的金額。

您可以把支票寄往：

The FreeBSD Foundation
7321 Brockway Dr.
Boulder, CO 80303
USA

FreeBSD 基金會現在可以透過 PayPal 從網上接受捐款。 如果您想向基金會捐款，請參閱 FreeBSD 基金會 網站。

關於 FreeBSD 基金會的更多詳情，可以在 FreeBSD 基金會 -- 介紹 找到。要聯絡基金會， 請發送電子郵件到 `<bod@FreeBSDFoundation.org>`。

#### 2.5.2 捐贈硬體

FreeBSD 計劃歡迎任何人捐贈可以使用的硬體。 如果您有興趣捐贈硬體，請聯繫 捐贈聯絡人辦公室。

#### 2.5.3 成為 FreeBSD mirror 的網站

我們歡迎新的 FTP、WWW 或 `cvsup` mirror 站。如果您希望成為這樣的 mirror 站， 請參閱 如何架設 FreeBSD mirror 一文，以了解進一步的情況。

本文及其他文件，可由此下載：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。