Index: head/en_US.ISO8859-1/articles/problem-reports/article.xml
===================================================================
--- head/en_US.ISO8859-1/articles/problem-reports/article.xml (revision 46641)
+++ head/en_US.ISO8859-1/articles/problem-reports/article.xml (revision 46642)
@@ -1,1231 +1,1209 @@
Writing &os; Problem Reports
&tm-attrib.freebsd;
&tm-attrib.ibm;
&tm-attrib.intel;
&tm-attrib.sparc;
&tm-attrib.sun;
&tm-attrib.general;
$FreeBSD$$FreeBSD$This article describes how to best formulate and submit a
problem report to the &os; Project.Dag-ErlingSmørgravContributed by MarkLinimonproblem reportsIntroductionOne of the most frustrating experiences one can have as a
software user is to submit a problem report only to have it
summarily closed with a terse and unhelpful explanation like
not a bug or bogus PR. Similarly,
one of the most frustrating experiences as a software developer
is to be flooded with problem reports that are not really
problem reports but requests for support, or that contain little
or no information about what the problem is and how to reproduce
it.This document attempts to describe how to write good problem
reports. What, one asks, is a good problem report? Well, to go
straight to the bottom line, a good problem report is one that
can be analyzed and dealt with swiftly, to the mutual
satisfaction of both user and developer.Although the primary focus of this article is on &os;
problem reports, most of it should apply quite well to other
software projects.Note that this article is organized thematically, not
chronologically. Read the entire document
before submitting a problem report, rather than treating it as a
step-by-step tutorial.When to Submit a Problem ReportThere are many types of problems, and not all of them should
engender a problem report. Of course, nobody is perfect, and
there will be times when what seems to be a bug in a program is,
in fact, a misunderstanding of the syntax for a command or a
typographical error in a configuration file (though that in
itself may sometimes be indicative of poor documentation or poor
error handling in the application). There are still many cases
where submitting a problem report is clearly
not the right course of action, and will
only serve to frustrate both the submitter and the developers.
Conversely, there are cases where it might be appropriate to
submit a problem report about something else than a bug—an
enhancement or a new feature, for instance.So how does one determine what is a bug and what is not? As
a simple rule of thumb, the problem is not
a bug if it can be expressed as a question (usually of the form
How do I do X? or Where can I find
Y?). It is not always quite so black and white, but the
question rule covers a large majority of cases. When looking
for an answer, consider posing the question to the
&a.questions;.Consider these factors when submitting PRs about ports or
other software that is not part of &os; itself:Please do not submit problem reports that simply state
that a newer version of an application is available. Ports
maintainers are automatically notified by
portscout when a new version of
an application becomes available. Actual patches to update
a port to the latest version are welcome.For unmaintained ports (MAINTAINER
is ports@FreeBSD.org),
a PR without an included patch is unlikely to get picked up
by a committer. To become the maintainer of an
unmaintained port, submit a PR with the request (patch
preferred but not required).In either case, following the process described in Porter's
Handbook will yield the best results. (You might
also wish to read Contributing
to the FreeBSD Ports Collection.)A bug that cannot be reproduced can rarely be fixed. If the
bug only occurred once and you can not reproduce it, and it does
not seem to happen to anybody else, chances are none of the
developers will be able to reproduce it or figure out what is
wrong. That does not mean it did not happen, but it does mean
that the chances of your problem report ever leading to a bug
fix are very slim. To make matters worse, often these kinds of
bugs are actually caused by failing hard drives or overheating
processors — you should always try to rule out these
causes, whenever possible, before submitting a PR.Next, to decide to whom you should file your problem report,
you need to understand that the software that makes up &os; is
composed of several different elements:Code in the base system that is written and maintained
by &os; contributors, such as the kernel, the C library, and
the device drivers (categorized as kern);
the binary utilities (bin); the manual
pages and documentation (docs); and the
web pages (www). All bugs in these areas
should be reported to the &os; developers.Code in the base system that is written and maintained
by others, and imported into &os; and adapted. Examples
include &man.clang.1;, and
&man.sendmail.8;. Most bugs in these areas should be
reported to the &os; developers; but in some cases they may
need to be reported to the original authors instead if the
problems are not &os;-specific.Individual applications that are not in the base system
but are instead part of the &os; Ports Collection (category
ports). Most of these applications are
not written by &os; developers; what &os; provides is merely
a framework for installing the application. Therefore, only
report a problem to the &os; developers when the problem is
believed to be &os;-specific; otherwise, report it to the
authors of the software.Then, ascertain whether the problem is timely. There are
few things that will annoy a developer more than receiving a
problem report about a bug she has already fixed.If the problem is in the base system, first read the FAQ
section on &os;
versions, if you are not already familiar with the
topic. It is not possible for &os; to fix problems in anything
other than certain recent branches of the base system, so filing
a bug report about an older version will probably only result in
a developer advising you to upgrade to a supported version to
see if the problem still recurs. The Security Officer team
maintains the
list of supported
versions.If the problem is in a port, note that you must first
upgrade to the latest version of the Ports Collection and see if
the problem still applies. Due to the rapid pace of changes in
these applications, it is infeasible for &os; to support
anything other than the absolute latest versions, and problems
with older version of applications simply cannot be
fixed.PreparationsA good rule to follow is to always do a background search
before submitting a problem report. Maybe the problem has
already been reported; maybe it is being discussed on the
mailing lists, or recently was; it may even already be fixed in
a newer version than what you are running. You should therefore
check all the obvious places before submitting your problem
report. For &os;, this means:The &os; Frequently Asked
Questions (FAQ) list.
The FAQ attempts to provide answers for a wide range of
questions, such as those concerning
hardware
compatibility,
user
applications, and
kernel
configuration.The mailing
lists—if you are not subscribed, use the
searchable archives on the &os; web site. If the
problem has not been discussed on the lists, you might try
posting a message about it and waiting a few days to see if
someone can spot something that has been overlooked.Optionally, the entire web—use your favorite
search engine to locate any references to the problem. You
may even get hits from archived mailing lists or newsgroups
you did not know of or had not thought to search
through.Next, the searchable &os;
PR database (Bugzilla). Unless the problem is recent
or obscure, there is a fair chance it has already been
reported.Most importantly, attempt to see if existing
documentation in the source base addresses your
problem.For the base &os; code, you should carefully study the
contents of /usr/src/UPDATING on your
system or the latest version at http://svnweb.freebsd.org/base/head/UPDATING?view=log.
(This is vital information if you are upgrading from one
version to another—especially if you are upgrading to
the &os.current; branch).However, if the problem is in something that was
installed as a part of the &os; Ports Collection, you should
refer to /usr/ports/UPDATING (for
individual ports) or /usr/ports/CHANGES
(for changes that affect the entire Ports Collection). http://svnweb.freebsd.org/ports/head/UPDATING?view=log
and http://svnweb.freebsd.org/ports/head/CHANGES?view=log
are also available via svnweb.Writing the Problem ReportNow that you have decided that your issue merits a problem
report, and that it is a &os; problem, it is time to write the
actual problem report. Before we get into the mechanics of the
program used to generate and submit PRs, here are some tips and
tricks to help make sure that your PR will be most
effective.Tips and Tricks for Writing a Good Problem ReportDo not leave the Synopsis
line empty. The PRs go both onto a mailing
list that goes all over the world (where the
Synopsis is used for the
Subject: line), but also into a
database. Anyone who comes along later and browses the
database by synopsis, and finds a PR with a blank subject
line, tends just to skip over it. Remember that PRs stay
in this database until they are closed by someone; an
anonymous one will usually just disappear in the
noise.Avoid using a weak Synopsis
line. You should not assume that anyone
reading your PR has any context for your submission, so
the more you provide, the better. For instance, what part
of the system does the problem apply to? Do you only see
the problem while installing, or while running? To
illustrate, instead of
Synopsis: portupgrade is broken, see
how much more informative this seems:
Synopsis: port ports-mgmt/portupgrade coredumps
on -current. (In the case of ports, it is
especially helpful to have both the category and portname
in the Synopsis line.)If you have a patch, say so.
A PR with a patch included is much more likely to be
looked at than one without. If you are including one, put
the string [patch] (including the
brackets) at the beginning of the Synopsis.
(Although it is not mandatory to use that exact string, by
convention, that is the one that is used.)If you are a maintainer, say so.
If you are maintaining a part of the source code (for
instance, a port), you might consider adding the string
[maintainer update] (including the
brackets) at the beginning of your synopsis line, and you
definitely should set the Class of your PR
to maintainer-update. This way any
committer that handles your PR will not have to
check.Be specific. The more information
you supply about what problem you are having, the better
your chance of getting a response.Include the version of &os; you are running (there
is a place to put that, see below) and on which
architecture. You should include whether you are
running from a release (e.g., from a
CD-ROM or download), or from a
system maintained by Subversion (and, if so, what
revision number you are at). If you are tracking the
&os.current; branch, that is the very first thing
someone will ask, because fixes (especially for
high-profile problems) tend to get committed very
quickly, and &os.current; users are expected to keep
up.Include which global options you have specified in
your make.conf. Note: specifying
-O2 and above to &man.gcc.1; is
known to be buggy in many situations. While the &os;
developers will accept patches, they are generally
unwilling to investigate such issues due to simple
lack of time and volunteers, and may instead respond
that this just is not supported.If the problem can be reproduced easily, include
information that will help a developer to reproduce it
themselves. If a problem can be demonstrated with
specific input then include an example of that input
if possible, and include both the actual and the
expected output. If this data is large or cannot be
made public, then do try to create a minimal file that
exhibits the same issue and that can be included
within the PR.If this is a kernel problem, then be prepared to
supply the following information. (You do not have to
include these by default, which only tends to fill up
the database, but you should include excerpts that you
think might be relevant):your kernel configuration (including which
hardware devices you have installed)whether or not you have debugging options
enabled (such as WITNESS), and
if so, whether the problem persists when you
change the sense of that optionthe full text of any backtrace, panic or other
console output, or entries in
/var/log/messages, if any
were generatedthe output of pciconf -l
and relevant parts of your
dmesg output if your problem
relates to a specific piece of hardwarethe fact that you have read
src/UPDATING and that your
problem is not listed there (someone is guaranteed
to ask)whether or not you can run any other kernel as
a fallback (this is to rule out hardware-related
issues such as failing disks and overheating CPUs,
which can masquerade as kernel problems)If this is a ports problem, then be prepared to
supply the following information. (You do not
have to include these by default, which only tends to
fill up the database, but you should include excerpts
that you think might be relevant):which ports you have installedany environment variables that override the
defaults in bsd.port.mk, such
as PORTSDIRthe fact that you have read
ports/UPDATING and that your
problem is not listed there (someone is guaranteed
to ask)Avoid vague requests for
features. PRs of the form
someone should really implement something that does
so-and-so are less likely to get results than
very specific requests. Remember, the source is available
to everyone, so if you want a feature, the best way to
ensure it being included is to get to work! Also consider
the fact that many things like this would make a better
topic for discussion on
freebsd-questions than an entry in the
PR database, as discussed above.Make sure no one else has already submitted
a similar PR. Although this has already been
mentioned above, it bears repeating here. It only take a
minute or two to use the web-based search engine at https://bugs.freebsd.org/bugzilla/query.cgi.
(Of course, everyone is guilty of forgetting to do this
now and then.)Report only one issue per Problem
Report. Avoid including two or more problems
within the same report unless they are related. When
submitting patches, avoid adding multiple features or
fixing multiple bugs in the same PR unless they are
closely related—such PRs often take longer to
resolve.Avoid controversial requests.
If your PR addresses an area that has been controversial
in the past, you should probably be prepared to not only
offer patches, but also justification for why the patches
are The Right Thing To Do. As noted above,
a careful search of the mailing lists using the archives
at http://www.FreeBSD.org/search/search.html#mailinglists
is always good preparation.Be polite. Almost anyone who
would potentially work on your PR is a volunteer. No one
likes to be told that they have to do something when they
are already doing it for some motivation other than
monetary gain. This is a good thing to keep in mind at
all times on Open Source projects.Before BeginningSimilar considerations apply to use of the
web-based
PR submission form. Be careful of cut-and-paste
operations that might change whitespace or other text
formatting.Finally, if the submission is lengthy, prepare the work
offline so that nothing will be lost if there is a problem
submitting it.Attaching Patches or FilesWhen attaching a patch, be sure to use
with &man.diff.1;
to create or unified diff
and make sure to specify the exact SVN revision numbers of the
files you modified so the developers who read your report will
be able to apply them easily. For problems with the kernel or
the base utilities, a patch against &os.current; (the HEAD
Subversion branch) is preferred since all new code should be
applied and tested there first. After appropriate or
substantial testing has been done, the code will be
merged/migrated to the &os.stable; branch.If you attach a patch inline, instead of as an attachment,
note that the most common problem by far is the tendency of
some email programs to render tabs as spaces, which will
completely ruin anything intended to be part of a
Makefile.Do not send patches as attachments using
Content-Transfer-Encoding:
quoted-printable. These will perform character
escaping and the entire patch will be useless.Also note that while including small patches in a PR is
generally all right—particularly when they fix the
problem described in the PR—large patches and especially
new code which may require substantial review before
committing should be placed on a web or ftp server, and the
URL should be included in the PR instead of the patch.
Patches in email tend to get mangled,
and the larger the patch, the harder it will be for
interested parties to unmangle it. Also, posting a patch on
the web allows you to modify it without having to resubmit the
entire patch in a followup to the original PR. Finally, large
patches simply increase the size of the database, since closed
PRs are not actually deleted but instead kept and simply
marked as complete.You should also take note that unless you explicitly
specify otherwise in your PR or in the patch itself, any
patches you submit will be assumed to be licensed under the
same terms as the original file you modified.Filling out the TemplateIn the email template only, you will find the following
single-line fields:Submitter-Id: Do not change this.
The default value of current-users is
correct, even if you run &os.stable;.Confidential: This is prefilled
to no. Changing it makes no sense as
there is no such thing as a confidential &os; problem
report—the PR database is distributed
worldwide.Severity: One of
non-critical,
serious or critical.
Do not overreact; refrain from labeling your problem
critical unless it really is (e.g.,
data corruption issues, serious regression from previous
functionality in -CURRENT) or serious
unless it is something that will affect many users (kernel
panics or freezes; problems with particular device drivers
or system utilities). &os; developers will not
necessarily work on your problem faster if you inflate its
importance since there are so many other people who have
done exactly that — in fact, some developers pay
little attention to this field because of this.Priority: This field indicates
how widespread the effects of this bug is likely to
be.The next section describes fields that are common to both
the email interface and the
web
interface:Originator: Please specify your
real name, optionally followed by your email address in
angle brackets. In the email interface, this is normally
prefilled with the gecos field of the
currently logged-in user.The email address you use will become public
information and may become available to spammers. You
should either have spam handling procedures in place, or
use a temporary email account. However, please note
that if you do not use a valid email account at all, we
will not be able to ask you questions about your
PR.Organization: Whatever you feel
like. This field is not used for anything
significant.Synopsis: Fill this out with a
short and accurate description of the problem. The
synopsis is used as the subject of the problem report
email, and is used in problem report listings and
summaries; problem reports with obscure synopses tend to
get ignored.As noted above, if your problem report includes a
patch, please have the synopsis start with
[patch] (including the brackets); if
this is a ports PR and you are the maintainer, you may
consider adding [maintainer update]
(including the brackets) and set the Class
of your PR to maintainer-update.Category: Choose an appropriate
category.The first thing you need to do is to decide what part
of the system your problem lies in. Remember, &os; is a
complete operating system, which installs both a kernel,
the standard libraries, many peripheral drivers, and a
large number of utilities (the
base system). However, there are thousands
of additional applications in the Ports Collection.
You'll first need to decide if the problem is in the base
system or something installed via the Ports
Collection.Here is a description of the major categories:If a problem is with the kernel, the libraries
(such as standard C library libc),
or a peripheral driver in the base system, in general
you will use the kern category.
(There are a few exceptions; see below). In general
these are things that are described in section 2, 3,
or 4 of the manual pages.If a problem is with a binary program such as
&man.sh.1; or &man.mount.8;, you will first need to
determine whether these programs are in the base
system or were added via the Ports Collection. If you
are unsure, you can do whereis
programname.
&os;'s convention for the Ports Collection is to
install everything underneath
/usr/local,
although this can be overridden by a system
administrator. For these, you will use the
ports category (yes, even if the
port's category is www; see below).
If the location is
/bin,
/usr/bin,
/sbin, or
/usr/sbin, it
is part of the base system, and you should use the
bin category. (A few programs,
such as &man.gcc.1;, actually use the
gnu category, but do not worry
about that for now.) These are all things that are
described in section 1 or 8 of the manual
pages.If you believe that the error is in the startup
(rc) scripts, or in some kind of
other non-executable configuration file, then the
right category is conf
(configuration). These are things that are described
in section 5 of the manual pages.If you have found a problem in the documentation
set (articles, books, man pages), the correct choice
is docs.If you are having a problem with the FreeBSD web
pages, the proper choice is
www.if you are having a problem with something from
a port named
www/someportname,
this nevertheless goes in the
ports category.There are a few more specialized categories.If the problem would otherwise be filed in
kern but has to do with the USB
subsystem, the correct choice is
usb.If the problem would otherwise be filed in
kern but has to do with the
threading libraries, the correct choice is
threads.If the problem would otherwise be in the base
system, but has to do with our adherence to standards
such as &posix;, the correct choice is
standards.If the problem has to do with errors internal to a
&java.virtual.machine; (&jvm;), even though &java; was
installed from the Ports Collection, you should select
the java category. More general
problems with &java; ports still go under
ports.This leaves everything else.If you are convinced that the problem will only
occur under the processor architecture you are using,
select one of the architecture-specific categories:
commonly i386 for Intel-compatible
machines in 32-bit mode; amd64 for
AMD machines running in 64-bit mode (this also
includes Intel-compatible machines running in EMT64
mode); and less commonly arm,
ia64, powerpc,
and sparc64.These categories are quite often misused for
I do not know problems. Rather than
guessing, please just use
misc.Correct Use of Arch-Specific CategoryYou have a common PC-based machine, and think
you have encountered a problem specific to a
particular chipset or a particular motherboard:
i386 is the right
category.Incorrect Use of Arch-Specific CategoryYou are having a problem with an add-in
peripheral card on a commonly seen bus, or a problem
with a particular type of hard disk drive: in this
case, it probably applies to more than one
architecture, and kern is the
right category.If you really do not know where the problem lies
(or the explanation does not seem to fit into the ones
above), use the misc category.
Before you do so, you may wish to ask for help on the
&a.questions; first. You may be advised that one of
the existing categories really is a better
choice.Here is the current list of categories (taken from
http://svnweb.freebsd.org/base/head/gnu/usr.bin/send-pr/categories):advocacy: problems relating to
&os;'s public image. Obsolete.amd64: problems specific to the
AMD64 platform.arm: problems specific to the
ARM platform.bin: problems with userland
programs in the base system.conf: problems with
configuration files, default values, and so
forth.docs: problems with manual
pages or on-line documentation.gnu: problems with imported GNU
software such as &man.gcc.1; or &man.grep.1;.i386: problems specific to the
&i386; platform.ia64: problems specific to the
ia64 platform.java: problems related to the
&java; Virtual Machine.kern: problems with
the kernel, (non-platform-specific) device drivers,
or the base libraries.misc: anything that does not
fit in any of the other categories. (Note that there
is almost nothing that truly belongs in this category,
except for problems with the release and build
infrastructure. Temporary build failures on
HEAD do not belong here. Also note
that it is easy for things to get lost in this
category).ports: problems relating to the
Ports Collection.powerpc: problems specific to
the &powerpc; platform.sparc64: problems specific to
the &sparc64; platform.standards: Standards
conformance issues.threads: problems related to
the &os; threads implementation (especially on
&os.current;).usb: problems related to the
&os; USB implementation.www: Changes or enhancements to
the &os; website.Class: Choose one of the
following:sw-bug: software bugs.doc-bug: errors in
documentation.change-request: requests for
additional features or changes in existing
features.update: updates to ports or
other contributed software.maintainer-update: updates to
ports for which you are the maintainer.Release: The version of &os;
- that you are running. This is filled out automatically if
- you are using &man.send-pr.1; and need only be changed if
- you are sending a problem report from a different system
- than the one that exhibits the problem.
+ that you are running. This
+ needs to be filled in.
Finally, there is a series of multi-line fields:Environment: This should
describe, as accurately as possible, the environment in
which the problem has been observed. This includes the
operating system version, the version of the specific
program or file that contains the problem, and any other
relevant items such as system configuration, other
installed software that influences the problem,
etc.—quite simply everything a developer needs to
know to reconstruct the environment in which the problem
occurs.Description: A complete and
accurate description of the problem you are experiencing.
Try to avoid speculating about the causes of the problem
unless you are certain that you are on the right track, as
it may mislead a developer into making incorrect
assumptions about the problem.How-To-Repeat: A summary of the
actions you need to take to reproduce the problem.Fix: Preferably a patch, or at
least a workaround (which not only helps other people with
the same problem work around it, but may also help a
developer understand the cause for the problem), but if
you do not have any firm ideas for either, it is better to
leave this field blank than to speculate.Sending the Problem Report
- If you are using &man.send-pr.1;:
-
- Once you are done filling out the template, have saved it,
- and exit your editor, &man.send-pr.1; will prompt you with
- s)end, e)dit or a)bort?. You can then hit
- s to go ahead and submit the problem
- report, e to restart the editor and
- make further modifications, or a to
- abort. If you choose the latter, your problem report will
- remain on disk (&man.send-pr.1; will tell you the filename
- before it terminates), so you can edit it at your leisure, or
- maybe transfer it to a system with better net connectivity,
- before sending it with the to
- &man.send-pr.1;:
-
- &prompt.user; send-pr -f ~/my-problem-report
-
- This will read the specified file, validate the contents,
- strip comments and send it off.
-
If you are using the web form:Before you hit submit, you will need to
fill in a field containing text that is represented in image
form on the page. This unfortunate measure has had to be
adopted due to misuse by automated systems and a few misguided
individuals. It is a necessary evil that no one likes; please
do not ask us to remove it.Note that you are strongly advised to
save your work somewhere before hitting
submit. A common problem for users is to
have their web browser displaying a stale image from its
cache. If this happens to you, your submission will be
rejected and you may lose your work.
- If you are unable to view images for any reason, and are
- also unable to use &man.send-pr.1;, please accept our
+ If you are unable to view images for any reason,
+ please accept our
apologies for the inconvenience and email your problem report
to the bugbuster team at
freebsd-bugbusters@FreeBSD.org.Follow-upOnce the problem report has been filed, you will receive a
confirmation by email which will include the tracking number
that was assigned to your problem report and a URL you can use
to check its status. With a little luck, someone will take an
interest in your problem and try to address it, or, as the case
may be, explain why it is not a problem. You will be
automatically notified of any change of status, and you will
receive copies of any comments or patches someone may attach to
your problem report's audit trail.If someone requests additional information from you, or you
remember or discover something you did not mention in the
initial report, please submit a follow up. The number one
reason for a bug not getting fixed is lack of communication with
the originator.The easiest way is to use the comment option on the
individual PR's web page, which you can reach from the PR
search page.If the problem report remains open after the problem has
gone away, just add a comment
saying that the problem report can be closed, and, if
possible, explaining how or when the problem was fixed.Sometimes there is a delay of a week or two where the
problem report remains untouched, not assigned or commented on
by anyone. This can happen when there is an increased problem
report backlog or during a holiday season. When a problem
report has not received attention after several weeks, it is
worth finding a committer particularly interested in working on
it.There are a few ways to do so, ideally in the following
order, with a few days between attempting each communication
channel:Find the relevant &os; mailing list for the problem
report from the list
in the Handbook and send a message to that list
asking about assistance or comments on the problem
report.Join the relevant IRC channels.
A partial listing is here: .
Inform the people in that channel about the problem report
and ask for assistance. Be patient and stay in the channel
after posting, so that the people from different time zones
around the world have a chance to catch up.Find committers interested in the problem that was
reported. If the problem was in a particular tool, binary,
port, document, or source file, check the SVN
Repository. Locate the last few committers who
made substantive changes to the file, and try to reach them
via IRC or email. A list of committers
and their emails can be found in the Contributors
to &os; article.Remember that these people are volunteers, just like
maintainers and users, so they might not be immediately
available to assist with the problem report. Patience and
consistency in the follow-ups is highly advised and appreciated.
With enough care and effort dedicated to that follow-up process,
finding a committer to take care of the problem report is just a
matter of time.If There Are ProblemsIf you found an issue with the bug system, file a bug!
There is a category for exactly this purpose. If you are unable
to do so, contact the bug wranglers at
bugmeister@FreeBSD.org.Further ReadingThis is a list of resources relevant to the proper writing
and processing of problem reports. It is by no means
complete.How
to Report Bugs Effectively—an excellent essay
by Simon G. Tatham on composing useful (non-&os;-specific)
problem reports.Problem
Report Handling Guidelines—valuable insight
into how problem reports are handled by the &os;
developers.
Index: head/en_US.ISO8859-1/books/dev-model/book.xml
===================================================================
--- head/en_US.ISO8859-1/books/dev-model/book.xml (revision 46641)
+++ head/en_US.ISO8859-1/books/dev-model/book.xml (revision 46642)
@@ -1,2515 +1,2515 @@
%chapters;
]>
A project model for the FreeBSD ProjectNiklasSaers2002-2005Niklas Saers1.5October, 2014Remove mention of GNATS which is no longer
used by the project.1.4September, 2013Remove mention of CVS and CVSup which are no
longer used by the project.1.3October, 2012Remove hats held by specific people, these
are documented elsewhere.1.2April, 2005Update one year of changes, replace statistics with those of 20041.1July, 2004First update within the FreeBSD tree1.0December 4th, 2003Ready for commit to FreeBSD Documentation0.7April 7th, 2003Release for review by the Documentation team0.6March 1st, 2003Incorporated corrections noted by
interviewees and reviewers0.5February 1st, 2003Initial review by interviewees$FreeBSD$Foreword
Up until now, the FreeBSD project has released a number of
described techniques to do different parts of work. However,
a project model summarising how the project is structured is needed
because of the increasing amount of project members.
This goes hand-in-hand with Brooks' law that adding
another person to a late project will make it later
since it will increase the communication needs .
A project model
is a tool to reduce the communication needs.
This paper
will provide such a project model and is donated to the
FreeBSD Documentation project where it can evolve together with
the project so that it can at any point in time reflect the way
the project works. It is based on .
I would like to thank the following people for taking the time
to explain things that were unclear to me and for proofreading
the document.Andrey A. Chernov ache@freebsd.orgBruce A. Mah bmah@freebsd.orgDag-Erling Smørgrav des@freebsd.orgGiorgos Keramidaskeramida@freebsd.orgIngvil Hovig ingvil.hovig@skatteetaten.noJesper Holckjeh.inf@cbs.dkJohn Baldwin jhb@freebsd.orgJohn Polstra jdp@freebsd.orgKirk McKusick mckusick@freebsd.orgMark Linimon linimon@freebsd.orgMarleen DevosNiels Jørgenssennielsj@ruc.dkNik Clayton nik@freebsd.orgPoul-Henning Kamp phk@freebsd.orgSimon L. Nielsen simon@freebsd.orgOverview
A project model is a means to reduce the communications overhead in
a project. As shown by , increasing the
number of project participants increases the communication in the
project exponentionally. FreeBSD has during the past few years
increased both its mass of active users and committers, and the
communication in the project has risen accordingly. This project
model will serve to reduce this overhead by providing an up-to-date
description of the project.
During the Core elections in 2002, Mark Murray stated
I am opposed to a long rule-book, as that satisfies
lawyer-tendencies, and is counter to the technocentricity that
the project so badly needs..
This project model is not meant to be a tool to
justify creating impositions for developers, but as a tool to
facilitate coordination.
It is meant as a
description of the project, with an overview of how the different
processes are executed.
It is an introduction to how the FreeBSD
project works.
The FreeBSD project model will be described as of
July 1st, 2004. It is based on the Niels Jørgensen's paper
,
FreeBSD's official documents,
discussions on FreeBSD mailing lists and interviews with
developers.
After providing definitions of terms used, this document will outline
the organisational structure (including role descriptions and
communication lines),
discuss the methodology model and after presenting the
tools used for process control, it will present the defined
processes. Finally it will outline major sub-projects of the
FreeBSD project.
, Section 1.2 and 1.3
give the vision and the architectural guidelines for the
project. The vision is To produce the best UNIX-like
operating system package possible, with due respect to the
original software tools ideology as well as usability,
performance and stability. The architectural
guidelines help determine whether a problem that someone wants
to be solved is within the scope of the project
DefinitionsActivity
An activity is an element of work performed
during the course of a project .
It has an output and
leads towards an outcome.
Such an output can either be an input to another
activity or a part of the process' delivery.
Process
A process is a series of activities
that lead towards a particular outcome. A process can
consist of one or more sub-processes. An example of a process is software
design.
Hat
A hat is synonymous with role. A hat has
certain responsibilities in a process and for the process
outcome. The hat executes activities. It is well defined what
issues the hat should be contacted about by the project
members and people outside the project.
Outcome
An outcome is the final output of the process.
This is synonymous with deliverable, that is defined as
any measurable, tangible, verifiable outcome, result or
item that must be produced to complete a project or part of a
project. Often used more narrowly in reference to an external
deliverable, which is a deliverable that is subject to approval
by the project sponsor or customer by .
Examples of
outcomes are a piece of software, a decision made or a
report written.
FreeBSD
When saying FreeBSD we will mean the BSD
derivative UNIX-like operating system
FreeBSD, whereas when saying the FreeBSD
Project we will mean the project organisation.
Organisational structure
While no-one takes ownership of FreeBSD, the FreeBSD
organisation is divided into core, committers and contributors
and is part of the FreeBSD community that lives around it.
The FreeBSD Project's structure
Number of committers has been determined by going through
CVS logs from January 1st, 2004 to December 31st, 2004 and
contributors by going through the list of contributions and
problem reports.
The main resource in the FreeBSD community is its developers: the
committers and contributors. It is with their contributions that the
project can move forward. Regular developers are referred to as contributors.
As by January 1st, 2003, there are an estimated 5500
contributors on the project.
Committers are developers with the privilege of being able to
commit changes. These are usually the
most active developers who are willing to
spend their time not only integrating their own code but
integrating code submitted by the developers who
do not have this privilege. They are also the developers who elect
the core team, and they have access to closed discussions.
The project can be grouped into four distinct separate parts,
and most developers will focus their involvement in one
part of FreeBSD.
The four parts
are kernel development, userland development, ports and
documentation. When referring to the base system, both
kernel and userland is meant.
This split changes our triangle to look like this:
The FreeBSD Project's structure with committers in categories
Number of committers per area has been determined by going through
CVS logs from January 1st, 2004 to December 31st, 2004.
Note that many committers work in multiple
areas, making the total number higher than the real number
of committers. The total number of committers at that
time was 269.
Committers fall into three
groups: committers who are only concerned with one area of
the project (for instance file systems), committers who
are involved only with one sub-project
and committers who commit to different parts
of the code, including sub-projects.
Because some committers work on different parts, the total
number in the committers section of the triangle is higher than
in the above triangle.
The kernel is the main building block of FreeBSD. While
the userland applications are protected against faults in
other userland applications, the entire system is
vulnerable to errors in the kernel. This, combined with the
vast amount of dependencies in the kernel and that it is not easy to
see all the consequences of a kernel change, demands
developers with a relative full understanding of the
kernel. Multiple development efforts in the kernel also
requires a closer coordination than userland applications do.
The core utilities, known as userland, provide the interface that identifies
FreeBSD, both user interface, shared libraries and external interfaces to
connecting clients. Currently, 162 people are involved in userland
development and maintenance, many being maintainers for
their own part of the code.
Maintainership will
be discussed in the section.
Documentation is handled by
and includes all documents surrounding the
FreeBSD project, including the web pages. There were during 2004 101
people making commits to the FreeBSD Documentation Project.
Ports is the collection of meta-data that is needed to make
software packages build correctly on FreeBSD. An example of a port
is the port for the web-browser Mozilla. It contains
information about where to fetch the source, what patches to
apply and how, and how the package should be installed on the
system. This allows automated tools to fetch, build and
install the package. As of this writing, there are more than
12600 ports available.
Statistics are generated by counting the number of
entries in the file fetched by portsdb by April 1st, 2005.
portsdb is a part of the port sysutils/portupgrade.
, ranging
from web servers to games, programming languages and most of the
application types that are in use on modern computers.
Ports will be discussed further in the section
.
Methodology modelDevelopment model
There is no defined model for how people write code in
FreeBSD. However, Niels Jørgenssen has suggested a model of
how written code is integrated into the project.
Jørgenssen's model for change integration
The development release is the FreeBSD-CURRENT
("-CURRENT") branch and the production release
is the FreeBSD-STABLE branch ("-STABLE")
.
This is a model for one change, and shows that after
coding, developers seek community review and
try integrating it with their own systems. After integrating the change
into the development release, called FreeBSD-CURRENT, it is tested
by many users and developers in the FreeBSD community. After it
has gone through enough testing, it is merged into the production
release, called FreeBSD-STABLE. Unless each stage is finished
successfully, the developer needs to go back and make
modifications in the code and restart the process. To integrate a
change with either -CURRENT or -STABLE is called making a commit.
Jørgensen found that most FreeBSD developers work
individually, meaning that this model is used in parallel by
many developers on the different ongoing development efforts. A
developer can also be working on multiple changes, so that while
he is waiting for review or people to test one or more of his
changes, he may be writing another change.
As each commit represents an increment, this is a massively
incremental model. The commits are in fact so frequent that
during one year
The period from January 1st, 2004 to December 31st, 2004 was
examined to find this number.
, 85427 commits were made, making a daily average of 233
commits.
Within the code bracket in Jørgensen's
figure, each programmer has his own working style and follows his
own development models. The bracket could very well have been
called development as it includes requirements
gathering and analysis, system and detailed design,
implementation and verification. However, the only
output from these stages is the source code or system documentation.
From a stepwise model's perspective (such as the waterfall
model), the other brackets can be seen as further verification
and system integration. This system integration is also important
to see if a change is accepted by the community. Up until the
code is committed, the developer is free to choose how much to
communicate about it to the rest of the project. In order for
-CURRENT to work as a buffer (so that bright ideas that had some
undiscovered drawbacks can be backed out) the minimum time a
commit should be in -CURRENT before merging it to -STABLE is 3
days. Such a merge is referred to as an MFC (Merge From Current).
It is important to notice the word change. Most
commits do not contain radical new features, but are maintenance
updates.
The only exceptions from this model are security fixes and
changes to features that are deprecated in the -CURRENT branch.
In these cases, changes can be committed directly to the -STABLE branch.
In addition to many people working on the project, there are
many related projects to the FreeBSD Project. These are either
projects developing brand new features,
sub-projects or projects whose outcome is incorporated into
FreeBSD
For instance, the development of the Bluetooth stack started
as a sub-project until it was deemed stable enough to be
merged into the -CURRENT branch. Now it is a part of the core
FreeBSD system.
.
These projects fit into the FreeBSD Project just like regular
development efforts: they produce code that is integrated with
the FreeBSD Project. However, some of them (like Ports and
Documentation) have the privilege of being applicable to both
branches or commit directly to both -CURRENT and -STABLE.
There is no standards to how design should be done, nor is
design collected in a centralised repository.
The main design is that of 4.4BSD.
According to Kirk McKusick, after 20 years of developing
UNIX operating systems, the interfaces are for the most part
figured out. There is therefore no need for much
design. However, new applications of the system and new hardware leads to
some implementations being more beneficial than those that
used to be preferred. One example is the introduction of web
browsing that made the normal TCP/IP connection a short
burst of data rather than a steady stream over a longer
period of time.
As design is a part of the Code bracket in
Jørgenssen's model, it is up to every developer or
sub-project how this should be done.
Even if the design should be stored in a central repository,
the output from the design stages would be of limited use as
the differences of methodologies would make them poorly if at
all interoperable. For the overall design of the project, the
project relies on the sub-projects to negotiate fit interfaces
between each other rather than to dictate interfacing.
Release branches
The releases of FreeBSD is best illustrated by a tree with many
branches where each major branch represents a major
version. Minor versions are represented by branches of the
major branches.
In the following release tree, arrows that follow one-another
in a particular direction
represent a branch. Boxes with full lines and diamonds represent official
releases. Boxes with dotted lines represent the development
branch at that time. Security branches are represented by ovals.
Diamonds differ from boxes in that they
represent a fork, meaning a place where a branch splits into two
branches where one of the branches becomes a sub-branch.
For example,
at 4.0-RELEASE the 4.0-CURRENT branch split into 4-STABLE and
5.0-CURRENT. At 4.5-RELEASE, the branch forked off a security
branch called RELENG_4_5.
The FreeBSD release tree
The latest -CURRENT version
is always referred to as -CURRENT, while the latest -STABLE
release is always referred to as -STABLE. In this figure,
-STABLE refers to 4-STABLE while -CURRENT refers to
5.0-CURRENT following 5.0-RELEASE.
A major release is always made from the -CURRENT branch.
However, the -CURRENT branch does not need to fork at that point in time,
but can focus on stabilising. An example of this is that following
3.0-RELEASE, 3.1-RELEASE was also a continuation of the
-CURRENT-branch, and -CURRENT did not become a true development
branch until this version was released and the 3-STABLE branch
was forked. When
-CURRENT returns to becoming a development branch, it can only be
followed by a major release. 5-STABLE is predicted to be forked
off 5.0-CURRENT at around 5.3-RELEASE. It is not until
5-STABLE is forked that the development branch will be branded 6.0-CURRENT.
A minor release is made from the -CURRENT branch
following a major release, or from the -STABLE branch.
Following and including, 4.3-RELEASE
The first release this actually happened for was 4.5-RELEASE,
but security branches were at the same time created for
4.3-RELEASE and 4.4-RELEASE.
, when a minor release has been made, it becomes a security
branch. This is meant for organisations that do not want
to follow the -STABLE branch and the potential new/changed features it
offers, but instead require an absolutely stable environment, only
updating to implement security updates.
There is a terminology
overlap with respect to the word "stable", which leads to some
confusion. The -STABLE branch is still a
development branch, whose goal is to be
useful for most people.
If it is never acceptable for a system to get changes that
are not announced at the time it is deployed,
that system should run a security branch.
Each update to a security branch
is called a patchlevel. For every security
enhancement that is done, the patchlevel number is increased,
making it easy for people tracking the branch to see what
security enhancements they have implemented. In cases where there
have been especially serious security flaws, an entire new release
can be made from a security branch. An example of this is
4.6.2-RELEASE.
Model summary
To summarise, the development model of FreeBSD can be seen as
the following tree:
The overall development model
The tree of the FreeBSD development with ongoing development
efforts and continuous integration.
The tree symbolises the release versions with major versions
spawning new main branches and minor versions being versions of
the main branch. The top branch is the -CURRENT branch where all
new development is integrated, and the -STABLE branch is the
branch directly below it.
Clouds of development efforts hang over the project
where developers use the development models they see fit. The
product of their work is then integrated into -CURRENT where it
undergoes parallel debugging and is finally merged from -CURRENT into
-STABLE. Security fixes are merged from -STABLE to the security branches.
Hats
Many committers have a special area of responsibility. These
roles are called hats.
These hats can
be either project roles, such as public relations officer, or
maintainer for a certain area of the
code. Because this is a project where people give voluntarily of
their spare time, people with assigned hats are not always
available. They must therefore appoint a deputy that can perform
the hat's role in his or her absence. The other option is to have
the role held by a group.
Many of these hats are not formalised. Formalised hats have a
charter stating the exact purpose of the hat along with its
privileges and responsibilities. The writing of such charters is
a new part of the project, and has thus yet to be completed for
all hats. These hat descriptions are not such a formalisation,
rather a summary of the role with links to the charter where
available and contact addresses.
General HatsContributor
A Contributor contributes to the FreeBSD project either as a
developer, as an author, by sending problem reports, or in
other ways contributing to the progress of the project. A
contributor has no special privileges in the FreeBSD project.
Committer
A person who has the required privileges to add his code or documentation to the
repository.
A committer has made a commit within the past 12 months.
An active committer is a committer
who has made an average of one commit per month during that time.
It is worth noting that there are no technical barriers to prevent
someone, once having gained commit privileges to the main- or a sub-project, to make commits in
parts of that project's source the committer did not specifically get
permission to modify. However, when wanting to make
modifications to parts a committer has not been involved in
before, he/she should read the logs to see what has happened
in this area before, and also read the MAINTAINER file to see if
the maintainer of this part has any special requests on how
changes in the code should be made
Core Team
The core team is elected by the committers from the pool of committers
and serves as the board of directors of the FreeBSD project. It
promotes active contributors to committers, assigns people to
well-defined hats, and is the final arbiter of decisions involving
which way the project should be heading.
As by July 1st, 2004, core consisted of 9 members.
Elections are held every two years.
Maintainership
Maintainership means that that person is responsible for
what is allowed to go into that area of the code and has the
final say should disagreements over the code occur. This
involves proactive work aimed at stimulating
contributions and reactive work in reviewing commits.
With the FreeBSD
source comes the MAINTAINERS file that contains a one-line
summary of how each maintainer would like contributions to be
made. Having this notice and contact information
enables developers to focus on the development effort rather
than being stuck in a slow correspondence should the maintainer
be unavailable for some time.
If the maintainer is unavailable for an unreasonably long period
of time, and other people do a significant amount of work,
maintainership may be switched without the maintainer's approval.
This is based on the stance that maintainership should be
demonstrated, not declared.
Maintainership of a particular piece of code is a hat that
is not held as a group.
Official Hats
The official hats in the FreeBSD Project are hats that are more
or less formalised and mainly administrative roles. They have
the authority and responsibility for their area. The following
illustration shows the responsibility lines. After this follows
a description of each hat, including who it is held by.
Overview of official hats
All boxes consist of groups of committers, except for the
dotted boxes where the holders are not necessarily committers. The
flattened circles are sub-projects and consist of both
committers and non-committers of the main project.
Documentation project manager
architect is responsible for
defining and following up documentation goals for the
committers in the Documentation project.
Hat held by:
The DocEng team doceng@FreeBSD.org.
The
DocEng Charter.
Postmaster
The Postmaster is responsible for mail being correctly
delivered to the committers' email address. He is also
responsible for ensuring that the mailing lists work and
should take measures against possible disruptions of mail
such as having troll-, spam- and virus-filters.
Hat currently held by:
the Postmaster Team postmaster@FreeBSD.org.
Release Coordination
The responsibilities of the Release Engineering Team are
Setting, publishing and following a release schedule for
official releases
Documenting and formalising release engineering procedures
Creation and maintenance of code branches
Coordinating with the Ports and Documentation teams
to have an updated set of packages and documentation
released with the new releases
Coordinating with the Security team so that pending
releases are not affected by recently disclosed vulnerabilities.
Further information about the development process is
available in the section.
Hat held by:
the Release Engineering team re@FreeBSD.org.
The
Release Engineering Charter.
Public Relations & Corporate Liaison
The Public Relations & Corporate Liaison's
responsibilities are:
Making press statements when happenings that are
important to the FreeBSD Project happen.
Being the official contact person for corporations that
are working close with the FreeBSD Project.
Take steps to promote FreeBSD within both the Open Source
community and the corporate world.
Handle the freebsd-advocacy mailing list.
This hat is currently not occupied.
Security Officer
The Security Officer's main responsibility is to
coordinate information exchange with others in the
security community and in the FreeBSD project.
The Security Officer is also responsible for taking action
when security problems are reported and promoting proactive
development behaviour when it comes to security.
Because of the fear that information about
vulnerabilities may leak out to people with malicious
intent before a patch is available, only the Security
Officer, consisting of an officer, a deputy and two
members, receive sensitive
information about security issues. However, to create or
implement a patch, the Security Officer has the Security
Officer Team security-team@FreeBSD.org to
help do the work.
Source Repository Manager
The Source Repository Manager is the only one who is allowed
to directly modify the repository without using the
tool.
It is his/her
responsibility to ensure that technical problems that arise in the
repository are resolved quickly. The source repository
manager has the authority to back out commits if this is
necessary to resolve a SVN technical problem.
Hat held by:
the Source Repository Manager clusteradm@FreeBSD.org.
Election Manager
The Election Manager is responsible for the
process. The manager
is responsible for running and maintaining the election
system, and is the final authority should minor unforeseen
events happen in the election process. Major unforeseen
events have to be discussed with the
Hat held only during elections.
Web site Management
The Web site Management hat is responsible for coordinating
the rollout of updated web pages on mirrors around the world,
for the overall structure of the primary web site and the
system it is running upon. The management needs to
coordinate the content with
and acts as
maintainer for the www tree.
Hat held by:
the FreeBSD Webmasters www@FreeBSD.org.
Ports Manager
The Ports Manager acts as a liaison between
and the core project, and
all requests from the project should go to the ports manager.
Hat held by:
the Ports Management Team portmgr@FreeBSD.org.
The
Portmgr charter.
Standards
The Standards hat is responsible for ensuring that FreeBSD
complies with the standards it is committed to , keeping up to date
on the development of these standards and notifying
FreeBSD developers of important changes that allows them to take a
proactive role and decrease the time between a standards
update and FreeBSD's compliancy.
Hat currently held by:
Garrett Wollman wollman@FreeBSD.org.
Core Secretary
The Core Secretary's main responsibility is to write drafts to
and publish the final Core Reports. The secretary also keeps
the core agenda, thus ensuring that no balls are dropped
unresolved.
Hat currently held by: &a.matthew.email;.
Bugmeister
The Bugmeister is responsible for ensuring that the
maintenance database is in working order, that the entries
are correctly categorised and that there are no invalid entries.
Hat currently held by:
the Bugmeister Team bugmeister@FreeBSD.org.
Donations Liaison Officer
The task of
the donations liaison officer is to match
the developers with needs with people or
organisations willing to make a
donation. The Donations Liaison Charter is
available
here
Hat held by:
the Donations Liaison Office donations@FreeBSD.org.
Admin
(Also called FreeBSD Cluster Admin)
The admin team consists of the
people responsible for administrating the
computers that the project relies on for
its distributed work and communication to
be synchronised. It consists mainly of those
people who have physical access to the
servers.
Hat held by:
the Admin team admin@FreeBSD.org.
Process dependent hatsReport originator
The person originally responsible for
filing a Problem Report.
Bugbuster
A person who will either find the right
person to solve the problem, or close the PR if
it is a duplicate or otherwise
not an interesting one.
Mentor
A mentor is a committer who takes it upon him/her to
introduce a new committer to the project, both in terms of
ensuring the new committers setup is valid,
that the new committer knows the available tools required in
his/her work and that the
new committer knows what is expected of him/her in terms of
behaviour.
Vendor
The person(s) or organisation whom
external code comes from and whom patches are sent to.
Reviewers
People on the mailing list where the request
for review is posted.
Processes
The following section will describe the defined project
processes. Issues that are not handled by these processes happen
on an ad-hoc basis based on what has been customary to do in
similar cases.
Adding new and removing old committers
The Core team has the responsibility of giving and removing
commit privileges to contributors. This can only be done
through a vote on the core mailing list.
The ports and documentation sub-projects can give commit
privileges to people working on these projects, but have to
date not removed such privileges.
Normally a contributor is recommended to core by a
committer. For contributors or outsiders to contact
core asking to be a committer is not well thought of
and is usually rejected.
If the area of particular interest for the developer
potentially overlaps with other committers' area of
maintainership, the opinion of those maintainers is
sought. However, it is frequently this committer that
recommends the developer.
When a contributor is given committer status, he is
assigned a mentor. The committer who recommended the
new committer will, in the general case, take it upon
himself to be the new committers mentor.
When a contributor is given his commit bit, a -signed email is sent
from either ,
or nik@freebsd.org to both
admins@freebsd.org, the assigned mentor, the new committer and
core confirming the approval of a new account. The mentor then
gathers a password line, public key and PGP key from the
new committer and sends them to . When the new account is created, the
mentor activates the commit bit and guides the new committer
through the rest of the initial process.
Process summary: adding a new committer
When a contributor sends a piece of code, the receiving
committer may choose to recommend that the contributor is
given commit privileges. If he recommends this to core,
they will vote on this recommendation. If they vote in
favour, a mentor is assigned the new committer and the new
committer has to email his details to the administrators
for an account to be created. After this, the new
committer is all set to make his first commit. By
tradition, this is by adding his name to the committers list.
Recall that a committer is considered to be someone who
has committed code during the past 12
months. However, it is not until after 18 months of inactivity
have passed
that commit privileges are eligible to be revoked.
There are, however, no
automatic procedures for doing this.
For reactions concerning commit privileges not triggered by
time, see section 1.5.8.
Process summary: removing a committer
When Core decides to clean up the committers list, they
check who has not made a commit for the past 18 months.
Committers who have not done so have their commit
bits revoked.
It is also possible for committers to request that their commit
bit be retired if for some reason they are no longer going
to be actively committing to the project. In this case, it can also
be restored at a later time by core, should the committer ask.
Roles in this process:
Committing code
The committing of new or modified code is one of the most
frequent processes in the FreeBSD project and will usually
happen many times a day. Committing of code can only be done
by a committer. Committers commit either code
written by themselves, code submitted to them or code
submitted through a problem
report.
When code is written by the developer that is non-trivial, he
should seek a code review from the community. This
is done by sending mail to the relevant list asking for
review. Before submitting the code for review, he should
ensure it compiles correctly with the entire tree and that all
relevant tests run. This is called pre-commit
test. When contributed code is received, it should be
reviewed by the committer and tested the same way.
When a change is committed to a part of the source that
has been contributed from an outside
,
the maintainer should
ensure that the patch is contributed back to the
vendor. This is in line with the open source
philosophy and
makes it easier to stay in sync with outside projects
as the patches do not have to be reapplied every time a
new release is made.
After the code has been available for review and no further
changes are necessary, the code is committed into the
development branch, -CURRENT.
If the change applies for
the -STABLE branch or the other branches as well, a
Merge From Current ("MFC") countdown is
set by the committer. After the number of days the
committer chose when setting the MFC have passed, an email
will automatically be
sent to the committer reminding him to commit it to the -STABLE
branch (and possibly security branches as well). Only security
critical changes should be merged to security branches.
Delaying the commit to -STABLE and other branches allows for
parallel debugging where the committed code is
tested on a wide range of configurations. This makes changes
to -STABLE to contain fewer faults and thus giving the branch
its name.
Process summary: A committer commits code
When a committer has written a piece of code and
wants to commit it, he first needs to determine if it is
trivial enough to go in without prior review or if it should
first be reviewed by the developer community. If the code is
trivial or has been reviewed and the committer is not the
maintainer, he should consult the maintainer before
proceeding.
If the code is contributed by an outside vendor, the
maintainer should create a patch that is sent back to the
vendor. The code is then committed and the deployed by
the users. Should they find problems with the code, this
will be reported and the committer can go back to writing
a patch. If a vendor is affected, he can choose to
implement or ignore the patch.
Process summary: A contributor commits code
The difference when a contributor makes a code contribution is
- that he submits the code through the send-pr
- program. This report is picked up by the maintainer who
+ that he submits the code through the Bugzilla
+ interface. This report is picked up by the maintainer who
reviews the code and commits it.
Hats included in this process are:
Core election
Core elections are held at least every two years.
The first Core election was held September 2000
Nine core members are elected. New elections are held if
the number of core members drops below seven. New elections can
also be held should at least 1/3 of the active committers demand this.
When an election is to take place, core announces this at
least 6 weeks in advance, and appoints an election manager to
run the elections.
Only committers can be elected into core. The candidates need
to submit their candidacy at least one week before the
election starts, but can refine their statements until the
voting starts. They are
presented in the candidates
list. When writing their election statements, the candidates
must answer a few standard questions submitted by the election manager.
During elections, the rule that a committer must have
committed during the 12 past months is followed strictly.
Only these committers are eligible to vote.
When voting, the committer may vote once in support of up to
nine nominees. The voting is done over a period of four weeks
with reminders being posted on developers
mailing list that is available to all committers.
The election results are released one week after the election
ends, and the new core team takes office one week after the
results have been posted.
Should there be a voting tie, this will be resolved by
the new, unambiguously elected core members.
Votes and candidate statements are archived, but the archives
are not publicly available.
Process summary: Core elections
Core announces the election and selects an election
manager. He prepares the elections, and when ready,
candidates can announce their candidacies through
submitting their statements. The committers then vote.
After the vote is over, the election results are
announced and the new core team takes office.
Hats in core elections are:
Development of new features
Within the project there are sub-projects that are working on
new features. These projects are generally done by one person
.
Every project is free to
organise development as it sees fit. However, when the project
is merged to the -CURRENT branch it must follow the project
guidelines. When the code has been well tested in the
-CURRENT branch and deemed stable enough and relevant
to the -STABLE branch, it is merged to the -STABLE branch.
The requirements of the project are given by developer
wishes, requests from the community in terms of direct
requests by mail, Problem Reports, commercial funding for the development
of features, or contributions by the scientific community.
The wishes that come within the responsibility of a developer
are given to that developer who prioritises his time between
the request and his wishes. A common way to do this is maintain
a TODO-list maintained by the project. Items that do not come within
someone's responsibility are collected on TODO-lists unless someone
volunteers to take the responsibility. All
requests, their distribution and follow-up are
handled by the tool.
Requirements analysis happens in two ways. The requests that
come in are discussed on mailing lists, both within the main
project and in the sub-project that the request belongs to or is
spawned by the request. Furthermore, individual developers on
the sub-project will evaluate the feasibility of the requests
and determine the prioritisation between them. Other than archives
of the discussions that have taken place, no outcome is created
by this phase that is merged into the main project.
As the requests are prioritised by the individual developers on
the basis of doing what they find interesting, necessary or are
funded to do, there is no overall strategy or prioritisation of
what requests to regard as requirements and following up their
correct implementation. However, most developers have some
shared vision of what issues are more important, and they can
ask for guidelines from the release engineering team.
The verification phase of the project is two-fold. Before
committing code to the current-branch, developers request their
code to be reviewed by their peers. This review is for the most
part done by functional testing, but also code review is
important. When the code is committed to the branch, a broader
functional testing will happen, that may trigger further code
review and debugging should the code not behave as
expected. This second verification form may be regarded as
structural verification.
Although the sub-projects themselves may write formal
tests such as unit tests, these are usually not collected by the main
project and are usually removed before the code is committed to
the current branch.
More and more tests are however performed when
building the system (make
world). These tests are however a very new
addition and no systematic framework for these
tests have yet been created.
Maintenance
It is an advantage to the project to for each area of the source
have at least one person that knows this area well.
Some parts of the code have designated
maintainers. Others have de-facto maintainers, and some
parts of the system do not have
maintainers.
The maintainer is usually a person from the sub-project that
wrote and integrated the code, or someone who has ported it from
the platform it was written for.
sendmail and named are examples of code that has been merged
from other platforms.
The maintainer's job is to make sure the code is in sync with the
project the code comes from if it is contributed code, and apply patches
submitted by the community or write fixes to issues that are
discovered.
The main bulk of work that is put into the FreeBSD project is
maintenance.
has made a figure
showing the life cycle of changes.
Jørgenssen's model for change integration
Here development release refers to the -CURRENT
branch while production release refers to the
-STABLE branch. The pre-commit test is the
functional testing by peer developers when asked to do so or
trying out the code to determine the status of the sub-project.
Parallel debugging is the functional testing
that can trigger more review, and debugging when the code is
included in the -CURRENT branch.
As of this writing, there were 269 committers in the
project. When they commit a change to a branch, that constitutes
a new release. It is very common for users in the community to
track a particular branch. The immediate existence of a new
release makes the changes widely available right away and allows
for rapid feedback from the community. This also gives the
community the response time they expect on issues that are of
importance to them. This makes the community more engaged, and
thus allows for more and better feedback that again spurs more
maintenance and ultimately should create a better product.
Before making changes to code in parts of the tree
that has a history unknown to the committer, the
committer is required to read the commit logs to see why
certain features are implemented the way they are in
order not to make mistakes that have previously either been
thought through or resolved.
Problem reporting
Before &os; 10, &os; included a problem reporting tool called
send-pr. Problems include bug reports,
feature requests, feature enhancements and notices of new versions
of external software that are included in the project.
Although send-pr is available, users and developers are encouraged
to submit issues using our
problem report form.
Problem reports are sent to an email address where it
is inserted into the Problem Reports maintenance database. A
classifies the problem and sends it to the
correct group or maintainer within the project. After someone
has taken responsibility for the report, the report is being
analysed. This analysis includes verifying the problem and
thinking out a solution for the problem. Often feedback is
required from the report originator or even from the FreeBSD
community. Once a patch for the problem is made, the
originator may be asked to try it out. Finally, the working patch
is integrated into the project, and documented if
applicable. It there goes through the regular maintenance
cycle as described in section .
These are the states a problem report can be in:
open, analyzed, feedback, patched, suspended and closed. The
suspended state is for when further progress is not possible
due to the lack of information or for when the task would require
so much work that nobody is working on it at the moment.
Process summary: problem reporting
A problem is reported by the report originator. It is
then classified by a bugbuster and handed to the correct
maintainer. He verifies the problem and discusses the
problem with the originator until he has enough
information to create a working patch. This patch is then
committed and the problem report is closed.
The roles included in this process are:
.
Reacting to misbehaviour has a
number of rules that committers should follow. However, it
happens that these rules are broken. The following rules exist
in order to be able to react to misbehaviour. They specify what
actions will result in how long a suspension the committer's
commit privileges.
Committing during code freezes without the approval of the
Release Engineering team - 2 days
Committing to a security branch without approval - 2 days
Commit wars - 5 days to all participating parties
Impolite or inappropriate behaviour - 5 days
For the suspensions to be efficient, any single core member can
implement a suspension before discussing it on the core
mailing list. Repeat offenders can, with a 2/3 vote by core,
receive harsher penalties, including permanent removal of
commit privileges. (However, the latter is always viewed as a last
resort, due to its inherent tendency to create controversy). All
suspensions are posted to the
developers
mailing list, a list available to committers only.
It is important that you cannot be suspended for making
technical errors. All penalties come from breaking social etiquette.
Hats involved in this process:
Release engineering
The FreeBSD project has a Release Engineering team with a
principal release engineer that is responsible for creating releases
of FreeBSD that can be brought out to the user community via the
net or sold in retail outlets. Since FreeBSD is available on multiple
platforms and releases for the different architectures are made
available at the same time, the team has one person in charge of
each architecture. Also, there are roles in the team responsible
for coordinating quality assurance efforts, building a package
set and for having an updated set of documents.
When referring to the release engineer,
a representative for the release engineering team is
meant.
When a release is coming, the FreeBSD project changes shape
somewhat. A release schedule is made containing feature- and
code-freezes, release of interim releases and the final
release. A feature-freeze means no new features are allowed to
be committed to the branch without the release engineers'
explicit consent. Code-freeze means no changes to the code (like
bugs-fixes) are allowed to be committed without the release
engineers explicit consent. This feature- and code-freeze is
known as stabilising. During the release process, the release
engineer has the full authority to revert to older versions of
code and thus "back out" changes should he find that the changes
are not suitable to be included in the release.
There are three different kinds of releases:
.0 releases are the first release of a major
version. These are branched of the -CURRENT branch
and have a significantly longer release engineering
cycle due to the unstable nature of the -CURRENT branch
.X releases are releases of the -STABLE
branch. They are scheduled to come out every 4 months.
.X.Y releases are security releases that follow
the .X branch. These come out only when sufficient
security fixes have been merged since the last
release on that branch. New features are rarely
included, and the security team is far more
involved in these than in regular releases.
For releases of the -STABLE-branch, the release process starts 45
days before the anticipated
release date. During the first phase, the first 15 days, the
developers merge what changes they have had in -CURRENT
that they want to have in the release to the release
branch. When this period is over, the code enters a 15
day code freeze in which only bug fixes, documentation updates,
security-related fixes and minor device driver changes are
allowed. These changes must be approved by the release engineer
in advance. At the beginning of the last 15 day period a release
candidate is created for widespread testing. Updates are less
likely to be allowed during this period, except for important
bug fixes and security updates. In this final period, all
releases are considered release candidates. At the end of the
release process, a release is created with the new version
number, including binary distributions on web sites and the
creation of a CD-ROM images. However, the release is not
considered "really released" until a -signed message stating
exactly that, is sent to the mailing list freebsd-announce; anything
labelled as a "release" before that may well be in-process and
subject to change before the PGP-signed message is sent.
Many commercial vendors use these images to create
CD-ROMs that are sold in retail outlets.
.
The releases of the -CURRENT-branch (that is, all releases that
end with .0) are very similar, but with twice as
long timeframe. It starts 8 weeks prior to the release with
announcement of the release time line. Two weeks into the
release process, the feature freeze is initiated and performance
tweaks should be kept to a minimum. Four weeks prior to the
release, an official beta version is made available. Two weeks
prior to release, the code is officially branched into a new
version. This version is given release candidate status, and as
with the release engineering of -STABLE, the code freeze of the
release candidate is
hardened. However, development on the main development branch
can continue. Other than these differences, the release
engineering processes are alike.
.0 releases go into their own branch and are aimed
mainly at early adopters. The branch then goes through a period
of stabilisation, and it is not until the
decides the demands to stability have been satisfied that
the branch becomes -STABLE and -CURRENT targets the next major
version. While this for the majority has been with .1 versions,
this is not a demand.
Most releases are made when a given date that has been deemed a
long enough time since the previous release comes. A target is
set for having major releases every 18 months and minor
releases every 4 months.
The user community has made it very clear that security and
stability cannot be sacrificed by self-imposed deadlines and
target release dates.
For slips of time not to become too long with regards to security
and stability issues,
extra discipline is required when committing changes to -STABLE.
Process summary: release engineering
These are the stages in the release engineering
process. Multiple release candidates may be created until
the release is deemed stable enough to be released.
Tools
The major support tools for supporting the development process are
Perforce, Bugzilla, Mailman, and OpenSSH. These are externally
developed tools and are commonly used in the open source world.
Subversion (SVN)Subversion (SVN)
is a system to handle multiple versions of text files and
tracking who committed what changes and why. A project lives
within a repository and different versions are
considered different branches.
Bugzilla
Bugzilla is a maintenance database consisting of a set of tools to track bugs at a
central site. It supports the bug tracking process for sending
and handling bugs as well as querying and updating the database
- and editing bug reports. The project uses one of its many client
- interfaces, send-pr, to send
- Problem Reports by email to the
+ and editing bug reports. The project uses its
+ web interface to send
+ Problem Reports to the
projects central Bugzilla server. The committers also have web and
command-line clients.
Mailman
Mailman is a program that automates the
management of mailing lists. The FreeBSD Project uses it to run
16 general lists, 60 technical lists, 4 limited lists and 5 lists
with CVS commit logs. It is
also used for many mailing lists set up and used by other people
and projects in the FreeBSD community. General lists are lists
for the general public, technical lists are mainly for the
development of specific areas of interest, and closed lists
are for internal communication not intended for the general
public. The majority of all the communication in the project goes
through these 85 lists
, Appendix C.
Perforce
Perforce is a commercial software configuration management
system developed by Perforce
Systems that is available on over 50 operating systems. It
is a collection of clients built around the Perforce server
that contains the central file repository and
tracks the operations done upon it. The clients are both
clients for accessing the repository and administration of
its configuration.
Pretty Good Privacy
Pretty Good Privacy, better known as PGP, is a cryptosystem
using a public key architecture to allow people to digitally
sign and/or encrypt information in order to ensure secure
communication between two parties. A signature is used when
sending information out many recipients, enabling them to verify
that the information has not been tampered with before they
received it. In the FreeBSD Project this is the primary means of
ensuring that information has been written by the person who
claims to have written it, and not altered in transit.
Secure Shell
Secure Shell is a standard for securely logging into a remote system
and for executing commands on the remote system. It allows
other connections, called tunnels, to be established and
protected between the two involved systems. This standard
exists in two primary versions, and only version two is used
for the FreeBSD Project. The most common implementation of the
standard is OpenSSH that is a part of the project's main distribution.
Since its source is updated more often than FreeBSD releases,
the latest version is also available in the ports tree.
Sub-projects
Sub-projects are formed to reduce the amount of communication
needed to coordinate the group of developers. When a problem
area is sufficiently isolated, most communication would be
within the group focusing on the problem, requiring less
communication with the groups they communicate with than were
the group not isolated.
The Ports Subproject
A port is a set of meta-data and patches that
are needed to fetch, compile and install correctly an external piece of
software on a FreeBSD system. The amount of ports have grown
at a tremendous rate, as shown by the following figure.
Number of ports added between 1996 and 2005 is taken from
the FreeBSD web site. It shows the number of ports
available to FreeBSD in the period 1995 to 2005. It looks
like the curve has first grown exponentionally, and then
since the middle of 2001 grown linearly.
As the external software described by the port often is under
continued development, the amount of work required to maintain
the ports is already large, and increasing. This has led to
the ports part of the FreeBSD project gaining a more empowered
structure, and is more and more becoming a sub-project of the
FreeBSD project.
Ports has its own core team with the
as its leader, and this
team can appoint committers without FreeBSD Core's
approval. Unlike in the FreeBSD Project, where a lot of maintenance
frequently is rewarded with a commit bit, the ports sub-project
contains many active maintainers that are not committers.
Unlike the main project, the ports tree is not branched. Every
release of FreeBSD follows the current ports collection and has thus
available updated information on where to find programs and
how to build them. This, however, means that a port that makes
dependencies on the system may need to have variations
depending on what version of FreeBSD it runs on.
With an unbranched ports repository
it is not possible to guarantee that any port
will run on anything other than -CURRENT and -STABLE, in
particular older, minor releases. There is neither the infrastructure
nor volunteer time needed to guarantee this.
For efficiency of communication, teams depending on Ports,
such as the release engineering team, have their own ports liaisons.
The FreeBSD Documentation Project
The FreeBSD Documentation project was started January 1995. From
the initial group of a project leader, four team leaders and 16
members, they are now a total of 44 committers. The
documentation mailing list has just under 300 members,
indicating that there is quite a large community around it.
The goal of the Documentation project is to provide good and
useful documentation of the FreeBSD project, thus making it
easier for new users to get familiar with the system and
detailing advanced features for the users.
The main tasks in the Documentation project are to work on
current projects in the FreeBSD Documentation Set,
and translate the documentation to other languages.
Like the FreeBSD Project, documentation is split in the same
branches. This is done so that there is always an updated
version of the documentation for each version. Only
documentation errors are corrected in the security branches.
Like the ports sub-project, the Documentation project can
appoint documentation committers without FreeBSD Core's approval.
.
The Documentation project has a primer. This is used both to
introduce new project members to the standard tools and
syntaxes and acts as a reference when working on the project.
ReferencesFrederick P.Brooks19751995Pearson Education Limited0201835959Addison-Wesley Pub CoThe Mythical Man-MonthEssays on Software Engineering, Anniversary Edition (2nd Edition)NiklasSaers2003A project model for the FreeBSD ProjectCandidatus Scientiarum thesishttp://niklas.saers.com/thesisNielsJørgensen2001Putting it All in the TrunkIncremental Software Development in the FreeBSD Open Source Projecthttp://www.dat.ruc.dk/~nielsj/research/papers/freebsd.pdfProject Management Institute19962000Project Management Institute1-880410-23-0Project Management InstituteNewtown SquarePennsylvaniaUSAPMBOK GuideA Guide to the Project Management Body of Knowledge,
2000 Edition2002The FreeBSD ProjectCore Bylawshttp://www.freebsd.org/internal/bylaws.html2002The FreeBSD Documentation ProjectFreeBSD Developer's Handbookhttp://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/2002The FreeBSD ProjectCore team election 2002http://election.uk.freebsd.org/candidates.htmlDag-ErlingSmørgravHitenPandya2002The FreeBSD Documentation ProjectThe FreeBSD Documentation ProjectProblem Report Handling Guidelineshttp://www.freebsd.org/doc/en/articles/pr-guidelines/article.htmlDag-ErlingSmørgrav2002The FreeBSD Documentation ProjectThe FreeBSD Documentation ProjectWriting FreeBSD Problem Reportshttp://www.freebsd.org/doc/en/articles/problem-reports/article.html2001The FreeBSD Documentation ProjectThe FreeBSD Documentation ProjectCommitters Guidehttp://www.freebsd.org/doc/en/articles/committers-guide/article.htmlMurrayStokely2002The FreeBSD Documentation ProjectThe FreeBSD Documentation ProjectFreeBSD Release Engineeringhttp://www.freebsd.org/doc/en_US.ISO8859-1/articles/releng/article.htmlThe FreeBSD Documentation ProjectFreeBSD Handbookhttp://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook2002The FreeBSD Documentation ProjectThe FreeBSD Documentation ProjectContributors to FreeBSDhttp://www.freebsd.org/doc/en_US.ISO8859-1/articles/contributors/article.html2002The FreeBSD ProjectThe FreeBSD ProjectCore team elections 2002http://election.uk.freebsd.org2002The FreeBSD ProjectThe FreeBSD ProjectCommit Bit Expiration Policy2002/04/06 15:35:30http://www.freebsd.org/internal/expire-bits.html2002The FreeBSD ProjectThe FreeBSD ProjectNew Account Creation Procedure2002/08/19 17:11:27http://www.freebsd.org/internal/new-account.html2002The FreeBSD Documentation ProjectThe FreeBSD Documentation ProjectFreeBSD DocEng Team Charter2003/03/16 12:17http://www.freebsd.org/internal/doceng.htmlGregLehey2002Greg LeheyGreg LeheyTwo years in the trenchesThe evolution of a software projecthttp://www.lemis.com/grog/In-the-trenches.pdf
Index: head/en_US.ISO8859-1/books/fdp-primer/overview/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/fdp-primer/overview/chapter.xml (revision 46641)
+++ head/en_US.ISO8859-1/books/fdp-primer/overview/chapter.xml (revision 46642)
@@ -1,255 +1,255 @@
OverviewWelcome to the &os; Documentation Project
(FDP). Quality documentation is crucial
to the success of &os;, and we value your contributions very
highly.This document describes how the FDP is
organized, how to write and submit documentation, and how to
effectively use the available tools.Everyone is welcome to contribute to the
FDP. Willingness to contribute is the only
membership requirement.This primer shows how to:Identify which parts of &os; are maintained by the
FDP.Install the required documentation tools and files.Make changes to the documentation.Submit changes back for review and inclusion in the &os;
documentation.The &os; Documentation SetThe FDP is responsible for four
categories of &os; documentation.Handbook: The Handbook is the
comprehensive online resource and reference for &os;
users.FAQ: The FAQ
uses a short question and answer format to address questions
that are frequently asked on the various mailing lists and
forums devoted to &os;. This format does not permit long
and comprehensive answers.Manual pages: The English language
system manual pages are usually not written by the
FDP, as they are part of the base system.
However, the FDP can reword parts of
existing manual pages to make them clearer or to correct
inaccuracies.Web site: This is the main &os;
presence on the web, visible at http://www.FreeBSD.org/
and many mirrors around the world. The web site is
typically a new user's first exposure to &os;.Translation teams are responsible for translating the
Handbook and web site into different languages. Manual pages
are not translated at present.Documentation source for the &os; web site, Handbook, and
FAQ is available in the documentation
repository at
https://svn.FreeBSD.org/doc/.Source for manual pages is available in a separate
source repository located at
https://svn.FreeBSD.org/base/.Documentation commit messages are visible with
svn log. Commit messages are also
archived at &a.svn-doc-all.url;.Web frontends to both of these repositories are available at and .Many people have written tutorials or how-to articles about
&os;. Some are stored as part of the FDP
files. In other cases, the author has decided to keep the
documentation separate. The FDP endeavors to
provide links to as much of this external documentation as
possible.Quick StartSome preparatory steps must be taken before editing the &os;
documentation. First, subscribe to the &a.doc;. Some team
members also interact on the #bsddocs
IRC channel on
EFnet. These people
can help with questions or problems involving the
documentation.Install the
textproc/docproj
package or port. This meta-port installs all of the
software needed to edit and build &os; documentation.Install a local working copy of the documentation from a
mirror of the &os; repository in
~/doc (see
).&prompt.user; svn checkout https://svn0.us-west.FreeBSD.org/doc/head ~/docConfigure the text editor:Word wrap set to 70 characters.Tab stops set to 2.Replace each group of 8 leading spaces with a
single tab.Specific editor configurations are listed in
.Update the local working copy:&prompt.user; svn up ~/docEdit the documentation files that require changes. If a
file needs major changes, consult the mailing list for
input.References to tag and entity usage can be found in
and
.After editing, check for problems by running:&prompt.user; igor -R filename.xml | less -RSReview the output and edit the file to fix any problems
shown, then rerun the command to find any remaining
problems. Repeat until all of the errors are
resolved.Always build-test changes before
submitting them. Running make in the
top-level directory of the documentation being edited will
generate that documentation in split HTML format. For
example, to build the English version of the Handbook in
HTML, run make in the
en_US.ISO8859-1/books/handbook/
directory.When changes are complete and tested, generate a
diff file:&prompt.user; cd /usr/doc
&prompt.user; svn diff > bsdinstall.diff.txtGive the diff file a descriptive name. In the example
above, changes have been made to the
bsdinstall portion of
the Handbook.Submit the diff file using the web-based
Problem
- Report system or with &man.send-pr.1;. If using
+ Report system. If using
the web form, enter a synopsis of
[patch] short description of
problem. Select the category
docs and the class
doc-bug. In the body of the message,
enter a short description of the changes and any important
details about them. Use the
[ Browse... ] button to
attach the diff file.
Index: head/en_US.ISO8859-1/books/fdp-primer/translations/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/fdp-primer/translations/chapter.xml (revision 46641)
+++ head/en_US.ISO8859-1/books/fdp-primer/translations/chapter.xml (revision 46642)
@@ -1,473 +1,473 @@
TranslationsThis is the FAQ for people translating the FreeBSD
documentation (FAQ, Handbook, tutorials, manual pages, and others)
to different languages.It is very heavily based on the
translation FAQ from the FreeBSD German Documentation Project,
originally written by Frank Gründer
elwood@mc5sys.in-berlin.de and translated back to
English by Bernd Warken bwarken@mayn.de.The FAQ is maintained by the &a.doceng;.What do i18n and l10n
mean?i18n means
internationalization and
l10n means localization.
They are just a convenient shorthand.i18n can be read as i
followed by 18 letters, followed by n.
Similarly, l10n is l
followed by 10 letters, followed by n.Is there a mailing list for translators?Yes. Different translation groups have their own
mailing lists. The list
of translation projects has more information about
the mailing lists and web sites run by each translation
project. In addition there is
freebsd-translators@freebsd.org for general
translation discussion.Are more translators needed?Yes. The more people work on translation the faster it
gets done, and the faster changes to the English
documentation are mirrored in the translated
documents.You do not have to be a professional translator to be
able to help.What languages do I need to know?Ideally, you will have a good knowledge of written
English, and obviously you will need to be fluent in the
language you are translating to.English is not strictly necessary. For example, you
could do a Hungarian translation of the FAQ from the Spanish
translation.What software do I need to know?It is strongly recommended that you maintain a local
copy of the FreeBSD Subversion repository (at least the
documentation part). This can be done by running:&prompt.user; svn checkout https://svn0.us-east.FreeBSD.org/doc/head/ headsvn0.us-east.FreeBSD.org
is a public SVN server.
Select the closest mirror and verify the mirror server
certificate from the list of Subversion
mirror sites.This will require the devel/subversion package to
be installed.You should be comfortable using
svn. This will allow you to see
what has changed between different versions of the files
that make up the documentation.For example, to view the differences between revisions
r33733 and r33734 of
en_US.ISO8859-1/books/fdp-primer/book.xml,
run:&prompt.user; svn diff -r33733:33734 en_US.ISO8859-1/books/fdp-primer/book.xmlHow do I find out who else might be translating to the
same language?The Documentation
Project translations page lists the translation
efforts that are currently known about. If others are
already working on translating documentation to your
language, please do not duplicate their efforts. Instead,
contact them to see how you can help.If no one is listed on that page as translating for your
language, then send a message to the &a.doc; in case someone
else is thinking of doing a translation, but has not
announced it yet.No one else is translating to my language. What do I
do?Congratulations, you have just started the
FreeBSD your-language-here
Documentation Translation Project. Welcome
aboard.First, decide whether or not you have got the time to
spare. Since you are the only person working on your
language at the moment it is going to be your responsibility
to publicize your work and coordinate any volunteers that
might want to help you.Write an email to the Documentation Project mailing
list, announcing that you are going to translate the
documentation, so the Documentation Project translations
page can be maintained.If there is already someone in your country providing
FreeBSD mirroring services you should contact them and ask
if you can have some webspace for your project, and possibly
an email address or mailing list services.Then pick a document and start translating. It is best
to start with something fairly small—either the FAQ,
or one of the tutorials.I have translated some documentation, where do I send
it?That depends. If you are already working with a
translation team (such as the Japanese team, or the German
team) then they will have their own procedures for handling
submitted documentation, and these will be outlined on their
web pages.If you are the only person working on a particular
language (or you are responsible for a translation project
and want to submit your changes back to the FreeBSD project)
then you should send your translation to the FreeBSD project
(see the next question).I am the only person working on translating to this
language, how do I submit my translation?orWe are a translation team, and want to submit
documentation that our members have translated for
us.First, make sure your translation is organized properly.
This means that it should drop into the existing
documentation tree and build straight away.Currently, the FreeBSD documentation is stored in a top
level directory called head/.
Directories below this are named according to the language
code they are written in, as defined in ISO639
(/usr/share/misc/iso639 on a version of
FreeBSD newer than 20th January 1999).If your language can be encoded in different ways (for
example, Chinese) then there should be directories below
this, one for each encoding format you have provided.Finally, you should have directories for each
document.For example, a hypothetical Swedish translation might
look like:head/
sv_SE.ISO8859-1/
Makefile
htdocs/
docproj/
books/
faq/
Makefile
book.xmlsv_SE.ISO8859-1 is the name of the
translation, in
lang.encoding
form. Note the two Makefiles, which will be used to build
the documentation.Use &man.tar.1; and &man.gzip.1; to compress up your
documentation, and send it to the project.&prompt.user; cd doc
&prompt.user; tar cf swedish-docs.tar sv_SE.ISO8859-1
&prompt.user; gzip -9 swedish-docs.tarPut swedish-docs.tar.gz somewhere.
If you do not have access to your own webspace (perhaps your
ISP does not let you have any) then you can email
&a.doceng;, and arrange to email the files when it is
convenient.
- Either way, you should use &man.send-pr.1; to submit a
+ Either way, you should use Bugzilla to submit a
report indicating that you have submitted the documentation.
It would be very helpful if you could get other people to
look over your translation and double check it first, since
it is unlikely that the person committing it will be fluent
in the language.Someone (probably the Documentation Project Manager,
currently &a.doceng;) will then take your translation and
confirm that it builds. In particular, the following things
will be looked at:Do all your files use RCS strings (such as
"ID")?Does make all in the
sv_SE.ISO8859-1 directory work
correctly?Does make install work
correctly?If there are any problems then whoever is looking at the
submission will get back to you to work them out.If there are no problems your translation will be
committed as soon as possible.Can I include language or country specific text in my
translation?We would prefer that you did not.For example, suppose that you are translating the
Handbook to Korean, and want to include a section about
retailers in Korea in your Handbook.There is no real reason why that information should not
be in the English (or German, or Spanish, or Japanese, or
…) versions as well. It is feasible that an English
speaker in Korea might try to pick up a copy of FreeBSD
whilst over there. It also helps increase FreeBSD's
perceived presence around the globe, which is not a bad
thing.If you have country specific information, please submit
it as a change to the English Handbook (using
- &man.send-pr.1;) and then translate the change back to your
+ Bugzilla) and then translate the change back to your
language in the translated Handbook.Thanks.How should language specific characters be
included?Non-ASCII characters in the documentation should be
included using SGML entities.Briefly, these look like an ampersand (&), the name
of the entity, and a semi-colon (;).The entity names are defined in ISO8879, which is in the
ports tree as textproc/iso8879.A few examples include:EntityAppearanceDescriptionééSmall e with an acute accentÉÉLarge E with an acute accentüüSmall u with an umlautAfter you have installed the iso8879 port, the files in
/usr/local/share/xml/iso8879 contain
the complete list.Addressing the readerIn the English documents, the reader is addressed as
you, there is no formal/informal distinction
as there is in some languages.If you are translating to a language which does
distinguish, use whichever form is typically used in other
technical documentation in your language. If in doubt, use
a mildly polite form.Do I need to include any additional information in my
translations?Yes.The header of the English version of each document will
look something like this:<!--
The FreeBSD Documentation Project
$FreeBSD: head/en_US.ISO8859-1/books/faq/book.xml 38674 2012-04-14 13:52:52Z $
-->The exact boilerplate may change, but it will always
include a $FreeBSD$ line and the phrase
The FreeBSD Documentation Project.
Note that the $FreeBSD part is expanded automatically
by Subversion, so it should be empty (just
$FreeBSD$) for new
files.Your translated documents should include their own
$FreeBSD$ line, and change the
FreeBSD Documentation Project line to
The FreeBSD language
Documentation Project.In addition, you should add a third line which indicates
which revision of the English text this is based on.So, the Spanish version of this file might start:<!--
The FreeBSD Spanish Documentation Project
$FreeBSD: head/es_ES.ISO8859-1/books/faq/book.xml 38826 2012-05-17 19:12:14Z hrs $
Original revision: r38674
-->
Index: head/en_US.ISO8859-1/books/handbook/eresources/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/eresources/chapter.xml (revision 46641)
+++ head/en_US.ISO8859-1/books/handbook/eresources/chapter.xml (revision 46642)
@@ -1,2377 +1,2377 @@
Resources on the InternetThe rapid pace of &os; progress makes print media
impractical as a means of following the latest developments.
Electronic resources are the best, if not often the only, way to
stay informed of the latest advances. Since &os; is a volunteer
effort, the user community itself also generally serves as a
technical support department of sorts, with
electronic mail, web forums, and USENET news being the most
effective way of reaching that community.The most important points of contact with the &os; user
community are outlined below. Please send other resources not
mentioned here to the &a.doc; so that they may also be
included.WebsitesThe
&os; Forums provide a web based discussion forum
for &os; questions and technical
discussion.Planet
&os; offers an aggregation feed of dozens of blogs
written by &os; developers. Many developers use this to
post quick notes about what they are working on, new
patches, and other works in progress.The BSDConferences
YouTube Channel provides a collection of high
quality videos from BSD conferences around the world.
This is a great way to watch key developers give
presentations about new work in &os;.Mailing ListsThe mailing lists are the most direct way of addressing
questions or opening a technical discussion to a concentrated
&os; audience. There are a wide variety of lists on a number of
different &os; topics. Sending questions to the most
appropriate mailing list will invariably assure a faster and
more accurate response.The charters for the various lists are given at the bottom
of this document. Please read the charter before
joining or sending mail to any list. Most list
subscribers receive many hundreds of &os; related messages every
day, and the charters and rules for use are meant to keep the
signal-to-noise ratio of the lists high. To do less would see
the mailing lists ultimately fail as an effective communications
medium for the Project.To test the ability to send email to &os; lists,
send a test message to &a.test.name;. Please do
not send test messages to any other list.When in doubt about what list to post a question to, see
How to get
best results from the FreeBSD-questions mailing
list.Before posting to any list, please learn about how to best
use the mailing lists, such as how to help avoid
frequently-repeated discussions, by reading the
Mailing List
Frequently Asked Questions (FAQ) document.Archives are kept for all of the mailing lists and can be
searched using the
&os; World Wide
Web server. The keyword searchable archive offers an
excellent way of finding answers to frequently asked questions
and should be consulted before posting a question. Note that
this also means that messages sent to &os; mailing lists are
archived in perpetuity. When protecting privacy is a concern,
consider using a disposable secondary email address and posting
only public information.List SummaryGeneral lists: The following are
general lists which anyone is free (and encouraged) to
join:ListPurpose&a.advocacy.name;&os; Evangelism&a.announce.name;Important events and Project milestones
(moderated)&a.arch.name;Architecture and design discussions&a.bugbusters.name;Discussions pertaining to the maintenance of
the &os; problem report database and related
tools&a.bugs.name;Bug reports&a.chat.name;Non-technical items related to the &os;
community&a.chromium.name;&os;-specific Chromium issues&a.current.name;Discussion concerning the use of
&os.current;&a.isp.name;Issues for Internet Service Providers using
&os;&a.jobs.name;&os; employment and consulting
opportunities&a.questions.name;User questions and technical support&a.security-notifications.name;Security notifications (moderated)&a.stable.name;Discussion concerning the use of
&os.stable;&a.test.name;Where to send test messages instead of to
one of the actual listsTechnical lists: The following lists
are for technical discussion. Read the charter for each list
carefully before joining or sending mail to one as there are
firm guidelines for their use and content.ListPurpose&a.acpi.name;ACPI and power management development&a.afs.name;Porting AFS to &os;&a.aic7xxx.name;Developing drivers for the &adaptec;
AIC 7xxx&a.amd64.name;Porting &os; to AMD64 systems (moderated)&a.apache.name;Discussion about
Apache related
ports&a.arm.name;Porting &os; to &arm; processors&a.atm.name;Using ATM networking with &os;&a.bluetooth.name;Using &bluetooth; technology in &os;&a.cluster.name;Using &os; in a clustered environment&a.database.name;Discussing database use and development under
&os;&a.desktop.name;Using and improving &os; on the desktop&a.doc.name;Creating &os; related documents&a.drivers.name;Writing device drivers for &os;&a.dtrace.name;Using and working on DTrace in &os;&a.eclipse.name;&os; users of Eclipse IDE, tools, rich client
applications and ports.&a.embedded.name;Using &os; in embedded applications&a.eol.name;Peer support of &os;-related software that
is no longer supported by the &os; Project.&a.emulation.name;Emulation of other systems such as
Linux/&ms-dos;/&windows;&a.enlightenment.name;Porting Enlightenment
and Enlightenment
applications&a.firewire.name;&os; &firewire; (iLink, IEEE 1394) technical
discussion&a.fortran.name;Fortran on &os;&a.fs.name;File systems&a.games.name;Support for Games on &os;&a.gecko.name;Gecko Rendering
Engine issues&a.geom.name;GEOM-specific discussions and
implementations&a.git.name;Discussion of git use in the &os; project&a.gnome.name;Porting GNOME and
GNOME applications&a.hackers.name;General technical discussion&a.hardware.name;General discussion of hardware for running
&os;&a.i18n.name;&os; Internationalization&a.ia32.name;&os; on the IA-32 (&intel; x86)
platform&a.ia64.name;Porting &os; to &intel;'s upcoming IA64
systems&a.infiniband.name;Infiniband on &os;&a.ipfw.name;Technical discussion concerning the redesign
of the IP firewall code&a.isdn.name;ISDN developers&a.jail.name;Discussion about the &man.jail.8;
facility&a.java.name;&java; developers and people porting &jdk;s to
&os;&a.lfs.name;Porting LFS to &os;&a.mips.name;Porting &os; to &mips;&a.mobile.name;Discussions about mobile computing&a.mono.name;Mono and C# applications on &os;&a.multimedia.name;Multimedia applications&a.newbus.name;Technical discussions about bus
architecture&a.net.name;Networking discussion and TCP/IP source
code&a.numerics.name;Discussions of high quality implementation of
libm functions&a.office.name;Office applications on &os;&a.performance.name;Performance tuning questions for high
performance/load installations&a.perl.name;Maintenance of a number of
Perl-related ports&a.pf.name;Discussion and questions about the packet filter
firewall system&a.pkg.name;Binary package management and package
tools discussion&a.pkg-fallout.name;Fallout logs from package building&a.platforms.name;Concerning ports to non &intel; architecture
platforms&a.ports.name;Discussion of the Ports Collection&a.ports-announce.name;Important news and instructions about the Ports
Collection (moderated)&a.ports-bugs.name;Discussion of the ports bugs/PRs&a.ppc.name;Porting &os; to the &powerpc;&a.proliant.name;Technical discussion of &os; on HP ProLiant
server platforms&a.python.name;&os;-specific Python issues&a.rc.name;Discussion related to the
rc.d system and its
development&a.realtime.name;Development of realtime extensions to
&os;&a.ruby.name;&os;-specific Ruby discussions&a.scsi.name;The SCSI subsystem&a.security.name;Security issues affecting &os;&a.small.name;Using &os; in embedded applications
(obsolete; use &a.embedded.name; instead)&a.snapshots.name;&os; Development Snapshot Announcements&a.sparc.name;Porting &os; to &sparc; based systems&a.standards.name;&os;'s conformance to the C99 and the &posix;
standards&a.sysinstall.name;&man.sysinstall.8; development&a.tcltk.name;&os;-specific Tcl/Tk discussions&a.testing.name;Testing on &os;&a.tex.name;Porting TeX and its
applications to &os;&a.threads.name;Threading in &os;&a.tilera.name;Porting &os; to the Tilera family of
CPUs&a.tokenring.name;Support Token Ring in &os;&a.toolchain.name;Maintenance of &os;'s integrated
toolchain&a.translators.name;Translating &os; documents and programs&a.usb.name;Discussing &os; support for USB&a.virtualization.name;Discussion of various virtualization techniques
supported by &os;&a.vuxml.name;Discussion on VuXML infrastructure&a.x11.name;Maintenance and support of X11 on &os;&a.xen.name;Discussion of the &os; port to &xen; —
implementation and usage&a.xfce.name;XFCE for &os; —
porting and maintaining&a.zope.name;Zope for &os; —
porting and maintainingLimited lists: The following lists
are for more specialized (and demanding) audiences and are
probably not of interest to the general public. It is also a
good idea to establish a presence in the technical lists
before joining one of these limited lists in order to
understand the communications etiquette involved.ListPurpose&a.hubs.name;People running mirror sites (infrastructural
support)&a.usergroups.name;User group coordination&a.wip-status.name;&os; Work-In-Progress Status&a.wireless.name;Discussions of 802.11 stack, tools, device driver
developmentDigest lists: All of the above lists
are available in a digest format. Once subscribed to a list,
the digest options can be changed in the account options
section.SVN lists: The following lists are
for people interested in seeing the log messages for changes
to various areas of the source tree. They are
Read-Only lists and should not have mail
sent to them.ListSource areaArea Description (source for)&a.svn-doc-all.name;/usr/docAll changes to the doc Subversion repository
(except for user,
projects and
translations)&a.svn-doc-head.name;/usr/docAll changes to the head branch of
the doc Subversion repository&a.svn-doc-projects.name;/usr/doc/projectsAll changes to the projects
area of the doc Subversion repository&a.svn-doc-svnadmin.name;/usr/docAll changes to the administrative scripts, hooks,
and other configuration data of the doc Subversion
repository&a.svn-ports-all.name;/usr/portsAll changes to the ports Subversion
repository&a.svn-ports-head.name;/usr/portsAll changes to the head branch
of the ports Subversion repository&a.svn-ports-svnadmin.name;/usr/portsAll changes to the administrative scripts, hooks,
and other configuration data of the ports Subversion
repository&a.svn-src-all.name;/usr/srcAll changes to the src Subversion repository
(except for user
and projects)&a.svn-src-head.name;/usr/srcAll changes to the head branch
of the src Subversion repository (the &os;-CURRENT
branch)&a.svn-src-projects.name;/usr/projectsAll changes to the projects
area of the src Subversion repository&a.svn-src-release.name;/usr/srcAll changes to the releases
area of the src Subversion repository&a.svn-src-releng.name;/usr/srcAll changes to the releng
branches of the src Subversion repository (the
security / release engineering branches)&a.svn-src-stable.name;/usr/srcAll changes to the all stable branches of the src
Subversion repository&a.svn-src-stable-6.name;/usr/srcAll changes to the stable/6
branch of the src Subversion repository&a.svn-src-stable-7.name;/usr/srcAll changes to the stable/7
branch of the src Subversion repository&a.svn-src-stable-8.name;/usr/srcAll changes to the stable/8
branch of the src Subversion repository&a.svn-src-stable-9.name;/usr/srcAll changes to the stable/9
branch of the src Subversion repository&a.svn-src-stable-10.name;/usr/srcAll changes to the stable/10
branch of the src Subversion repository&a.svn-src-stable-other.name;/usr/srcAll changes to the
older stable branches of the src
Subversion repository&a.svn-src-svnadmin.name;/usr/srcAll changes to the administrative scripts, hooks,
and other configuration data of the src Subversion
repository&a.svn-src-user.name;/usr/srcAll changes to the
experimental user area of the src
Subversion repository&a.svn-src-vendor.name;/usr/srcAll changes to the vendor work area of the src
Subversion repositoryHow to SubscribeTo subscribe to a list, click the list name at
&a.mailman.lists.link;. The page that is displayed should
contain all of the necessary subscription instructions for
that list.To actually post to a given list, send mail to
listname@FreeBSD.org.
It will then be redistributed to mailing list members
world-wide.To unsubscribe from a list, click on the URL found at the
bottom of every email received from the list. It is also
possible to send an email to
listname-unsubscribe@FreeBSD.org
to unsubscribe.It is important to keep discussion in the technical
mailing lists on a technical track. To only receive important
announcements, instead join the &a.announce;, which is
intended for infrequent traffic.List ChartersAll &os; mailing lists have certain
basic rules which must be adhered to by anyone using them.
Failure to comply with these guidelines will result in two (2)
written warnings from the &os; Postmaster
postmaster@FreeBSD.org, after which, on a third
offense, the poster will removed from all &os; mailing lists
and filtered from further posting to them. We regret that
such rules and measures are necessary at all, but today's
Internet is a pretty harsh environment, it would seem, and
many fail to appreciate just how fragile some of its
mechanisms are.Rules of the road:The topic of any posting should adhere to the basic
charter of the list it is posted to. If the list is about
technical issues, the posting should contain technical
discussion. Ongoing irrelevant chatter or flaming only
detracts from the value of the mailing list for everyone
on it and will not be tolerated. For free-form discussion
on no particular topic, the &a.chat; is freely available
and should be used instead.No posting should be made to more than 2 mailing
lists, and only to 2 when a clear and obvious need to post
to both lists exists. For most lists, there is already a
great deal of subscriber overlap and except for the most
esoteric mixes (say -stable & -scsi),
there really is no reason to post to more than one list at
a time. If a message is received with multiple mailing
lists on the Cc line, trim the
Cc line before replying. The
person who replies is still responsible for
cross-posting, no matter who the originator might have
been.Personal attacks and profanity (in the context of an
argument) are not allowed, and that includes users and
developers alike. Gross breaches of netiquette, like
excerpting or reposting private mail when permission to do
so was not and would not be forthcoming, are frowned upon
but not specifically enforced.
However, there are also very few
cases where such content would fit within the charter of a
list and it would therefore probably rate a warning (or
ban) on that basis alone.Advertising of non-&os; related products or services
is strictly prohibited and will result in an immediate ban
if it is clear that the offender is advertising by
spam.Individual list charters:&a.acpi.name;ACPI and power management
development&a.afs.name;Andrew File SystemThis list is for discussion on porting and using
AFS from CMU/Transarc&a.announce.name;Important events /
milestonesThis is the mailing list for people interested only
in occasional announcements of significant &os; events.
This includes announcements about snapshots and other
releases. It contains announcements of new &os;
capabilities. It may contain calls for volunteers etc.
This is a low volume, strictly moderated mailing
list.&a.arch.name;Architecture and design
discussionsThis list is for discussion of the &os;
architecture. Messages will mostly be kept strictly
technical in nature. Examples of suitable topics
are:How to re-vamp the build system to have several
customized builds running at the same time.What needs to be fixed with VFS to make
Heidemann layers work.How do we change the device driver interface
to be able to use the same drivers cleanly on many
buses and architectures.How to write a network driver.&a.bluetooth.name;&bluetooth; in &os;This is the forum where &os;'s &bluetooth; users
congregate. Design issues, implementation details,
patches, bug reports, status reports, feature requests,
and all matters related to &bluetooth; are fair
game.&a.bugbusters.name;Coordination of the Problem Report
handling effortThe purpose of this list is to serve as a
coordination and discussion forum for the Bugmeister,
his Bugbusters, and any other parties who have a genuine
interest in the PR database. This list is not for
discussions about specific bugs, patches or PRs.&a.bugs.name;Bug reportsThis is the mailing list for reporting bugs in &os;.
Whenever possible, bugs should be submitted using the
- &man.send-pr.1; command or the WEB
+ web
interface to it.&a.chat.name;Non technical items related to the &os;
communityThis list contains the overflow from the other lists
about non-technical, social information. It includes
discussion about whether Jordan looks like a toon ferret
or not, whether or not to type in capitals, who is
drinking too much coffee, where the best beer is brewed,
who is brewing beer in their basement, and so on.
Occasional announcements of important events (such as
upcoming parties, weddings, births, new jobs, etc) can
be made to the technical lists, but the follow ups
should be directed to this -chat list.&a.chromium.name;&os;-specific Chromium
issuesThis is a list for the discussion of Chromium
support for &os;. This is a technical list to
discuss development and installation of Chromium.&a.core.name;&os; core teamThis is an internal mailing list for use by the core
members. Messages can be sent to it when a serious
&os;-related matter requires arbitration or
high-level scrutiny.&a.current.name;Discussions about the use of
&os.current;This is the mailing list for users of &os.current;.
It includes warnings about new features coming out in
-CURRENT that will affect the users, and instructions
on steps that must be taken to remain -CURRENT. Anyone
running CURRENT must subscribe to this
list. This is a technical mailing list for which
strictly technical content is expected.&a.desktop.name;Using and improving &os; on the
desktopThis is a forum for discussion of &os; on the
desktop. It is primarily a place for desktop porters
and users to discuss issues and improve &os;'s desktop
support.&a.doc.name;Documentation ProjectThis mailing list is for the discussion of issues
and projects related to the creation of documentation
for &os;. The members of this mailing list are
collectively referred to as The &os;
Documentation Project. It is an open list; feel
free to join and contribute!&a.drivers.name;Writing device drivers for
&os;This is a forum for technical discussions related to
device drivers on &os;. It is primarily a place for
device driver writers to ask questions about how to
write device drivers using the APIs in the &os;
kernel.&a.dtrace.name;Using and working on DTrace in
&os;DTrace is an integrated component of &os; that
provides a framework for understanding the kernel as
well as user space programs at run time. The mailing
list is an archived discussion for developers of the
code as well as those using it.&a.eclipse.name;&os; users of Eclipse IDE, tools, rich
client applications and ports.The intention of this list is to provide mutual
support for everything to do with choosing, installing,
using, developing and maintaining the Eclipse IDE,
tools, rich client applications on the &os; platform and
assisting with the porting of Eclipse IDE and plugins to
the &os; environment.The intention is also to facilitate exchange of
information between the Eclipse community and the &os;
community to the mutual benefit of both.Although this list is focused primarily on the needs
of Eclipse users it will also provide a forum for those
who would like to develop &os; specific applications
using the Eclipse framework.&a.embedded.name;Using &os; in embedded
applicationsThis list discusses topics related to using &os; in
embedded systems. This is a technical mailing list for
which strictly technical content is expected. For the
purpose of this list, embedded systems are those
computing devices which are not desktops and which
usually serve a single purpose as opposed to being
general computing environments. Examples include, but
are not limited to, all kinds of phone handsets, network
equipment such as routers, switches and PBXs, remote
measuring equipment, PDAs, Point Of Sale systems, and so
on.&a.emulation.name;Emulation of other systems such as
Linux/&ms-dos;/&windows;This is a forum for technical discussions related
to running programs written for other operating systems
on &os;.&a.enlightenment.name;EnlightenmentDiscussions concerning the
Enlightenment Desktop
Environment for &os; systems. This is a technical
mailing list for which strictly technical content is
expected.&a.eol.name;Peer support of &os;-related software
that is no longer supported by the &os;
Project.This list is for those interested in providing or
making use of peer support of &os;-related software for
which the &os; Project no longer provides official
support in the form of security advisories and
patches.&a.firewire.name;&firewire; (iLink, IEEE
1394)This is a mailing list for discussion of the design
and implementation of a &firewire; (aka IEEE 1394 aka
iLink) subsystem for &os;. Relevant topics specifically
include the standards, bus devices and their protocols,
adapter boards/cards/chips sets, and the architecture
and implementation of code for their proper
support.&a.fortran.name;Fortran on &os;This is the mailing list for discussion of Fortran
related ports on &os;: compilers, libraries, scientific
and engineering applications from laptops to HPC
clusters.&a.fs.name;File systemsDiscussions concerning &os; filesystems. This is a
technical mailing list for which strictly technical
content is expected.&a.games.name;Games on &os;This is a technical list for discussions related to
bringing games to &os;. It is for individuals actively
working on porting games to &os;, to bring up problems
or discuss alternative solutions. Individuals
interested in following the technical discussion are
also welcome.&a.gecko.name;Gecko Rendering EngineThis is a forum about
Gecko applications using
&os;.Discussion centers around Gecko Ports applications,
their installation, their development and their support
within &os;.&a.geom.name;GEOMDiscussions specific to GEOM and related
implementations. This is a technical mailing list for
which strictly technical content is expected.&a.git.name;Use of git in the &os;
projectDiscussions of how to use git in &os;
infrastructure including the github mirror and other
uses of git for project collaboration. Discussion area
for people using git against the &os; github mirror.
People wanting to get started with the mirror or git
in general on &os; can ask here.&a.gnome.name;GNOMEDiscussions concerning The
GNOME Desktop Environment
for &os; systems. This is a technical mailing list
for which strictly technical content is expected.&a.infiniband.name;Infiniband on &os;Technical mailing list discussing Infiniband, OFED,
and OpenSM on &os;.&a.ipfw.name;IP FirewallThis is the forum for technical discussions
concerning the redesign of the IP firewall code in
&os;. This is a technical mailing list for which
strictly technical content is expected.&a.ia64.name;Porting &os; to IA64This is a technical mailing list for individuals
actively working on porting &os; to the IA-64 platform
from &intel;, to bring up problems or discuss
alternative solutions. Individuals interested in
following the technical discussion are also
welcome.&a.isdn.name;ISDN CommunicationsThis is the mailing list for people discussing the
development of ISDN support for &os;.&a.java.name;&java; DevelopmentThis is the mailing list for people discussing the
development of significant &java; applications for &os;
and the porting and maintenance of &jdk;s.&a.jobs.name;Jobs offered and soughtThis is a forum for posting employment notices
specifically related to &os; and resumes from those
seeking &os;-related employment. This is
not a mailing list for general
employment issues since adequate forums for that already
exist elsewhere.Note that this list, like other FreeBSD.org
mailing lists, is distributed worldwide. Be clear about
the geographic location and the extent to which
telecommuting or assistance with relocation is
available.Email should use open formats only —
preferably plain text, but basic Portable Document
Format (PDF), HTML, and a few others
are acceptable to many readers. Closed formats such as
µsoft; Word (.doc) will be
rejected by the mailing list server.&a.kde.name;KDEDiscussions concerning
KDE on &os; systems.
This is a technical mailing list for which strictly
technical content is expected.&a.hackers.name;Technical discussionsThis is a forum for technical discussions related
to &os;. This is the primary technical mailing list.
It is for individuals actively working on &os;, to bring
up problems or discuss alternative solutions.
Individuals interested in following the technical
discussion are also welcome. This is a technical
mailing list for which strictly technical content is
expected.&a.hardware.name;General discussion of &os;
hardwareGeneral discussion about the types of hardware that
&os; runs on, various problems and suggestions
concerning what to buy or avoid.&a.hubs.name;Mirror sitesAnnouncements and discussion for people who run &os;
mirror sites.&a.isp.name;Issues for Internet Service
ProvidersThis mailing list is for discussing topics relevant
to Internet Service Providers (ISPs) using &os;. This
is a technical mailing list for which strictly technical
content is expected.&a.mono.name;Mono and C# applications on
&os;This is a list for discussions related to the Mono
development framework on &os;. This is a technical
mailing list. It is for individuals actively working on
porting Mono or C# applications to &os;, to bring up
problems or discuss alternative solutions. Individuals
interested in following the technical discussion are
also welcome.&a.office.name;Office applications on
&os;Discussion centers around office applications, their
installation, their development and their support within
&os;.&a.ops-announce.name;Project Infrastructure
AnnouncementsThis is the mailing list for people interested in
changes and issues related to the FreeBSD.org Project
infrastructure.This moderated list is strictly for announcements:
no replies, requests, discussions, or opinions.&a.performance.name;Discussions about tuning or speeding up
&os;This mailing list exists to provide a place for
hackers, administrators, and/or concerned parties to
discuss performance related topics pertaining to &os;.
Acceptable topics includes talking about &os;
installations that are either under high load, are
experiencing performance problems, or are pushing the
limits of &os;. Concerned parties that are willing to
work toward improving the performance of &os; are highly
encouraged to subscribe to this list. This is a highly
technical list ideally suited for experienced &os;
users, hackers, or administrators interested in keeping
&os; fast, robust, and scalable. This list is not a
question-and-answer list that replaces reading through
documentation, but it is a place to make contributions
or inquire about unanswered performance related
topics.&a.pf.name;Discussion and questions about the packet
filter firewall systemDiscussion concerning the packet filter (pf)
firewall system in terms of &os;. Technical discussion
and user questions are both welcome. This list is also
a place to discuss the ALTQ QoS framework.&a.pkg.name;Binary package management and package
tools discussionDiscussion of all aspects of managing &os; systems
by using binary packages to install software, including
binary package toolkits and formats, their development
and support within &os;, package repository management,
and third party packages.Note that discussion of ports which fail to generate
packages correctly should generally be considered as
ports problems, and so inappropriate for this
list.&a.pkg-fallout.name;Fallout logs from package
buildingAll packages building failures logs from the package
building clusters&a.platforms.name;Porting to Non &intel;
platformsCross-platform &os; issues, general discussion and
proposals for non &intel; &os; ports. This is a
technical mailing list for which strictly technical
content is expected.&a.ports.name;Discussion of
portsDiscussions concerning &os;'s ports
collection (/usr/ports),
ports infrastructure, and general ports coordination
efforts. This is a technical mailing list for which
strictly technical content is expected.&a.ports-announce.name;Important news and instructions about the
&os; Ports
CollectionImportant news for developers, porters, and users of
the Ports Collection
(/usr/ports), including
architecture/infrastructure changes, new capabilities,
critical upgrade instructions, and release engineering
information. This is a low-volume mailing list,
intended for announcements.&a.ports-bugs.name;Discussion of
ports bugsDiscussions concerning problem reports for &os;'s
ports collection
(/usr/ports), proposed ports, or
modifications to ports. This is a technical mailing
list for which strictly technical content is
expected.&a.proliant.name;Technical discussion of &os; on HP
ProLiant server platformsThis mailing list is to be used for the technical
discussion of the usage of &os; on HP ProLiant servers,
including the discussion of ProLiant-specific drivers,
management software, configuration tools, and BIOS
updates. As such, this is the primary place to discuss
the hpasmd, hpasmcli, and hpacucli modules.&a.python.name;Python on &os;This is a list for discussions related to improving
Python-support on &os;. This is a technical mailing
list. It is for individuals working on porting Python,
its third party modules and
Zope stuff to &os;.
Individuals interested in following the technical
discussion are also welcome.&a.questions.name;User questionsThis is the mailing list for questions about &os;.
Do not send how to questions to the
technical lists unless the question is quite
technical.&a.ruby.name;&os;-specific Ruby
discussionsThis is a list for discussions related to the Ruby
support on &os;. This is a technical mailing list. It
is for individuals working on Ruby ports, third party
libraries and frameworks.Individuals interested in the technical discussion
are also welcome.&a.scsi.name;SCSI subsystemThis is the mailing list for people working on the
SCSI subsystem for &os;. This is a technical mailing
list for which strictly technical content is
expected.&a.security.name;Security issues&os; computer security issues (DES, Kerberos, known
security holes and fixes, etc). This is a technical
mailing list for which strictly technical discussion is
expected. Note that this is not a question-and-answer
list, but that contributions (BOTH question AND answer)
to the FAQ are welcome.&a.security-notifications.name;Security NotificationsNotifications of &os; security problems and fixes.
This is not a discussion list. The discussion list is
FreeBSD-security.&a.small.name;Using &os; in embedded
applicationsThis list discusses topics related to unusually
small and embedded &os; installations. This is a
technical mailing list for which strictly technical
content is expected.This list has been obsoleted by
&a.embedded.name;.&a.snapshots.name;&os; Development Snapshot
AnnouncementsThis list provides notifications about the
availability of new &os; development snapshots for the
head/ and stable/ branches.&a.stable.name;Discussions about the use of
&os.stable;This is the mailing list for users of &os.stable;.
STABLE is the branch where development
continues after a RELEASE, including bug fixes and new features.
The ABI is kept stable for binary compatibility.
It includes warnings about new features coming out in
-STABLE that will affect the users, and instructions on
steps that must be taken to remain -STABLE. Anyone
running STABLE should subscribe to this
list. This is a technical mailing list for which
strictly technical content is expected.&a.standards.name;C99 & POSIX
ConformanceThis is a forum for technical discussions related to
&os; Conformance to the C99 and the POSIX
standards.&a.testing.name;Testing on &os;Technical mailing list discussing testing on &os;,
including ATF/Kyua, test build infrastructure, port
tests to &os; from other operating systems (NetBSD,
...), etc.&a.tex.name;Porting TeX and
its applications to &os;This is a technical mailing list for discussions
related to TeX and its applications on &os;. It is for
individuals actively working on porting TeX to FreeBSD,
to bring up problems or discuss alternative solutions.
Individuals interested in following the technical
discussion are also welcome.&a.toolchain.name;Maintenance of &os;'s integrated
toolchainThis is the mailing list for discussions related to
the maintenance of the toolchain shipped with &os;.
This could include the state of Clang and GCC, but also
pieces of software such as assemblers, linkers and
debuggers.&a.translators.name;Translating &os; documents and
programsA discussion list where translators of &os;
documents from English into other languages can talk
about translation methods and tools. New members are
asked to introduce themselves and mention the languages
they are interested in translating.&a.usb.name;Discussing &os; support for
USBThis is a mailing list for technical discussions
related to &os; support for USB.&a.usergroups.name;User Group Coordination
ListThis is the mailing list for the coordinators from
each of the local area Users Groups to discuss matters
with each other and a designated individual from the
Core Team. This mail list should be limited to meeting
synopsis and coordination of projects that span User
Groups.&a.virtualization.name;Discussion of various virtualization
techniques supported by &os;A list to discuss the various virtualization
techniques supported by &os;. On one hand the focus
will be on the implementation of the basic functionality
as well as adding new features. On the other hand users
will have a forum to ask for help in case of problems or
to discuss their use cases.&a.wip-status.name;&os; Work-In-Progress
StatusThis mailing list can be used by developers to
announce the creation and progress of &os; related work.
Messages will be moderated. It is suggested to send the
message "To:" a more topical &os; list and only "BCC:"
this list. This way the WIP can also be discussed on
the topical list, as no discussion is allowed on this
list.Look inside the archives for examples of suitable
messages.An editorial digest of the messages to this list
might be posted to the &os; website every few months as
part of the Status Reports
http://www.freebsd.org/news/status/.
Past reports are archived.&a.wireless.name;Discussions of 802.11 stack, tools device
driver developmentThe FreeBSD-wireless list focuses on 802.11 stack
(sys/net80211), device driver and tools development.
This includes bugs, new features and maintenance.&a.xen.name;Discussion of the &os; port to &xen;
— implementation and usageA list that focuses on the &os; &xen; port. The
anticipated traffic level is small enough that it is
intended as a forum for both technical discussions of
the implementation and design details as well as
administrative deployment issues.&a.xfce.name;XFCEThis is a forum for discussions related to bring the
XFCE environment to &os;.
This is a technical mailing list. It is for individuals
actively working on porting
XFCE to &os;, to bring up
problems or discuss alternative solutions. Individuals
interested in following the technical discussion are
also welcome.&a.zope.name;ZopeThis is a forum for discussions related to bring the
Zope environment to &os;.
This is a technical mailing list. It is for individuals
actively working on porting
Zope to &os;, to bring up
problems or discuss alternative solutions. Individuals
interested in following the technical discussion are
also welcome.Filtering on the Mailing ListsThe &os; mailing lists are filtered in multiple ways to
avoid the distribution of spam, viruses, and other unwanted
emails. The filtering actions described in this section do
not include all those used to protect the mailing
lists.Only certain types of attachments are allowed on the
mailing lists. All attachments with a MIME content type not
found in the list below will be stripped before an email is
distributed on the mailing lists.application/octet-streamapplication/pdfapplication/pgp-signatureapplication/x-pkcs7-signaturemessage/rfc822multipart/alternativemultipart/relatedmultipart/signedtext/htmltext/plaintext/x-difftext/x-patchSome of the mailing lists might allow attachments of
other MIME content types, but the above list should be
applicable for most of the mailing lists.If an email contains both an HTML and a plain text
version, the HTML version will be removed. If an email
contains only an HTML version, it will be converted to plain
text.Usenet NewsgroupsIn addition to two &os; specific newsgroups, there are
many others in which &os; is discussed or are otherwise
relevant to &os; users.BSD Specific Newsgroupscomp.unix.bsd.freebsd.announcecomp.unix.bsd.freebsd.miscde.comp.os.unix.bsd
(German)fr.comp.os.bsd
(French)it.comp.os.freebsd
(Italian)Other &unix; Newsgroups of Interestcomp.unixcomp.unix.questionscomp.unix.admincomp.unix.programmercomp.unix.shellcomp.unix.misccomp.unix.bsdX Window Systemcomp.windows.xcomp.windows.x.appscomp.windows.x.announcecomp.emulators.ms-windows.wineOfficial Mirrors
&chap.eresources.www.index.inc;
&chap.mirrors.lastmod.inc;
&chap.eresources.www.inc;
Index: head/en_US.ISO8859-1/books/handbook/ports/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/ports/chapter.xml (revision 46641)
+++ head/en_US.ISO8859-1/books/handbook/ports/chapter.xml (revision 46642)
@@ -1,1882 +1,1882 @@
Installing Applications: Packages and PortsSynopsisportspackages&os; is bundled with a rich collection of system tools as
part of the base system. In addition, &os; provides two
complementary technologies for installing third-party software:
the &os; Ports Collection, for installing from source, and
packages, for installing from pre-built binaries. Either
method may be used to install software from local media or
from the network.After reading this chapter, you will know:The difference between binary packages and ports.How to find third-party software that has been ported
to &os;.How to manage binary packages using
pkg.How to build third-party software from source using the
Ports Collection.How to find the files installed with the application
for post-installation configuration.What to do if a software installation fails.Overview of Software InstallationThe typical steps for installing third-party software on a
&unix; system include:Find and download the software, which might be
distributed in source code format or as a binary.Unpack the software from its distribution format. This
is typically a tarball compressed with &man.compress.1;,
&man.gzip.1;, or &man.bzip2.1;.Locate the documentation in
INSTALL, README
or some file in a doc/ subdirectory and
read up on how to install the software.If the software was distributed in source format,
compile it. This may involve editing a
Makefile or running a
configure script.Test and install the software.If the software package was not deliberately ported, or
tested to work, on &os;, the source code may need editing in
order for it to install and run properly. At the time of this
writing, over &os.numports; third-party applications have been
ported to &os;.A &os; package contains pre-compiled copies of all the
commands for an application, as well as any configuration files
and documentation. A package can be manipulated with the
pkg commands, such as
pkg install.A &os; port is a collection of files designed to automate
the process of compiling an application from source code. The
files that comprise a port contain all the necessary information
to automatically download, extract, patch, compile, and install
the application.The ports system can also be used to generate packages which
can be manipulated with the &os; package management
commands.Both packages and ports understand dependencies. If a
package or port is used to install an application and a
dependent library is not already installed, the library will
automatically be installed first.While the two technologies are similar, packages and
ports each have their own strengths. Select the technology that
meets your requirements for installing a particular
application.Package BenefitsA compressed package tarball is typically smaller than
the compressed tarball containing the source code for the
application.Packages do not require compilation time. For large
applications, such as Mozilla,
KDE, or
GNOME, this can be important
on a slow system.Packages do not require any understanding of the process
involved in compiling software on &os;.Port BenefitsPackages are normally compiled with conservative
options because they have to run on the maximum number of
systems. By compiling from the port, one can change the
compilation options.Some applications have compile-time options relating to
which features are installed. For example,
Apache can be configured with a
wide variety of different built-in options.In some cases, multiple packages will exist for the same
application to specify certain settings. For example,
Ghostscript is available as a
ghostscript package and a
ghostscript-nox11 package, depending on
whether or not Xorg is installed.
Creating multiple packages rapidly becomes impossible if an
application has more than one or two different compile-time
options.The licensing conditions of some software forbid binary
distribution. Such software must be distributed as source
code which must be compiled by the end-user.Some people do not trust binary distributions or prefer
to read through source code in order to look for potential
problems.Source code is needed in
order to apply custom patches.To keep track of updated ports, subscribe to the
&a.ports; and the &a.ports-bugs;.Before installing any application, check
for security issues related to the application or type
pkg audit -F to check all installed
applications for known vulnerabilities.The remainder of this chapter explains how to use packages
and ports to install and manage third-party software on
&os;.Finding Software&os;'s list of available applications is growing all the
time. There are a number of ways to find software to
install:The &os; web site maintains an up-to-date searchable
list of all the available applications, at http://www.FreeBSD.org/ports/.
The ports can be searched by application name or by
software category.FreshPortsDan Langille maintains FreshPorts.org
which provides a comprehensive search utility and also
tracks changes to the applications in the Ports Collection.
Registered users can create a customized watch list in order
to receive an automated email when their watched ports are
updated.SourceForgeIf finding a particular application becomes challenging,
try searching a site like SourceForge.net
or GitHub.com then
check back at the &os; site
to see if the application has been ported.pkgsearchTo search the binary package
repository for an application:&prompt.root; pkg search subversion
git-subversion-1.9.2
java-subversion-1.8.8_2
p5-subversion-1.8.8_2
py27-hgsubversion-1.6
py27-subversion-1.8.8_2
ruby-subversion-1.8.8_2
subversion-1.8.8_2
subversion-book-4515
subversion-static-1.8.8_2
subversion16-1.6.23_4
subversion17-1.7.16_2Package names include the version number and in case of
ports based on python, the version number of the version of
python the package was built with. Some ports also have
multiple versions available. In case of
subversion there are different
versions available, as well as different compile options.
In this case, the staticly linked version of
subversion. When indicating
which package to install, it is best to specify the
application by the port origin, which is the path in the
ports tree. Repeat the pkg search with
to list the origin of each
package:&prompt.root; pkg search -o subversion
devel/git-subversion
java/java-subversion
devel/p5-subversion
devel/py-hgsubversion
devel/py-subversion
devel/ruby-subversion
devel/subversion16
devel/subversion17
devel/subversion
devel/subversion-book
devel/subversion-staticSearching by shell globs, regular expressions, exact
match, by description, or any other field in the repository
database is also supported by pkg search.
After installing ports-mgmt/pkg or
ports-mgmt/pkg-devel, see
&man.pkg-search.8; for more details.If the Ports Collection is already installed, there are
several methods to query the local version of the ports
tree. To find out which category a port is in, type
whereis file,
where file is the program to be
installed:&prompt.root; whereis lsof
lsof: /usr/ports/sysutils/lsofAlternately, an &man.echo.1; statement can be
used:&prompt.root; echo /usr/ports/*/*lsof*
/usr/ports/sysutils/lsofNote that this will also return any matched files
downloaded into the
/usr/ports/distfiles directory.Another way to find software is by using the Ports
Collection's built-in search mechanism. To use the search
feature, cd to
/usr/ports then run make
search name=program-name where
program-name is the name of the
software. For example, to search for
lsof:&prompt.root; cd /usr/ports
&prompt.root; make search name=lsof
Port: lsof-4.88.d,8
Path: /usr/ports/sysutils/lsof
Info: Lists information about open files (similar to fstat(1))
Maint: ler@lerctr.org
Index: sysutils
B-deps:
R-deps: The built-in search mechanism uses a file
of index information. If a message indicates that the
INDEX is required, run
make fetchindex to download the current
index file. With the INDEX present,
make search will be able to perform the
requested search.The Path: line indicates where to find
the port.To receive less information, use the
quicksearch feature:&prompt.root; cd /usr/ports
&prompt.root; make quicksearch name=lsof
Port: lsof-4.88.d,8
Path: /usr/ports/sysutils/lsof
Info: Lists information about open files (similar to fstat(1))For more in-depth searching, use
make search
key=string or
make quicksearch
key=string, where
string is some text to search
for. The text can be in comments, descriptions, or
dependencies in order to find ports which relate to a
particular subject when the name of the program is
unknown.When using search or
quicksearch, the search string
is case-insensitive. Searching for LSOF will
yield the same results as searching for
lsof.Using pkg for Binary Package
Managementpkg is the next generation
replacement for the traditional &os; package management tools,
offering many features that make dealing with binary packages
faster and easier.pkg is not a replacement for
port management tools like
ports-mgmt/portmaster or
ports-mgmt/portupgrade. These tools can be
used to install third-party software from both binary packages
and the Ports Collection, while
pkg installs only binary
packages.Getting Started with
pkg&os; 8.4 and later includes a bootstrap utility
which can be used to download and install
pkg, along with its manual
pages.To bootstrap the system, run:&prompt.root; /usr/sbin/pkgFor earlier &os; versions,
pkg must instead be installed
from the Ports Collection or as a binary package.To install the port, run:&prompt.root; cd /usr/ports/ports-mgmt/pkg
&prompt.root; make
&prompt.root; make install cleanWhen upgrading an existing system that originally used the
older package system, the database must be converted to the
new format, so that the new tools are aware of the already
installed packages. Once pkg has
been installed, the
package database must be converted from the traditional format
to the new format by running this command:&prompt.root; pkg2ngThis step is not required for new installations that
do not yet have any third-party software
installed.This step is not reversible. Once the package database
has been converted to the pkg
format, the traditional pkg_* tools
should no longer be used.The package database conversion may emit errors as the
contents are converted to the new version. Generally, these
errors can be safely ignored. However, a list of
third-party software that was not successfully converted
will be listed after pkg2ng has finished
and these applications must be manually reinstalled.To ensure that the &os; Ports Collection registers
new software with pkg, and not
the traditional packages format, &os; versions earlier than
10.X require this line in
/etc/make.conf:WITH_PKGNG= yesThe pkg package management
system uses a package repository for most operations. The
default package repository location is defined in
/usr/local/etc/pkg.conf or by the
PACKAGESITE environment variable, which
overrides the configuration file.Additional pkg
configuration options are described in pkg.conf(5).Usage information for pkg is
available in pkg(8) or by running
pkg without additional arguments.Each pkg command argument is
documented in a command-specific manual page. To read the
manual page for pkg install, for example,
run either of these commands:&prompt.root; pkg help install&prompt.root; man pkg-installThe rest of this section demonstrates common binary
package management tasks which can be performed using
pkg. Each demonstrated command
provides many switches to customize its use. Refer to a
command's help or man page for details and more
examples.Obtaining Information About Installed PackagesInformation about the packages installed on a system
can be viewed by running pkg info which,
when run without any switches, will list the package version
for either all installed packages or the specified
package.For example, to see which version of
pkg is installed, run:&prompt.root; pkg info pkg
pkg-1.1.4_1Installing and Removing PackagesTo install a binary package use the following command,
where packagename is the name of
the package to install:&prompt.root; pkg install packagenameThis command uses repository data to determine which
version of the software to install and if it has any
uninstalled dependencies. For example, to install
curl:&prompt.root; pkg install curl
Updating repository catalogue
/usr/local/tmp/All/curl-7.31.0_1.txz 100% of 1181 kB 1380 kBps 00m01s
/usr/local/tmp/All/ca_root_nss-3.15.1_1.txz 100% of 288 kB 1700 kBps 00m00s
Updating repository catalogue
The following 2 packages will be installed:
Installing ca_root_nss: 3.15.1_1
Installing curl: 7.31.0_1
The installation will require 3 MB more space
0 B to be downloaded
Proceed with installing packages [y/N]: y
Checking integrity... done
[1/2] Installing ca_root_nss-3.15.5_1... done
[2/2] Installing curl-7.31.0_1... done
Cleaning up cache files...DoneThe new package and any additional packages that were
installed as dependencies can be seen in the installed
packages list:&prompt.root; pkg info
ca_root_nss-3.15.5_1 The root certificate bundle from the Mozilla Project
curl-7.31.0_1 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.1.4_6 New generation package managerPackages that are no longer needed can be removed with
pkg delete. For example:&prompt.root; pkg delete curl
The following packages will be deleted:
curl-7.31.0_1
The deletion will free 3 MB
Proceed with deleting packages [y/N]: y
[1/1] Deleting curl-7.31.0_1... doneUpgrading Installed PackagesPackages that are outdated can be found with
pkg version. If a local ports tree
does not exist, pkg-version(8) will use the remote
repository catalogue. Otherwise, the local ports tree will
be used to identify package versions.Installed packages can be upgraded to their latest
versions by typing pkg upgrade. This
command will compare the installed versions with those
available in the repository catalogue. When finished, it
will list the applications that have newer versions. Type
y to proceed with the upgrade or
n to cancel the upgrade.Auditing Installed PackagesOccasionally, software vulnerabilities may be discovered
in third-party applications. To address this,
pkg includes a built-in auditing
mechanism. To determine if there are any known
vulnerabilities for the software installed on the system,
run:&prompt.root; pkg audit -FAutomatically Removing Leaf DependenciesRemoving a package may leave behind dependencies which
are no longer required. Unneeded packages that were installed
as dependencies can be automatically detected and removed
using:&prompt.root; pkg autoremove
Packages to be autoremoved:
ca_root_nss-3.13.5
The autoremoval will free 723 kB
Proceed with autoremoval of packages [y/N]: y
Deinstalling ca_root_nss-3.15.1_1... doneBacking Up the Package DatabaseUnlike the traditional package management system,
pkg includes its own package
database backup mechanism. To manually back up the contents
of the package database, run the following command, replacing
pkgng.db with a suitable file
name:&prompt.root; pkg backup -d pkgng.dbAdditionally, pkg includes
a &man.periodic.8; script to automatically perform a daily
back up of the package database. This functionality is
enabled if daily_backup_pkgdb_enable is
set to YES in &man.periodic.conf.5;.To disable the periodic script from backing up the
package database, set
daily_backup_pkgdb_enable to
NO in &man.periodic.conf.5;.To restore the contents of a previous package database
backup, run:&prompt.root; pkg backup -r /path/to/pkgng.dbRemoving Stale PackagesBy default, pkg stores
binary packages in a cache directory defined by
PKG_CACHEDIR in pkg.conf(5). When upgrading
packages with pkg upgrade, old versions
of the upgraded packages are not automatically removed.To remove these outdated binary packages, run:&prompt.root; pkg cleanModifying Package MetadataSoftware within the &os; Ports Collection can
undergo major version number changes. To address this,
pkg has a built-in command to
update package origins. This can be useful, for example, if
lang/php5 is renamed to
lang/php53 so that
lang/php5 can now
represent version 5.4.To change the package origin for the above example,
run:&prompt.root; pkg set -o lang/php5:lang/php53As another example, to update
lang/ruby18 to
lang/ruby19, run:&prompt.root; pkg set -o lang/ruby18:lang/ruby19As a final example, to change the origin of the
libglut shared libraries from
graphics/libglut to
graphics/freeglut, run:&prompt.root; pkg set -o graphics/libglut:graphics/freeglutWhen changing package origins, it is important to
reinstall packages that are dependent on the package with
the modified origin. To force a reinstallation of dependent
packages, run:&prompt.root; pkg install -Rf graphics/freeglutUsing the Ports CollectionThe Ports Collection is a set of
Makefiles, patches, and description files
stored in /usr/ports. This set of files is
used to compile and install applications on &os;. Before an
application can be compiled using a port, the Ports Collection
must first be installed. If it was not installed during the
installation of &os;, use one of the following methods to
install it:Portsnap MethodThe base system of &os; includes
Portsnap. This is a fast and
user-friendly tool for retrieving the Ports Collection and
is the recommended choice for most users. This utility
connects to a &os; site, verifies the secure key, and
downloads a new copy of the Ports Collection. The key is used
to verify the integrity of all downloaded files.To download a compressed snapshot of the Ports
Collection into
/var/db/portsnap:&prompt.root; portsnap fetchWhen running Portsnap for the
first time, extract the snapshot into
/usr/ports:&prompt.root; portsnap extractAfter the first use of
Portsnap has been completed as
shown above, /usr/ports can be updated
as needed by running:&prompt.root; portsnap fetch
&prompt.root; portsnap updateWhen using fetch, the
extract or the update
operation may be run consecutively, like so:&prompt.root; portsnap fetch updateSubversion MethodIf more control over the ports tree is needed or if local
changes need to be maintained,
Subversion can be used to obtain
the Ports Collection. Refer to the
Subversion Primer for a detailed description of
Subversion.Subversion must be installed
before it can be used to check out the ports tree. If a
copy of the ports tree is already present, install
Subversion like this:&prompt.root; cd /usr/ports/devel/subversion
&prompt.root; make install cleanIf the ports tree is not available, or
pkg is being used to manage
packages, Subversion can be
installed as a package:&prompt.root; pkg install subversionCheck out a copy of the ports tree. For better
performance, replace
svn0.us-east.FreeBSD.org with a
Subversion
mirror close to your geographic location:&prompt.root; svn checkout https://svn0.us-east.FreeBSD.org/ports/head /usr/portsAs needed, update /usr/ports after
the initial Subversion
checkout:&prompt.root; svn update /usr/portsThe Ports Collection installs a series of directories
representing software categories with each category having
a subdirectory for each application. Each subdirectory, also
referred to as a ports skeleton, contains a set of files that
tell &os; how to compile and install that program. Each port
skeleton includes these files and directories:Makefile: contains statements that
specify how the application should be compiled and where
its components should be installed.distinfo: contains the names and
checksums of the files that must be downloaded to build the
port.files/: this directory contains
any patches needed for the program to compile and install
on &os;. This directory may also contain other files used
to build the port.pkg-descr: provides a more detailed
description of the program.pkg-plist: a list of all the
files that will be installed by the port. It also tells
the ports system which files to remove upon
deinstallation.Some ports include pkg-message or
other files to handle special situations. For more details
on these files, and on ports in general, refer to the &os;
Porter's Handbook.The port does not include the actual source code, also
known as a distfile. The extract portion
of building a port will automatically save the downloaded
source to /usr/ports/distfiles.Installing PortsportsinstallingThis section provides basic instructions on using the
Ports Collection to install or remove software. The detailed
description of available make targets and
environment variables is available in &man.ports.7;.Before compiling any port, be sure to update the Ports
Collection as described in the previous section. Since
the installation of any third-party software can introduce
security vulnerabilities, it is recommended to first check
for known security issues related to the port. Alternately,
run pkg audit -F before installing a new
port. This command can be configured to automatically
perform a security audit and an update of the vulnerability
database during the daily security system check. For more
information, refer to &man.pkg-audit.8; and
&man.periodic.8;.Using the Ports Collection assumes a working Internet
connection. It also requires superuser privilege.Some third-party DVD products such as the &os; Toolkit
from freebsdmall.com
contain distfiles which can be used to install ports without
an Internet connection. Mount the DVD on
/cdrom. If you use a different mount
point, set the CD_MOUNTPTS make variable.
The needed distfiles will be automatically used if they are
present on the disk. However, the licenses of a few ports do
not allow their inclusion on the DVD. This could be because a
registration form needs to be filled out before downloading or
redistribution is not allowed. In order to install a port not
included on the DVD, a connection to the Internet will still
be required.To compile and install the port, change to the directory
of the port to be installed, then type make
install at the prompt. Messages will indicate
the progress:&prompt.root; cd /usr/ports/sysutils/lsof
&prompt.root; make install
>> lsof_4.88D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===> Extracting for lsof-4.88
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.88D.freebsd.tar.gz.
===> Patching for lsof-4.88.d,8
===> Applying FreeBSD patches for lsof-4.88.d,8
===> Configuring for lsof-4.88.d,8
...
[configure output snipped]
...
===> Building for lsof-4.88.d,8
...
[compilation output snipped]
...
===> Installing for lsof-4.88.d,8
...
[installation output snipped]
...
===> Generating temporary packing list
===> Compressing manual pages for lsof-4.88.d,8
===> Registering installation for lsof-4.88.d,8
===> SECURITY NOTE:
This port has installed the following binaries which execute with
increased privileges.
/usr/local/sbin/lsof
&prompt.root;Since lsof is a program that runs
with increased privileges, a security warning is displayed
as it is installed. Once the installation is complete, the
prompt will be returned.Some shells keep a cache of the commands that are
available in the directories listed in the
PATH environment variable, to speed up lookup
operations for the executable file of these commands. Users
of the tcsh shell should type
rehash so that a newly installed command
can be used without specifying its full path. Use
hash -r instead for the
sh shell. Refer to the documentation
for the shell for more information.During installation, a working subdirectory is created
which contains all the temporary files used during
compilation. Removing this directory saves disk space and
minimizes the chance of problems later when upgrading to the
newer version of the port:&prompt.root; make clean
===> Cleaning for lsof-88.d,8
&prompt.root;To save this extra step, instead use make
install clean when compiling the port.Customizing Ports InstallationSome ports provide build options which can be used to
enable or disable application components, provide security
options, or allow for other customizations. Examples
include www/firefox,
security/gpgme, and
mail/sylpheed-claws.
If the port depends upon other ports which have configurable
options, it may pause several times for user interaction
as the default behavior is to prompt the user to select
options from a menu. To avoid this, run make
config-recursive within the port skeleton to do
this configuration in one batch. Then, run make
install [clean] to compile and install the
port.When using
config-recursive, the list of
ports to configure are gathered by the
all-depends-list target. It is
recommended to run make
config-recursive until all dependent ports
options have been defined, and ports options screens no
longer appear, to be certain that all dependency options
have been configured.There are several ways to revisit a port's build options
menu in order to add, remove, or change these options after
a port has been built. One method is to
cd into the directory containing the
port and type make config. Another
option is to use make showconfig.
Another option is to execute make
rmconfig which will remove all selected options
and allow you to start over. All of these options, and
others, are explained in great detail in
&man.ports.7;.The ports system uses &man.fetch.1; to download the
source files, which supports various environment variables.
The FTP_PASSIVE_MODE,
FTP_PROXY, and FTP_PASSWORD
variables may need to be set if the &os; system is behind
a firewall or FTP/HTTP proxy. See &man.fetch.3; for the
complete list of supported variables.For users who cannot be connected to the Internet all
the time, make fetch can be run within
/usr/ports, to fetch all distfiles, or
within a category, such as
/usr/ports/net, or within the specific
port skeleton. Note that if a port has any dependencies,
running this command in a category or ports skeleton will
not fetch the distfiles of ports from
another category. Instead, use make
fetch-recursive to also fetch the distfiles for
all the dependencies of a port.In rare cases, such as when an organization has a local
distfiles repository, the MASTER_SITES
variable can be used to override the download locations
specified in the Makefile. When using,
specify the alternate location:&prompt.root; cd /usr/ports/directory
&prompt.root; make MASTER_SITE_OVERRIDE= \
ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetchThe WRKDIRPREFIX and
PREFIX variables can override the default
working and target directories. For example:&prompt.root; make WRKDIRPREFIX=/usr/home/example/ports installwill compile the port in
/usr/home/example/ports and install
everything under /usr/local.&prompt.root; make PREFIX=/usr/home/example/local installwill compile the port in /usr/ports
and install it in
/usr/home/example/local. And:&prompt.root; make WRKDIRPREFIX=../ports PREFIX=../local installwill combine the two.These can also be set as environmental variables. Refer
to the manual page for your shell for instructions on how to
set an environmental variable.Removing Installed PortsportsremovingInstalled ports can be uninstalled using pkg
delete. Examples for using this command can be
found in .Alternately, make deinstall can be
run in the port's directory:&prompt.root; cd /usr/ports/sysutils/lsofmake deinstall
===> Deinstalling for sysutils/lsof
===> Deinstalling
Deinstallation has been requested for the following 1 packages:
lsof-4.88.d,8
The deinstallation will free 229 kB
[1/1] Deleting lsof-4.88.d,8... doneIt is recommended to read the messages as the port is
uninstalled. If the port has any applications that depend
upon it, this information will be displayed but the
uninstallation will proceed. In such cases, it may be better
to reinstall the application in order to prevent broken
dependencies.Upgrading PortsportsupgradingOver time, newer versions of software become available
in the Ports Collection. This section describes how to
determine which software can be upgraded and how to perform
the upgrade.To determine if newer versions of installed ports are
available, ensure that the latest version of the ports tree is
installed, using the updating command described in either
or
. On &os; 10
and later, or if the system has been converted to
pkg, the following command will
list the installed ports which are out of date:&prompt.root; pkg version -l "<"For &os; 9.X and lower, the
following command will list the installed ports that are out
of date:&prompt.root; pkg_version -l "<"Before
attempting an upgrade, read
/usr/ports/UPDATING from the top of
the file to the date closest to the last time ports were
upgraded or the system was installed. This file describes
various issues and additional steps users may encounter and
need to perform when updating a port, including such things
as file format changes, changes in locations of
configuration files, or any incompatibilities with previous
versions. Make note of any instructions which match any of
the ports that need upgrading and follow these instructions
when performing the upgrade.To perform the actual upgrade, use either
Portmaster or
Portupgrade.Upgrading Ports Using
PortmasterportmasterThe ports-mgmt/portmaster package or
port is the recommended tool for upgrading installed ports
as it is designed to use the tools installed with &os;
without depending upon other ports. It uses the
information in /var/db/pkg/ to
determine which ports to upgrade. To install this utility
as a port:&prompt.root; cd /usr/ports/ports-mgmt/portmaster
&prompt.root; make install cleanPortmaster defines four
categories of ports:Root port: has no dependencies and is not a
dependency of any other ports.Trunk port: has no dependencies, but other ports
depend upon it.Branch port: has dependencies and other ports
depend upon it.Leaf port: has dependencies but no other ports
depend upon it.To list these categories and search for updates:&prompt.root; portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> ispell-3.2.06_18
===>>> screen-4.0.3
===>>> New version available: screen-4.0.3_1
===>>> tcpflow-0.21_1
===>>> 7 root ports
...
===>>> Branch ports (Have dependencies, are depended on)
===>>> apache22-2.2.3
===>>> New version available: apache22-2.2.8
...
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.9.6_2
===>>> bash-3.1.17
===>>> New version available: bash-3.2.33
...
===>>> 32 leaf ports
===>>> 137 total installed ports
===>>> 83 have new versions availableThis command is used to upgrade all outdated
ports:&prompt.root; portmaster -aBy default, Portmaster will
make a backup package before deleting the existing port.
If the installation of the new version is successful,
Portmaster will delete the
backup. Using will instruct
Portmaster not to automatically
delete the backup. Adding will start
Portmaster in interactive mode,
prompting for confirmation before upgrading each port.
Many other options are available. Read through the
manual page for portmaster(8) for details regarding
their usage.If errors are encountered during the upgrade process,
add to upgrade and rebuild all
ports:&prompt.root; portmaster -afPortmaster can also be used
to install new ports on the system, upgrading all
dependencies before building and installing the new
port. To use this function, specify the location of the
port in the Ports Collection:&prompt.root; portmaster shells/bashUpgrading Ports Using PortupgradeportupgradeAnother utility that can be used to upgrade ports is
Portupgrade, which is available
as the ports-mgmt/portupgrade package
or port. This utility installs a suite of applications
which can be used to manage ports. However, it is dependent
upon Ruby. To install the port:&prompt.root; cd /usr/ports/ports-mgmt/portupgrade
&prompt.root; make install cleanBefore performing an upgrade using this utility, it is
recommended to scan the list of installed ports using
pkgdb -F and to fix all the
inconsistencies it reports.To upgrade all the outdated ports installed on the
system, use portupgrade -a. Alternately,
include to be asked for confirmation
of every individual upgrade:&prompt.root; portupgrade -aiTo upgrade only a specified application instead of all
available ports, use portupgrade
pkgname. It is very
important to include to first upgrade
all the ports required by the given application:&prompt.root; portupgrade -R firefoxIf
is included,
Portupgrade searches for
available packages in the local directories listed in
PKG_PATH. If none are available locally, it
then fetches packages from a remote site. If packages can
not be found locally or fetched remotely,
Portupgrade will use ports. To
avoid using ports entirely, specify .
This last set of options tells
Portupgrade to abort if no
packages are available:&prompt.root; portupgrade -PP gnome2To just fetch the port distfiles, or packages, if
is specified, without building or
installing anything, use . For further
information on all of the available switches, refer to the
manual page for portupgrade.Ports and Disk Spaceportsdisk-spaceUsing the Ports Collection will use up disk space over
time. After building and installing a port, running
make clean within the ports skeleton will
clean up the temporary work directory.
If Portmaster is used to install a
port, it will automatically remove this directory unless
is specified. If
Portupgrade is installed, this
command will remove all work directories
found within the local copy of the Ports Collection:&prompt.root; portsclean -CIn addition, a lot of out-dated source distribution files
will collect in /usr/ports/distfiles over
time. If Portupgrade is installed,
this command will delete all the distfiles that are no longer
referenced by any ports:&prompt.root; portsclean -DTo use Portupgrade to remove
all distfiles not referenced by any port currently installed
on the system:&prompt.root; portsclean -DDIf Portmaster is installed,
use:&prompt.root; portmaster --clean-distfilesBy default, this command is interactive and will prompt
the user to confirm if a distfile should be deleted.In addition to these commands, the
ports-mgmt/pkg_cutleaves package or port
automates the task of removing installed ports that are no
longer needed.Building Packages with
PoudrierePoudriere is a
BSD-licensed utility for creating and testing
&os; packages. It uses &os; jails to set up isolated
compilation environments. These jails can be used to build
packages for versions of &os; that are different from the system
on which it is installed, and also to build packages for i386 if
the host is an &arch.amd64; system. Once the packages are
built, they are in a layout identical to the official mirrors.
These packages are usable by &man.pkg.8; and other package
management tools.Poudriere is installed using
the ports-mgmt/poudriere package
or port. The installation includes a sample configuration
file /usr/local/etc/poudriere.conf.sample.
Copy this file to
/usr/local/etc/poudriere.conf. Edit the
copied file to suit the local configuration.While ZFS is not required on the system
running poudriere, it is beneficial.
When ZFS is used,
ZPOOL must be specified in
/usr/local/etc/poudriere.conf and
FREEBSD_HOST should be set to a nearby
mirror. Defining CCACHE_DIR enables the use
of devel/ccache to cache
compilation and reduce build times for frequently-compiled code.
It may be convenient to put
poudriere datasets in an isolated
tree mounted at /poudriere. Defaults for the
other configuration values are adequate.The number of processor cores detected is used to define how
many builds should run in parallel. Supply enough virtual
memory, either with RAM or swap space. If
virtual memory runs out, compiling jails will stop and be torn
down, resulting in weird error messages.Initialize Jails and Port TreesAfter configuration, initialize
poudriere so that it installs a
jail with the required &os; tree and a ports tree. Specify a
name for the jail using and the &os;
version with . On systems running
&os;/&arch.amd64;, the architecture can be set with
to either i386 or
amd64. The default is the
architecture shown by uname.&prompt.root; poudriere jail -c -j 10amd64 -v 10.0-RELEASE
====>> Creating 10amd64 fs... done
====>> Fetching base.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/base.txz 100% of 59 MB 1470 kBps 00m42s
====>> Extracting base.txz... done
====>> Fetching src.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/src.txz 100% of 107 MB 1476 kBps 01m14s
====>> Extracting src.txz... done
====>> Fetching games.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/games.txz 100% of 865 kB 734 kBps 00m01s
====>> Extracting games.txz... done
====>> Fetching lib32.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/lib32.txz 100% of 14 MB 1316 kBps 00m12s
====>> Extracting lib32.txz... done
====>> Cleaning up... done
====>> Jail 10amd64 10.0-RELEASE amd64 is ready to be used&prompt.root; poudriere ports -c -p local
====>> Creating local fs... done
====>> Extracting portstree "local"...
Looking up portsnap.FreeBSD.org mirrors... 7 mirrors found.
Fetching public key from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Tue Feb 11 01:07:15 CET 2014:
94a3431f0ce567f6452ffde4fd3d7d3c6e1da143efec76100% of 69 MB 1246 kBps 00m57s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Tue Feb 11 01:07:15 CET 2014 to Tue Feb 11 16:05:20 CET 2014.
Fetching 4 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 48 patches.
(48/48) 100.00% done.
done.
Applying patches...
done.
Fetching 1 new ports or files... done.
/poudriere/ports/tester/CHANGES
/poudriere/ports/tester/COPYRIGHT
[...]
Building new INDEX files... done.On a single computer, poudriere
can build ports with multiple configurations, in multiple
jails, and from different port trees. Custom configurations
for these combinations are called sets.
See the CUSTOMIZATION section of &man.poudriere.8; for details
after ports-mgmt/poudriere or
ports-mgmt/poudriere-devel is
installed.The basic configuration shown here puts a single jail-,
port-, and set-specific make.conf in
/usr/local/etc/poudriere.d.
The filename in this example is created by combining the jail
name, port name, and set name:
10amd64-local-workstation-make.conf.
The system make.conf and this new file
are combined at build time to create the
make.conf used by the build jail.Packages to be built are entered in
10amd64-local-workstation-pkglist:editors/emacs
devel/git
ports-mgmt/pkg
...Options and dependencies for the specified ports are
configured:&prompt.root; poudriere options -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglistFinally, packages are built and a package
repository is created:&prompt.root; poudriere bulk -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglistCtrlt
displays the current state of the build.
Poudriere also builds files in
/poudriere/logs/bulk/jailname
that can be used with a web server to display build
information.Packages are now available for
installation from the poudriere
repository.For more information on using
poudriere, see &man.poudriere.8;
and the main web site, .Post-Installation ConsiderationsRegardless of whether the software was installed from a
binary package or port, most third-party applications require
some level of configuration after installation. The following
commands and locations can be used to help determine what was
installed with the application.Most applications install at least one default
configuration file in /usr/local/etc.
In the case where an application has a large number of
configuration files, a subdirectory will be created to hold
them. Often, sample configuration files are installed which
end with a suffix such as .sample. The
configuration files should be reviewed and possibly
edited to meet the system's needs. To edit a sample file,
first copy it without the .sample
extension.Applications which provide documentation will install
it into /usr/local/share/doc and many
applications also install manual pages. This documentation
should be consulted before continuing.Some applications run services which must be added
to /etc/rc.conf before starting the
application. These applications usually install a startup
script in /usr/local/etc/rc.d. See
Starting
Services for more information.Users of &man.csh.1; should run
rehash to rebuild the known binary list
in the shells PATH.Use pkg info to determine which
files, man pages, and binaries were installed with the
application.Dealing with Broken PortsWhen a port does not build or
install, try the following:Search to see if there is a fix pending for the port in
the Problem
Report database. If so, implementing the proposed
fix may fix the issue.Ask the maintainer of the port for help. Type
make maintainer
in the ports skeleton or read the port's
Makefile to find the maintainer's
email address. Remember to include the
$FreeBSD: line from the port's
Makefile and the output leading up to
the error in the email to the maintainer.Some ports are not maintained by an individual but
instead by a mailing
list. Many, but not all, of these addresses look
like freebsd-listname@FreeBSD.org.
Take this into account when sending an email.In particular, ports shown as maintained by
ports@FreeBSD.org are not
maintained by a specific individual. Instead, any fixes
and support come from the general community who subscribe
to that mailing list. More volunteers are always
needed!If there is no response to the email, use
- &man.send-pr.1; to submit a bug report using the
+ Bugzilla to submit a bug report using the
instructions in Writing
&os; Problem Reports.Fix it! The Porter's
Handbook includes detailed information on the
ports infrastructure so that you can fix the occasional
broken port or even submit your own!Install the package instead of the port using the
instructions in .
Index: head/en_US.ISO8859-1/htdocs/advocacy/myths.xml
===================================================================
--- head/en_US.ISO8859-1/htdocs/advocacy/myths.xml (revision 46641)
+++ head/en_US.ISO8859-1/htdocs/advocacy/myths.xml (revision 46642)
@@ -1,428 +1,428 @@
]>
&title;$FreeBSD$
As the BSD projects (DragonFlyBSD, FreeBSD, NetBSD, and OpenBSD) have grown in size,
a number of persistent myths have grown up around them. Some of these are
perpetuated by well meaning but misguided individuals, others by people
pursuing their own agendas.
This page aims to dispel those myths while remaining as dispassionate
as possible.
Note: Throughout this page, ``*BSD'' refers to all
four of the BSD Projects. Where a myth or response is specific to a
particular project it is indicated as such.
*BSD has a closed development
model, it's more ``Cathedral'' than ``Bazaar''
Eric Raymond wrote an influential paper, ``The
Cathedral and the Bazaar'' in which the Linux development model
(and the model Eric used for fetchmail) is held up as an
example of how to do ``open'' development. By contrast, the model
employed by *BSD is often characterized as closed.
The implicit value judgment is that ``bazaar'' (open) is good, and
``cathedral'' (closed) is bad.
If anything, *BSD's development model is probably
more akin to the ``bazaar'' that Eric describes than
either Linux or fetchmail.
Consider the following;
All the *BSD projects: The current, bleeding edge source
code for FreeBSD, NetBSD, and OpenBSD is available for anyone to download
from the Internet, 24 hours a day. You don't need to wait for
someone else to roll a release.
FreeBSD: An installable snapshot of the current
progress is made weekly. These snapshots can be installed
exactly like an ordinary release, and do not require installation
over an existing system.
OpenBSD: Installable snapshots are generated daily and if
Theo thinks they are good enough, he uploads them to the mirrors.
Contrast this with Linux, where new kernel distributions are
made available on an ad-hoc basis, and where the frequency of
each Linux distribution release is at the whim of the individual
vendor.
There's none of the Linux fanfare every time a new kernel is
released, simply because for most *BSD users it is an every day
event.
Anyone can submit patches, bug reports, documentation, and
- other contributions. They can do this by using the send-pr
- program installed on their *BSD system, or by using a web based
+ other contributions. They can do this
+ by using a web based
interface.
Pointers to this system litter the documentation.
Not everyone can commit code changes to the *BSD code. You
need to be a committer first. Typically, people are offered
``commit privs'' after they have made a few well-thought out
- submissions to the project using send-pr or similar.
+ submissions to the project using Bugzilla or similar.
This is identical to the Linux mechanism. Only one person is
(notionally) allowed to change the Kernel, Linus. But specific areas
(such as the networking code) are delegated to other people.
Aside: Nik (nik@FreeBSD.org) is a case in point. After making
several submissions to the FreeBSD Documentation Project and
web pages, he was offered ``commit privs'' so that he did not
have to keep bothering other committers to commit the changes. He
never had to ask for them, they were freely given.
You cannot make your own distributions
or derivative works of *BSD
You can. You just need to say in the documentation and source
files where the code is derived from. A bunch of derivative
projects exists:
DragonflyBSD
started as a code fork from
FreeBSD 4.X, but it has since its own user community and
development goals.
TrustedBSD
provides a set of trusted operating system
extensions to the FreeBSD operating system, targeting the
Common Criteria for Information Technology Security
Evaluation (CC). This project is still under development,
and much of the code is destined to make its way back into
the base FreeBSD operating system, but the development
takes place separately.
Hybrid Cluster is
a web cluster, based on FreeBSD and ZFS, which provides data
redundancy and automated load balancing of standard LAMP
websites and applications.
Frenzy is
another live-CD distribution, but customized
for administering tasks. It contains software for hardware
tests, file system checks, security checks, network setup
and analysis.
PicoBSD
is a tailored distribution of FreeBSD that fits
on a floppy. It is great for turning diskless 386 PC into a
router or a network print server. It is a part of the FreeBSD
source tree, see /usr/src/release/picobsd.
NanoBSD is another
project to produce reduced versions
of FreeBSD to put it on a Compact Flash card or other mass
storage. It is also a part of the FreeBSD source tree, see
/usr/src/tools/tools/nanobsd.
TinyBSD is
a set of tools made up of shell scripts designed to allow easy
development of Embedded Systems based on FreeBSD.
ThinBSD is a small
FreeBSD based boot image that allows a standard PC to act as
a diskless thin client for a Microsoft Windows RDP server or
an X terminal. It is entirely configured via DHCP.
PC-BSD is a desktop
oriented FreeBSD derivative. It is
intended to be easy to install and well-supported by its
community.
DesktopBSD is
another FreeBSD based operating system
customized for desktop usability.
Gentoo/FreeBSD
is an effort by the Gentoo Project to port their complete
administration facilities to take advantage of the reliable
FreeBSD kernel and userland. This project is purely
incomplete and experimental.
Debian
GNU/kFreeBSD is a port of the Debian GNU userland
tools to the &os; kernel. It takes advantage of the devfs(8)
implementation (versus three discordant Linux interfaces),
security features (like jails, ipfw, and pf), and ZFS, among
other things.
m0n0wall is
a FreeBSD based firewall system that has
many of the features of expensive firewalls like web
interface, reset to factory defaults, stateful packet
filtering, NAT/PAT redirection, DHCP client and server,
caching DNS forwarder and more.
pfSense is an open source
firewall derived from the m0n0wall firewall system with several
different goals and features, such as OpenBSD's Packet Filter (PF),
FreeBSD 6.1, ALTQ support for excellent packet queuing and
finally an integrated package management system for extending the
environment with new features.
The Whistle Interjet: A ``network appliance'' that acts as a
router, web server, mailhost (and other functionality), and can be
configured using a web browser. The underlying operating system is
FreeBSD, and Whistle have contributed many of their code
enhancements back to the FreeBSD project (while keeping enough of
them proprietary that they can stay in business).
Similarly to DragonflyBSD, OpenBSD was not a standalone project,
it started as a spinoff from the NetBSD project, and has since evolved
its own distinctive approach.
*BSD makes a great server, but a poor
(&unix;) desktop
*BSD makes a great server. It also makes a great desktop. Many of
the requirements for a server (responsiveness under load, stability,
effective use of system resources) are the same requirements as for a
desktop machine.
*BSD has access to the same desktop tools (KDE, GNOME, Firefox,
windowmanagers) as Linux. And ``office'' applications such as
OpenOffice suite work under *BSD too.
While the BSD codebase may be more than 20 years old, it is neither
outdated nor dying. Many professional users like the stability that years
of testing has provided FreeBSD.
The *BSD projects are at war with one another,
splinter groups form each week
No. While occasional advocacy may get a touch heated, the *BSD flavors
continue to work with one another. FreeBSD's Alpha port was initially
heavily based on the work done by the NetBSD team. Both NetBSD and
OpenBSD used the FreeBSD ports collection to bootstrap their own port
sets. FreeBSD and NetBSD both integrate security fixes first discovered
by the OpenBSD team.
The FreeBSD and NetBSD projects separated more than ten years
ago. OpenBSD and DragonflyBSD are the only new BSD projects to
split off in the last ten years.
The *BSD projects cooperate in other areas as well. For example, the
monthly publication DaemonNews
is a collaborative effort by members of all four projects.
You can't cluster *BSD systems (parallel
computing)
The following URLs should disprove this;
http://www.epm.ornl.gov/pvm/
The Parallel Virtual Machine is nothing more than a software package that makes
setting up a Cluster simple. The source code is freely available, and will run
on FreeBSD without much problem.
The free software community started running on predominantly BSD
systems (SunOS and similar). *BSD users can generally compile software
written for these systems without needing to make any changes.
In addition, each *BSD project uses a ``ports'' system to make the
building of ported software much easier.
FreeBSD: There are currently more than 24,000
applications ready to download and install in the FreeBSD ports
collection. On i386 and AMD64, the Linux emulation layer will
also run the vast majority of Linux applications. On the AMD64 and Itanium
architectures there is a compatibility layer to run 32-bit FreeBSD binaries.
NetBSD: The Linux emulation layer will run the vast majority of
i386 Linux applications, and the majority of SunOS4 applications can be
run on a SPARCStation.
OpenBSD: There are currently more than 3700 applications
ready to download and install in the OpenBSD ports collection. The Linux
emulation layer will also run the vast majority of i386 Linux
applications, and the majority of SunOS4 applications can be run on a
SPARCStation.
Both NetBSD and OpenBSD are able to use applications in FreeBSD's ports
collection with minimal effort. Their lower number of ported
applications reflects this.
It is true that most companies when porting to PC Unix will choose Linux
first. Fortunately, *BSD's Linux emulation layer will run these
programs (Acrobat, StarOffice, Mathematica, WordPerfect, Quake, Intel
ICC compiler, Compaq's Alpha compiler ...)
with few, if any, problems.
As a historical note, the first version of Netscape Navigator that ran
on FreeBSD with Java support was the Linux version. Now you can
also use a native FreeBSD version of Mozilla with a native Java
plugin, all compiled conveniently from the ports!
After running portsnap to obtain the most
recent ports tree.
After running portupgrade -a or
portmaster -a to ensure that all applications are
up-to-date. Do not forget to read in /usr/ports/UPDATING
first before you upgrade those installed ports.
After searching through the FreeBSD GNOME
Mailing
list archives to see if the problem has already been
reported.
After deciding whether the problem is FreeBSD-specific,
or is a bug in an application that would affect all users,
on all operating systems. If you cannot determine if the
problem is FreeBSD-specific or not, then send your
problem to the freebsd-gnome mailing
list, and we can help decide where the problem lies.
2. What to report?
Always report as much information as you can. Too much
information is always preferable to too little information.
Superfluous information can be filtered out; developers like
to play guessing games with code, not with bug reports.
A good bug report should at least include the following
information:
Exact version of the operating system (usually output of
uname -a).
List of all packages installed on your system (output of
pkg_info).
Your environment (output of /usr/bin/env).
If you are building from ports, note approximately how
long it has been since you last updated your ports tree. If
it has been more than a day, or if you have not run
portupgrade -a or portmaster -a,
do not bother sending a bug report until you have run
portsnap and portupgrade/portmaster.
Information specific for each type of breakage:
If a port will not build, provide a full log of the
- unsuccessful build by either uploading it to any website,
+ unsuccessful build by uploading it to any website or
copy-and-paste to http://freebsd-gnome.pastebin.com,
- or send-pr(1) with attachment. Try to avoid sending any
+ href="http://freebsd-gnome.pastebin.com">http://freebsd-gnome.pastebin.com.
+ Try to avoid sending any
attachments to the mailing list, because attachments sent
to FreeBSD mailing lists are usually discarded by the
mailing list software.
If a program produces a core dump, provide a
back trace. Back traces are only useful if the
application (and possibly its dependencies) are
compiled with debugging symbols. See these
instructions
for more information on obtaining useful back
traces. In general, though, you can build and
install your port with the following command
to produce binaries that will have useful
debugging symbols: make WITH_DEBUG="yes" install
If an application produces unexpected behavior,
provide a clear and detailed description, including a
description of the behavior that you were expecting.
If you have a solution or a workaround for the problem, then include
it into your report as well, even if you are not quite sure that
it is a proper fix. Even if the fix is not quite right, it could still
point others in the right direction.
3. Where to report?
Once you are sure it is a new problem, there are several ways
to report a bug in GNOME running on FreeBSD: you could
send a report to the
freebsd-gnome mailing
list, file a problem report in the
FreeBSD bug
reporting system, send your report to the application's
developers via the GNOME
bug tracking system, or
any combination of those.
If the problem has to do with an application's
behavior, report the problem directly to the application's
developers through the GNOME project's
bug tracking system
If the problem is quite serious, not necessarily
FreeBSD-specific, and you have a fix available, report
it to both the FreeBSD GNOME team and the application's
developers. This way, the application's developers can apply
the patch upstream, and the FreeBSD GNOME team can apply the
patch immediately to the ports tree without needing to wait
for the next release.