---
title: 章 1. 簡介
authors:
  - author: Murray Stokely
  - author: Jeroen Ruigrok van der Werven
prev: books/developers-handbook/parti
next: books/developers-handbook/tools
showBookMenu: true
weight: 2
params:
  path: "/books/developers-handbook/introduction/"
---

[[introduction]]
= 簡介
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 1
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/developers-handbook/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[introduction-devel]]
== 在 FreeBSD 開發程式

好了我們開始吧！我想你的 FreeBSD 已經安裝好了，而且已經準備好要用它寫點程式了吧？ 但是要從哪裡開始呢？ 有提供寫程式的程式或環境嗎？ 身為 programer 的我可以做什麼呢？

本章試著回答你一些問題，當然，單就 programming 程度來說可分很多種層次， 有的人只是單純當興趣，有的則是他的專業， 本章主要內容是針對程式初學者， 當然，對於那些不熟 的程式開發者而言，本文件內容也是十分實用的。

[[introduction-bsdvision]]
== The BSD Vision

為了讓你寫出來的程式在 like系統上具有良好的使用性、效能和穩定性， 我們必須跟你介紹一些程式概念(original software tools ideology)。 

[[introduction-archguide]]
== 程式架構指南

我們想介紹的概念如下

* 在整個程式還沒寫完前，不要增加新的功能。
* 另外一個重點就是，讓你自己選擇你的程式將會具有何種功能， 而不是讓別人決定，不想要去滿足全世界的需求，除非你想讓你的程式具有擴充性或相容性。
* 千萬記住：在沒有相關經驗時，參考範例程式碼所寫出來的程式， 會比自己憑空寫出來的好。
* 當你寫的程式沒辦法完全解決問題時，最好的方法就是不要試著要去解決它。
* 若用 10% 的心力就能輕鬆完成 90% 的工作份量，就用這個簡單法子吧。
* 盡可能地簡化問題的複雜。
* 提供機制(mechanism)，而非原則(policy)。 比方說，把使用者介面選擇權交由使用者來決定。

以上摘自 Scheifler Gettys 的 "X Window System" 論文

[[introduction-layout]]
== [.filename]#/usr/src# 的架構

完整的 FreeBSD 原始碼都在公開的 CVS repository 中。 通常 FreeBSD 原始碼都會裝在 [.filename]#/usr/src#， 而且包含下列子目錄：

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Directory
| Description

|[.filename]#bin/#
|Source for files in [.filename]#/bin#

|[.filename]#contrib/#
|Source for files from contributed software.

|[.filename]#crypto/#
|Cryptographical sources

|[.filename]#etc/#
|Source for files in [.filename]#/etc#

|[.filename]#games/#
|Source for files in [.filename]#/usr/games#

|[.filename]#gnu/#
|Utilities covered by the GNU Public License

|[.filename]#include/#
|Source for files in [.filename]#/usr/include#

|[.filename]#kerberos5/#
|Source for Kerberos version 5

|[.filename]#lib/#
|Source for files in [.filename]#/usr/lib#

|[.filename]#libexec/#
|Source for files in [.filename]#/usr/libexec#

|[.filename]#release/#
|Files required to produce a FreeBSD release

|[.filename]#rescue/#
|Build system for the [.filename]#/rescue# utilities

|[.filename]#sbin/#
|Source for files in [.filename]#/sbin#

|[.filename]#secure/#
|FreeSec sources

|[.filename]#share/#
|Source for files in [.filename]#/usr/share#

|[.filename]#sys/#
|Kernel source files

|[.filename]#tools/#
|Tools used for maintenance and testing of FreeBSD

|[.filename]#usr.bin/#
|Source for files in [.filename]#/usr/bin#

|[.filename]#usr.sbin/#
|Source for files in [.filename]#/usr/sbin#
|===
