diff --git a/en_US.ISO8859-1/articles/5-roadmap/article.sgml b/en_US.ISO8859-1/articles/5-roadmap/article.sgml
index 2d8161335a..c0e7c1f503 100644
--- a/en_US.ISO8859-1/articles/5-roadmap/article.sgml
+++ b/en_US.ISO8859-1/articles/5-roadmap/article.sgml
@@ -1,668 +1,681 @@
%man;
%freebsd;
%authors;
%teams;
%mailing-lists;
+
+%trademarks;
+
RELENG_3">
RELENG_4">
RELENG_5">
RELENG_5_1">
RELENG_5_2">
HEAD">
]>
The Roadmap for 5-STABLEThe &os; Release Engineering Team$FreeBSD$2003The &os; Release
Engineering Team
+
+
+ &tm-attrib.freebsd;
+ &tm-attrib.ieee;
+ &tm-attrib.intel;
+ &tm-attrib.sparc;
+ &tm-attrib.sun;
+ &tm-attrib.opengroup;
+ &tm-attrib.general;
+ Introduction and BackgroundAfter nearly three years of work, &os; 5.0 was released in January
of 2003. Features like the GEOM block layer, Mandatory Access Controls,
- ACPI, sparc64 and ia64 platform support, and UFS snapshots, background
+ ACPI, &sparc64; and ia64 platform support, and UFS snapshots, background
filesystem checks, and 64-bit inode sizes make it an exciting operating
system for both desktop and production users. However, some important
features are not complete. The foundations for fine-grained locking
and preemption in the kernel exist, but much more work is left to be
done. Work on Kernel Schedulable Entities (KSE), similar to Scheduler
Activations, has been ongoing but needs a push to realize its benefit.
Performance compared to &os; 4.X has
declined and must be restored and surpassed.This is somewhat similar to the situation that &os; faced in the
3.X series. Work on 3-CURRENT trudged along
seemingly forever, and finally a cry was made to just ship it and
clean up later. This decision resulted in the 3.0 and 3.1 releases
being very unsatisfying for most, and it wasn't until 3.2 that the
series was considered stable. To make matters worse, the &t.releng.3;
branch was created along with the 3.0 release, and the &t.releng.head; branch was
allowed to advance immediately towards 4-CURRENT. This resulted in a
quick divergence between &t.releng.head; and &t.releng.3;, making maintenance of the
&t.releng.3; branch very difficult. &os; 2.2.8 was left for quite a while
as the last production-quality version of &os;.Our intent is to avoid repeating that scenario with &os; 5.x.
Delaying the &t.releng.5; branch until it is stable and production quality
will ensure that it stays maintainable and provides a compelling reason
to upgrade from 4.X, To do this, we must
identify the current areas of weakness and set clear goals for
resolving them. This document contains what we as the release
engineering team feel are the milestones and issues that must be
resolved for the &t.releng.5; branch. It does not dictate every aspect of
&os; development, and we welcome further input. Nothing that follows
is meant to be a sleight against any person or group, or to trivialize
any work that has been done. There are some significant issues,
though, that need decisive and unbiased action.Major issuesThe state of SMPng and kernel lockdown is the biggest concern for
5.X. To date, few major systems have come
out from under the kernel-wide mutex known as Giant.
The SMP status page at
provides a comprehensive breakdown
of the overall SMPng status. Status specific to SMPng progress in
device drivers can be found at at
.
In summary:VM: the kmem_malloc(M_NOWAIT) path no longer needs Giant held.
The kmem_malloc(M_WAITOK) path is in progress and is expected to be
finished in the coming weeks. Other facets of the VM system, like
the VFS interface, buffer/cache, etc, are largely untouched.GEOM: The GEOM block layer was designed to run free of Giant,
but at this time no block drivers can run without Giant.
Additionally, it has the potential to suffer performance loss due
to its upcall/downcall data paths happening in kernel threads.
Lightweight context switches might help this.Network: Locking of the TCP and UDP portions of the stack is
complete. Work is in progress to lock up the IP stack, including
the routing tree, ARP code, raw IP, and ifaddr and inet data
structures. IPv6 has been lightly touched during the inp locking
but is hindered by the KAME code being significantly out of date.
Work has not started on any of the other protocols such as
AppleTalk, XNS, or IPX. Locking of the socket layer is in progress
but has been largely untested. None of the hardware drivers or
Ethernet layers have been locked.VFS: Initial pre-cleanup started.buffer/cache: Initial work complete.Proc: Work on locking the proc structure was ongoing for a
while but seems to have stalled.CAM: No significant work has occurred on the CAM SCSI
layer.Newbus: some work has started on locking down the device_t
structure.Pipes: complete with the exception of VM-related
optimizations.File descriptors: complete.Process accounting: jails, credentials, MAC labels, and
scheduler are out from under Giant.MAC Framework: completeTimekeeping: completekernel encryption: crypto drivers and core &man.crypto.4; framework are
Giant-free. KAME IPsec and FAST IPSec have not been locked.Sound subsystem: completekernel preemption: preemption for interrupt threads is enabled.
However, contention due to Giant covering much of the kernel and
most of the device driver interrupt routines causes excessive
context switches and might actually be hurting performance. Work
is underway to explore ways to make preemption be
conditional.Another issue with SMPng is interrupt latency. The overhead of
doing a complete context switch to a kernel interrupt thread is high
and shows noticeable latency. Work is ongoing to implement lazy
context switching on all platforms. Fine grained locking of drivers
will also help this, as will converting drivers to be as efficient as
possible in their interrupt routines.Next, the state of KSE must resolved for &t.releng.5;. Work on it has
slowed noticeably in the past 6 months but appears to be picking up
again. There are a number of issues that must be addressed:The userland threading library, currently called libkse, is
immature and has not been used for any significant threaded
application.KSE has the potential to uncover latent race conditions and
create new ones. An audit needs to be performed to ensure that no
obvious problems exist.According to the release schedule below, KSE kernel and userland
components must be functionality complete by June 2003 in order to be
included in the &t.releng.5; branch. For security and stability reasons,
if KSE cannot be finished in time then, by default, all KSE-specific
syscalls should be modified to return ENOSYS and all other KSE-specific
interfaces disabled. Deprecating KSE from &t.releng.5; but keeping it in
the &t.releng.head; branch will pose problems in porting bugfixes and features
between the two branches, so every effort should be made to finish it
on time.Goals for 5-STABLEThe goals for the &t.releng.5; branch point are:All subsystems and interfaces must be mature enough to be
maintainable for improvements and bug fixes.Equal or better stability from &os; 4.8.No functional regressions from 4.8. It is important to make
sure that users do not avoid upgrading to 5.x because of lost
functionality.Performance on par with &os; 4.8 for most common operations.
Both UP and SMP configurations should be evaluated. SMP has the
potential to perform much better than
4.X, though for the purposes of creating
the &t.releng.5; branch, comparable performance between the two should
be acceptable.It is unrealistic to expect that the SMPng project will be fully
complete by &t.releng.5;, or that performance will be significantly better
than 4.X. However, focusing on a subset of
the outstanding tasks will give enough benefit for the branch to be
viable and maintainable. To break it down:ABI/API/Infrastructure stability - Enough infrastructure must
be in place and stable to allow fixes from &t.releng.head; to easily and
safely be merged into &t.releng.5;. Also, we must draw a line as to
what subsystems are to be locked down when we go into
5-STABLE.SMPngVM: Most codepaths, others than the ones that interact with
VFS, should be Giant-free for &t.releng.5;.Network: Taking the network stack out from under Giant poses
the risk of uncovering latent bugs and races. Locking it down
but not removing Giant imposes further performance penalties. A
decision on which parts of the network stack should be locked and
taken out from under Giant for &t.releng.5; should be made no later
than March 15. Work on the IP, TCP, UDP,raw IP, routing sockets,
- and Unix domain sockets stands a good chance of being complete in
+ and &unix; domain sockets stands a good chance of being complete in
time for &t.releng.5;.If the decision is made to not lift Giant from the stack,
then the locks in these layers could be optimized out with a
kernel config option. Having a Giant-free path from the the
hardware layer to the IP queues should be investigated as it
could allow significant performance gains in the network
benchmarks. If this can be achieved then the hardware interface
layer needs to allow for drivers to incrementally become free of
Giant. Locking down at least two Ethernet drivers would be
highly desirable. If the semantics are too complex to have the
stack free of Giant but not the hardware drivers, investigation
should be done into making it configurable.Lesser-used network stacks like netatalk, netipx, etc, should
not break while this work is going on. However, locking them is
not a high priority. Special kernel config options might be
needed in order for these layers to operate with the rest of the
stack being locked and Giant free.GEOM: At least 2 block drivers should be locked in order to
demonstrate that others can also be locked without changing the
interface to GEOM. The ATA driver is a good candidate for this,
though caution should be taken as it is also extremely
high-profile and any problems with it will affect nearly all
users of &os;.Lazy context switching: sparc64 is the only platform that
performs lazy context switching when entering the kernel. The
performance gains promised by this are significant enough to
require that it be implemented for all other Tier-1
platforms.KSE: The kernel side of KSE must be functionally complete and
have undergone a security audit. libkse must be complete enough to
demonstrate a real-world application running correctly on it using
- the standard POSIX Threads API. Examples would be apache 2.0,
- Java, and/or mozilla. A functional regression test suite is also a
+ the standard &posix; Threads API. Examples would be apache 2.0,
+ &java;, and/or mozilla. A functional regression test suite is also a
requirement for &t.releng.5; and should test signal delivery,
scheduling, performance, and process security/credentials for both
KSE and non-KSE processes. KSE kernel and userland components must
also reach the same level of functionality for all Tier-1 platforms
in both UP and SMP configurations. The definition of Tier-1
platforms can be found in
.
- busdma interface and drivers: architectures like PAE/i386 and
+ busdma interface and drivers: architectures like PAE/&i386; and
sparc64 which don't have a direct mapping between host memory
address space and expansion bus address space require the
elimination for vtophys() and friends. The busdma interface was
created to handle exactly this problem, but many drivers do not use
it yet. The busdma project at
tracks the
progress of this and should be used to determine which drivers
must be converted for &t.releng.5; and which can be left behind.
Also, there has been talk by several developers and the original
author to give the busdma interface a minor overhaul. If this is
to happen, it needs to happen before &t.releng.5;. Otherwise,
differences between the old and new API will make driver
maintenance difficult.PCI resource allocation: PC2003 compliance requires that x86
systems no longer configure PCI devices from the system BIOS,
leaving this task solely to the OS. &os; must gain the ability to
manage and allocate PCI memory resources on its own. Implementing
this should take into account cardbus, PCI-HotPlug, and laptop
dockstation requirements. This feature will become increasingly
critical through the lifetime of &t.releng.5;, and therefore is a
requirement for the &t.releng.5; branch.Performance: most performance gains hinge on the progress of
SMPng Areas that should be concentrated on are:Storage I/O: I/O performance suffers from two problems, too
many expensive context switches, and too much work being done
in interrupt threads. Specifically, it takes 3 context
switches for most drivers to get from the hardware completion
interrupt to unblocking the user process: one for the
interrupt thread, one for the GEOM g_up thread, and one to get
back to the user thread. Drivers that attempt to be efficient
and quick in their interrupt handlers (as all should be)
usually also schedule a taskqueue, which adds a context switch
in between the interrupt thread and the g_up thread and brings
the total up to 4. Two things need to be done to attack
this:Make all drivers defer most of their processing out of
their interrupt thread. Significant performance gains have
been shown recently in the &man.aac.4; driver by making its
interrupt handler be INTR_MPSAFE and moving
all processing to a taskqueue.investigate eliminating the taskqueue context switch by
adding a callback to the g_up thread that allows a driver to
do its interrupt processing there instead of in the
taskqueue.Network: Network drivers suffer from the interrupt latency
previously mentioned as well as from the network stack being
partially locked down but not free from Giant. Possible
strategies for addressing this are described in the previous
section.Other locking - XXX?Benchmarks and performance testing: Having a source of reliable
and useful benchmarks is essential to identifying performance
problems and guarding against performance regressions. A
performance team that is made up of people and
resources for formulating, developing, and executing benchmark
tests should be put into place soon. Comparisons should be made
against both &os; 4.X and Linux 2.4.x.
Tests to consider are:the classic worldstonewebstone: www/webstoneFstress: ApacheBench: www/p5-ApacheBenchnetperf: benchmarks/netperfWeb Polygraph:
Note: does not compile with gcc 3.x yet.Features:ACPI: Intel's ACPI power management and device configuration
subsystem has become an integral part of &os;'s x86 and ia64
device configuration model. However, many bugs exist in Intel's
vendor code, our OS-specific code, and motherboard BIOSes, causing
many ACPI-enabled systems to fail to boot, misdetect drivers,
and/or have many other problems. Fixing these problems seems to
be an uphill battle and is often times causing a poor
first-impression of &os; 5.0. Most x86 systems can function with
ACPI disabled, and logic should be added to the boot loader and
sysinstall to allow users to easily and intuitively turn it off.
Turning off ACPI by default is prone to problems also as many
newer systems rely on it to provide correct interrupt routing
information. Also, a centralized resource should be created to
track ACPI problems and solutions. Linux uses the same Intel
vendor sources as &os;, so we should investigate how they have
handled some of the known problems.NEWCARD/OLDCARD: The NEWCARD subsystem was made the default
for &os; 5.0. Unfortunately, it contains no support for
non-Cardbus bridges and falls victim to interrupt routine
problems on some laptops. The classic 16-bit bridge support,
OLDCARD, still exists and can be compiled in, but this is highly
inconvenient for users of older laptops. If OLDCARD cannot be
completely deprecated for &t.releng.5;, then provisions must be made
to allow users to easily install an OLDCARD-enabled kernel.
Documentation should be written to help transition users from
OLDCARD to NEWCARD and from &man.pccardd.8; to
&man.devd.8;. The power management and
dumpcis functionality of &man.pccardc.8; needs to be
brought forward to work with NEWCARD, along with the ability to
load CIS quirk entries. Most of this functionality can be
integrated into &man.devd.8; and
&man.devctl.4;.New scheduler framework: The new scheduler framework is in
place, and users can select between the classic 44bsd scheduler
and the new ULE scheduler. A scheduler that demonstrates
processor affinity, HyperThreading and KSE awareness, and no
regressions in performance or interactivity characteristics must
be available for &t.releng.5;.sparc64 local console: neither syscons nor vt work on
sparc64, leaving it with only serial and fake OFW
console support. This is a major support hole for what is a
Tier-1 platform. Whether syscons can be shoe-horned in or
wscons be adopted from NetBSD is up for debate. However,
sparc64 must have local console support for &t.releng.5;. Having
this will also enable the XFree86 server to run, which is also a
requirement for &t.releng.5;.gcc/toolchain: gcc 3.3 might be available in time for
&t.releng.5; and might offer some attractive benefits, but also
likely to introduce ABI incompatibility with prior gcc versions.
ABI compatibility should be locked down for the &t.releng.5;
branch.There has also been a request to move /usr/include/g++ to
/usr/include/g++-v3 to be more compliant with the stock behavior
of gcc. This should also be investigated for &t.releng.5;.gdb: gdb from the base system should work for sparc64. It
should also understand KSE thread semantics, assuming that KSE
is included in the &t.releng.5; branch. gdb 5.3 is available and
there are reports that it should address the sparc64 issue.&man.disklabel.8; regressions: The biggest casualty of the
introduction of GEOM appears to be the disklabel utility. The
option gives unpredictable results in most
cases now and should be removed or fixed. Work is planned for a
new unified interface for modifying labels and slices, however
this should not preclude disklabel from being fixed.Documentation:The manual pages, Handbook, and FAQ should be free from
content specific to &os; 4.X, i.e. all
text should be equally applicable to &os;
5.X. The installation section of the
handbook needs the most work in this area.The release documentation needs to be complete and accurate
for all Tier-1 architectures. The hardware notes and
installation guides need specific attention.If &os; 5.1 is not the branch point for &t.releng.5; then the
Early Adopters Guide needs to be updated. This document should
then be removed just before the release closest to the &t.releng.5;
branch point.ScheduleIf branching &t.releng.5; at the 5.1 release is paramount, 5.1 will
probably need to move out by at least 3 months. The schedule would
be:Jun 30, 2003: KSE and SMPng feature freezeAug 4, 2003: 5.1-BETA, general code freezeAug 18, 2003: 5.1-RC1, &t.releng.5; and &t.releng.5.1; branchedAug 25, 2003: 5.1-RC2Sept 1, 2003: 5.1-RELEASETaking an incremental approach might be more beneficial. Releasing
5.1 in time for USENIX ATC 2003 will provide a wide audience for
productive feedback and will keep &os; visible. In this scenario, 5.1
should offer a significant improvement over 5.0 in terms of bug fixes
and performance. Lockdowns and improvements to the storage subsystem
and scheduler should be expected, the NEWCARD/OLDCARD issues should be
addressed, and all known bugs and regressions from the 5.0 errata list
should be fixed. KSE and other SMPng tasks that cannot finish in time
for 5.1 should also not reduce the stability of the release. The
schedule for this would be:May 5, 2003: 5.1-BETA, general code freezeMay 19, 2003: 5.1-RC1, &t.releng.5.1; branchedMay 27, 2003: 5.1-RC2Jun 2, 2003: 5.1-RELEASEJun 30, 2003: KSE and SMPng feature freezeSept 1, 2003: 5.2-BETA, general code freezeSept 15, 2003: 5.2-RC1, &t.releng.5; and &t.releng.5.2; branchedSept 22, 2003: 5.2-RC2Sept 29, 2003: 5.2-RELEASEPost &t.releng.5; direction As with all -STABLE development streams, the focus should be bug
fixes and incremental improvements. Just like normal, everything
should be vetted through the &t.releng.head; branch first and committed to
&t.releng.5; with caution. As before, new device drivers, incremental
features, etc, will be welcome in the branch once they have been proven
in &t.releng.head;.Further SMPng lockdowns will be divided into two categories, driver
and subsystem. The only subsystem that will be sufficiently locked
down for &t.releng.5; will be GEOM, so incrementally locking down device
drivers under it is a worthy goal for the branch. Full subsystem
lockdowns will have to be fully tested and proven in &t.releng.head; before
consideration will be given to merging them into &t.releng.5;.
diff --git a/en_US.ISO8859-1/articles/checkpoint/article.sgml b/en_US.ISO8859-1/articles/checkpoint/article.sgml
index 6b90070064..16301a234a 100644
--- a/en_US.ISO8859-1/articles/checkpoint/article.sgml
+++ b/en_US.ISO8859-1/articles/checkpoint/article.sgml
@@ -1,426 +1,437 @@
%man;
+
+
+%trademarks;
]>
- Integration of Checkpoint VPN-1/Firewall-1 and FreeBSD IPsec
+ Integration of Check Point VPN-1/Firewall-1 and FreeBSD IPsecJonOrbetonjono@securityreports.comMattHitemhite@hotmail.com$FreeBSD$2001, 2002, 2003Jon Orbeton
&legalnotice;
+
+ &tm-attrib.freebsd;
+ &tm-attrib.check-point;
+ &tm-attrib.general;
+
+
This document explains how to configure a VPN
- tunnel between FreeBSD and Checkpoint's VPN-1/Firewall-1. Other
+ tunnel between FreeBSD and Check Point's
+ VPN-1/
+ Firewall-1. Other
documents provide similar information, but do not contain instructions
specific to VPN-1/Firewall-1 and its integration with FreeBSD. These
documents are listed at the conclusion of this paper for further
reference.PrerequisitesThe following is a diagram of the machines and networks referenced
in this document.External Interface External Interface
208.229.100.6 216.218.197.2
| |
+--> Firewall-1 <--> Internet <--> FreeBSD GW <--+
| |
FW-1 Protected Nets Internal Nets
199.208.192.0/24 192.168.10.0/24FW-1 net and FreeBSD netThe FreeBSD gateway GW serves as a firewall and
NAT device for internal nets.The FreeBSD kernel must be compiled to support IPsec. Use the
following kernel options to enable IPsec support in your kernel:options IPSEC
options IPSEC_ESP
options IPSEC_DEBUGFor instructions on building a custom kernel, refer to the
FreeBSD
handbook. Please note that IP
protocol 50 (ESP) and UDP
- port 500 must be open between the Firewall-1
+ port 500 must be open between the Firewall-1
host and the FreeBSD GW.Also, racoon must be installed to support
key exchange. Racoon is part of the FreeBSD
ports collection in security/racoon.
The racoon configuration file will be covered
later in this document.Firewall-1 Network Object ConfigurationBegin by configuring the Firewall-1 Policy. Open the Policy Editor
on the Firewall-1 Management server and create a new
Workstation Network Object representing FreeBSD
GW.General Tab:
Set name and IP address
VPN Tab:
Encryption Schemes Defined: IKE ---> Edit
IKE Properties:
Key Negotiation Encryption Methods: 3DES
Authentication Method:
Pre-Shared Secret ---> EditSelect the Firewall Object and set a pre-shared secret.
(Do not use our example.)Support Aggressive Mode: Checked
Supports Subnets: CheckedAfter setting the pre-shared secret in the Firewall-1 Network Object
definition, place this secret in the
/usr/local/etc/racoon/psk.txt file on FreeBSD
GW. The format for psk.txt
is:208.229.100.6 rUac0wtoo?Firewall-1 VPN Rule ConfigurationNext, create a Firewall-1 rule enabling encryption between the
FreeBSD GW and the Firewall-1 protected network.
In this rule, the network services permitted through the
VPN must be defined.Source | Destination | Service | Action | Track
------------------------------------------------------------------------
FreeBSD GW | FW-1 Protected Net | VPN services | Encrypt | Long
FW-1 Protected Net| FreeBSD GW | | |VPN services are any services (i.e.
telnet, SSH,
NTP, etc.) which remote hosts are permitted to access
through the VPN. Use caution when permitting
services; hosts connecting through a VPN still
represent a potential security risk. Encrypting the traffic between the
two networks offers little protection if a host on either side of the
tunnel has been compromised.Once the rule specifying data encryption between the FreeBSD
GW and the Firewall-1 protected network has been
configured, review the Action Encrypt settings.Encryption Schemes Defined: IKE ---> Edit
Transform: Encryption + Data Integrity (ESP)
Encryption Algorithm: 3DES
Data Integrity: MD5
Allowed Peer Gateway: Any or Firewall Object
Use Perfect Forward Secrecy: CheckedThe use of Perfect Forward Secrecy (PFS) is
optional. Enabling PFS will add another layer of
encryption security, but does come at the cost of increased
CPU overhead. If PFS is not used,
uncheck the box above and comment out the
pfs_group 1 line in the
racoon.conf file on FreeBSD GW.
An example racoon.conf file is provided later in
this document.FreeBSD VPN Policy ConfigurationAt this point, the VPN policy on FreeBSD
GW must be defined. The &man.setkey.8; tool performs
this function.Below is an example shell script which will flush &man.setkey.8; and
add your VPN policy rules.#
# /etc/vpn1-ipsec.sh
#
# IP addresses
#
# External Interface External Interface
# 208.229.100.6 216.218.197.2
# | |
# +--> Firewall-1 <--> Internet <--> FreeBSD GW <--+
# | |
# FW-1 Protected Nets Internal Nets
# 199.208.192.0/24 192.168.10.0/24
#
# Flush the policy
#
setkey -FP
setkey -F
#
# Configure the Policy
#
setkey -c << END
spdadd 216.218.197.2/32 199.208.192.0/24 any -P out ipsec
esp/tunnel/216.218.197.2-208.229.100.6/require;
spdadd 199.208.192.0/24 216.218.197.2/32 any -P in ipsec
esp/tunnel/208.229.100.6-216.218.197.2/require;
END
#Execute the &man.setkey.8; commands:&prompt.root; sh /etc/vpn1-ipsec.shFreeBSD Racoon ConfigurationTo facilitate the negotiation of IPsec keys on the FreeBSD
GW, the
security/racoon port must be
installed and configured.The following is a racoon configuration
file suitable for use with the examples outlined in this document.
Please make sure you fully understand this file before using it in a
production environment.
-# racoon.conf for use with Checkpoint VPN-1/Firewall-1
+# racoon.conf for use with Check Point VPN-1/Firewall-1
#
# search this file for pre_shared_key with various ID key.
#
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
log debug;
#
# "padding" defines some parameter of padding. You should not touch these.
#
padding
{
maximum_length 20; # maximum padding length.
randomize off; # enable randomize length.
strict_check off; # enable strict check.
exclusive_tail off; # extract last one octet.
}
listen
{
#isakmp ::1 [7000];
#isakmp 0.0.0.0 [500];
#admin [7002]; # administrative port by kmpstat.
#strict_address; # required all addresses must be bound.
}
#
# Specification of default various timers.
#
timer
{
#
# These values can be changed per remote node.
#
counter 5; # maximum trying count to send.
interval 20 sec; # maximum interval to resend.
persend 1; # the number of packets per a send.
#
# timer for waiting to complete each phase.
#
phase1 30 sec;
phase2 15 sec;
}
remote anonymous
{
exchange_mode aggressive,main; # For Firewall-1 Aggressive mode
#my_identifier address;
#my_identifier user_fqdn "";
#my_identifier address "";
#peers_identifier address "";
#certificate_type x509 "" "";
nonce_size 16;
lifetime time 10 min; # sec,min,hour
lifetime byte 5 MB; # B,KB,GB
initial_contact on;
support_mip6 on;
proposal_check obey; # obey, strict or claim
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method pre_shared_key;
dh_group 2 ;
}
}
sainfo anonymous
{
pfs_group 1;
lifetime time 10 min;
lifetime byte 50000 KB;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate ;
}Ensure that the /usr/local/etc/racoon/psk.txt
file contains the pre-shared secret configured in the Firewall-1
Network Object Configuration section of this document and has
mode 600 permissions.&prompt.root; chmod 600 /usr/local/etc/racoon/psk.txtStarting the VPNYou are now ready to launch racoon and
test the VPN tunnel. For debugging purposes, open
the Firewall-1 Log Viewer and define a log filter to isolate entries
pertaining to FreeBSD GW. You may also find it
helpful to &man.tail.1; the racoon
log:&prompt.root; tail -f /var/log/racoon.logStart racoon using the following
command:&prompt.root; /usr/local/sbin/racoon -f /usr/local/etc/racoon/racoon.confOnce racoon has been launched,
&man.telnet.1; to a host on the Firewall-1 protected network.&prompt.root; telnet -s 192.168.10.3 199.208.192.66 22This command attempts to connect to the &man.ssh.1; port on 199.208.192.66, a machine in the Firewall-1
protected network. The switch indicates the source
interface of the outbound connection. This is particularly important
when running NAT and IPFW on
FreeBSD GW. Using -s and
specifying an explicit source address prevents NAT
from mangling the packet prior to tunneling.A successful racoon key exchange will
output the following to the racoon.log log
file:pfkey UPDATE succeeded: ESP/Tunnel 216.218.197.2->208.229.100.6
pk_recvupdate(): IPSec-SA established: ESP/Tunnel 216.218.197.2->208.229.100.6
get pfkey ADD message IPsec-SA established: ESP/Tunnel 208.229.100.6->216.218.197.2Once key exchange completes (which takes a few seconds), an
&man.ssh.1; banner will appear. If all went well, two Key
Install messages will be logged in the Firewall-1 Log
Viewer.Action | Source | Dest. | Info.
Key Install | 216.218.197.2 | 208.229.100.6 | IKE Log: Phase 1 (aggressive) completion.
Key Install | 216.218.197.2 | 208.229.100.6 | scheme: IKE methodsUnder the information column, the full log detail will read:IKE Log: Phase 1 (aggressive) completion. 3DES/MD5/Pre shared secrets Negotiation Id:
scheme: IKE methods: Combined ESP: 3DES + MD5 + PFS (phase 2 completion) for host:References
The FreeBSD Handbook: IPsecKAME Project
FreeBSD IPsec mini-HOWTO
diff --git a/en_US.ISO8859-1/articles/committers-guide/article.sgml b/en_US.ISO8859-1/articles/committers-guide/article.sgml
index 87c412d658..dfb50d8416 100644
--- a/en_US.ISO8859-1/articles/committers-guide/article.sgml
+++ b/en_US.ISO8859-1/articles/committers-guide/article.sgml
@@ -1,2929 +1,2940 @@
%man;
%freebsd;
%authors;
%teams;
%mailing-lists;
+
+
+%trademarks;
]>
Committer's GuideThe FreeBSD Documentation Project$FreeBSD$19992000200120022003The FreeBSD Documentation Project
+
+ &tm-attrib.freebsd;
+ &tm-attrib.ibm;
+ &tm-attrib.intel;
+ &tm-attrib.sparc;
+ &tm-attrib.general;
+
+
This document provides information for the FreeBSD committer
community. All new committers should read this document before they
start, and existing committers are strongly encouraged to review it
from time to time.Administrative DetailsMain Repository Hostncvs.FreeBSD.orgLogin Methods&man.ssh.1;, protocol 2 onlyMain CVSROOTncvs.FreeBSD.org:/home/ncvs (although also see ).
Main &a.cvs;&a.peter; and &a.markm;, as well as &a.joe; for
ports/Mailing Lists&a.developers;, &a.committers;
(Both of these are private lists; archives can be found
in /home/mail/developers-archive
and /home/mail/committers-archive
on the FreeBSD.org
cluster.)
Core Team monthly reports/home/core/public/monthly-report
on the FreeBSD.org cluster.
Noteworthy CVS TagsRELENG_4 (4.X-STABLE), HEAD (-CURRENT)It is required that you use &man.ssh.1; or &man.telnet.1;
with Kerberos 5 to connect to the project hosts and only
&man.ssh.1;, protocol 2 is allowed connecting to the repository
host. These are generally more secure than plain &man.telnet.1; or
&man.rlogin.1; since credential negotiation will always be
encrypted. All traffic is encrypted by default with &man.ssh.1;.
With utilities like &man.ssh-agent.1; and &man.scp.1; also
available, &man.ssh.1; is also far more convenient. If you do
not know anything about &man.ssh.1;, please see
.Commit Bit TypesThe FreeBSD CVS repository has a number of components which,
when combined, support the basic operating system source,
documentation, third party application ports infrastructure, and
various maintained utilities. When FreeBSD commit bits are
allocated, the areas of the tree where the bit may be used are
specified. Generally, the areas associated with a bit reflect who
authorized the allocation of the commit bit. Additional areas of
authority may be added at a later date: when this occurs, the
committer should follow normal commit bit allocation procedures for
that area of the tree, seeking approval from the appropriate entity
and possibly getting a mentor for that area for some period of time.
Committer TypeResponsibleTree Componentssrccore@src/, doc/ subject to appropriate reviewdocdoceng@doc/, www/, src/ documentationportsportmgr@ports/Commit bits allocated prior to the development of the notion of
areas of authority may be appropriate for use in many parts of the
tree. However, common sense dictates that a committer who has not
previously worked in an area of the tree seek review prior to
committing, seek approval from the appropriate responsible party,
and/or work with a mentor. Since the rules regarding code
maintenance differ by area of the tree, this is as much for the
benefit of the committer working in an area of less familiarity as
it is for others working on the tree.Committers are encouraged to seek review for their work as part
of the normal development process, regardless of the area of the
tree where the work is occurring.CVS OperationsIt is assumed that you are already familiar with the basic operation
of CVS.The &a.cvs; are the owners of the CVS repository and
are responsible for direct modification of it for the purposes of
cleanup or fixing some grievous abuse of CVS by a committer.
Should you cause some repository accident, say a bad cvs
import or cvs tag operation, mail the &a.cvs;
(or call one of them) and report the problem to one of them. The only
ones able to directly fiddle the repository bits on the repository hosts
are the repomeisters. To enforce this, there are no login shells
available on the repository machines, except to the repomeisters.The CVS tree is currently split into four distinct repositories,
namely doc, ports,
projects and src. These are
combined under a single CVSROOT when distributed
via CVSup for the convenience of our users.Note that the www module containing sources
for the FreeBSD website is
contained within the doc repository.The CVS repositories are hosted on the repository machines.
Currently, each of the repositories above reside on the same physical
machine, ncvs.FreeBSD.org, but to allow for
the possibility of placing each on a separate machine in the future,
there is a separate hostname for each that committers should use.
Additionally, each repository is stored in a separate directory. The
following table summarises the situation.
&os; CVS Repositories, Hosts and DirectoriesRepositoryHostDirectorydocdcvs.FreeBSD.org/home/dcvsportspcvs.FreeBSD.org/home/pcvsprojectsprojcvs.FreeBSD.org/home/projcvssrcncvs.FreeBSD.org/home/ncvs
CVS operations are done remotely by setting the
CVSROOT environment variable to the appropriate host
and top-level directory (for example,
ncvs.FreeBSD.org:/home/ncvs),
the CVS_RSH variable to ssh, and then
doing the appropriate check-out/check-in operations. Many committers
define aliases which expand to the correct cvs
invocation for the appropriate repository. For example, a &man.tcsh.1;
user may add the following to their .cshrc for this
purpose:alias dcvs env CVS_RSH=ssh cvs -d user@dcvs.freebsd.org:/home/dcvs
alias pcvs env CVS_RSH=ssh cvs -d user@pcvs.freebsd.org:/home/pcvs
alias projcvs env CVS_RSH=ssh cvs -d user@projcvs.freebsd.org:/home/projcvs
alias scvs env CVS_RSH=ssh cvs -d user@ncvs.freebsd.org:/home/ncvsThis way they can do all CVS operations
locally and use Xcvs commit for committing
to the official CVS tree. If you wish to add
something which is wholly new (like contrib-ified
sources, etc), cvs import should be used.
Refer to the &man.cvs.1; manual page for usage.Please do not use
cvs checkout or
update with the official repository machine set
as the CVS Root for keeping your source tree up to date.
Remote CVS is not optimized for network distribution
and requires a big work/administrative overhead on the server side.
Please use our advanced cvsup distribution
method for obtaining the repository bits, and only do the actual
commit operation on the repository host.
We provide an extensive cvsup replication network for this purpose,
as well as give access to cvsup-master if you
really need to stay current to the latest changes.
cvsup-master has got the horsepower to deal with
this, the repository master server does not. &a.jdp; is in
charge of cvsup-master.
If you need to use CVS add and
delete operations in a manner that is
effectively a &man.mv.1; operation, then a repository
copy is in order rather than using CVS add and
delete. In a repository copy, a CVS Meister will copy the file(s)
to their new name and/or location and let you know when it is
done. The purpose of a repository copy is to preserve file
change history, or logs. We in the FreeBSD Project greatly
value the change history that CVS gives to the project.CVS reference information, tutorials, and FAQs can be found at:
.
The information in Karl Fogel's
chapters from Open Source Development with CVS is also very
useful.&a.des; also supplied the following mini primer for
CVS.Check out a module with the co or
checkout command.&prompt.user; cvs checkout shazamThis checks out a copy of the shazam module. If
there is no shazam module in the modules file, it looks for a
top-level directory named shazam instead.
Useful cvs checkout optionsDo not create empty directoriesCheck out a single level, no subdirectoriesCheck out revision, branch or tag
revCheck out the sources as they were on date
date
Practical FreeBSD examples:Check out the miscfs module,
which corresponds to src/sys/miscfs:&prompt.user; cvs co miscfsYou now have a directory named miscfs
with subdirectories CVS,
deadfs, devfs, and so
on. One of these (linprocfs) is
empty.Check out the same files, but with full path:&prompt.user; cvs co src/sys/miscfsYou now have a directory named src,
with subdirectories CVS and
sys. The src/sys directory has
subdirectories CVS and
miscfs, etc.Check out the same files, but prunes empty
directories:&prompt.user; cvs co -P miscfsYou now have a directory named
miscfs with subdirectories
CVS, deadfs,
devfs... but note that there is no
linprocfs subdirectory, because there
are no files in it.Check out the directory miscfs, but
none of the subdirectories:&prompt.user; cvs co -l miscfsYou now have a directory named miscfs
with just one subdirectory named
CVS.Check out the miscfs module as
it is in the 4.X branch:&prompt.user; cvs co -rRELENG_4 miscfsYou can modify the sources and commit along this
branch.Check out the miscfs module as
it was in 3.4-RELEASE.&prompt.user; cvs co -rRELENG_3_4_0_RELEASE miscfsYou will not be able to commit modifications, since
RELENG_3_4_0_RELEASE is a point in time, not a branch.Check out the miscfs module as it was
on Jan 15 2000.&prompt.user; cvs co -D'01/15/2000' miscfsYou will not be able to commit modifications.Check out the miscfs module as it was
one week ago.&prompt.user; cvs co -D'last week' miscfsYou will not be able to commit modifications.Note that cvs stores metadata in subdirectories named
CVS.Arguments to and
are sticky, which means cvs will remember them later, e.g.
when you do a cvs update.Check the status of checked-out files with the
status command.&prompt.user; cvs status shazamThis displays the status of the
file shazam or of every file in the
shazam directory. For every file, the
status is given as one of:Up-to-dateFile is up-to-date and unmodified.Needs PatchFile is unmodified, but there is a newer revision in
the repository.Locally ModifiedFile is up-to-date, but modified.Needs MergeFile is modified, and there is a newer revision in the
repository.File had conflicts on mergeThere were conflicts the last time this file was
updated, and they have not been resolved yet.You will also see the local revision and date,
the revision number of the newest applicable version
(newest applicable because if you have a
sticky date, tag or branch, it may not be the actual newest
revision), and any sticky tags, dates or options.Once you have checked something out, you can update it with the
update command.&prompt.user; cvs update shazamThis updates the file shazam or the
contents of the shazam directory to the
latest version along the branch you checked out. If you
checked out a point in time, does nothing
unless the tags have moved in the repository or some other weird
stuff is going on.Useful options, in addition to those listed above for
checkout:Check out any additional missing directories.Update to head of main branch.More magic (see below).If you checked out a module with or
, running cvs update
with a different or
argument or with will select a new branch,
revision or date. The option clears all
sticky tags, dates or revisions whereas
and set new ones.Theoretically, specifying HEAD as the
argument to will give you the same result
as , but that is just theory.The option is useful if:somebody has added subdirectories to the module
you have checked out after you checked it out.you checked out with , and later
change your mind and want to check out the subdirectories
as well.you deleted some subdirectories and want to check
them all back out.Watch the output of the cvs
update with care. The letter in front of
each filename indicates what was done with it:UThe file was updated without trouble.PThe file was updated without trouble (you will only see
this when working against a remote repository).MThe file had been modified, and was merged without
conflicts.CThe file had been modified, and was merged with
conflicts.Merging is what happens if you check out a copy of
some source code, modify it, then someone else commits a
change, and you run cvs update. CVS notices
that you have made local changes, and tries to merge your
changes with the changes between the version you originally
checked out and the one you updated to. If the changes are to
separate portions of the file, it will almost always work fine
(though the result might not be syntactically or semantically
correct).CVS will print an M in front of every locally modified
file even if there is no newer version in the repository, so
cvs update is handy for getting a summary
of what you have changed locally.If you get a C, then your changes
conflicted with the changes in the repository (the changes
were to the same lines, or neighboring lines, or you changed
the local file so much that cvs can not
figure out how to apply the repository's changes). You will have
to go through the file manually and resolve the conflicts;
they will be marked with rows of <,
= and > signs. For
every conflict, there will be a marker line with seven
< signs and the name of the file,
followed by a chunk of what your local file contained,
followed by a separator line with seven =
signs, followed by the corresponding chunk in the
repository version, followed by a marker line with seven
> signs and the revision number you
updated to.The option is slightly voodoo. It
updates the local file to the specified revision as if you
used , but it does not change the recorded
revision number or branch of the local file. It is not really
useful except when used twice, in which case it will merge the
changes between the two specified versions into the working
copy.For instance, say you commit a change to
shazam/shazam.c in &os.current; and later
want to MFC it. The change you want to MFC was revision
1.15:Check out the &os.stable; version of the
shazam module:&prompt.user; cvs co -rRELENG_4 shazamApply the changes between rev 1.14 and 1.15:&prompt.user; cvs update -j1.14 -j1.15 shazam/shazam.cYou will almost certainly get a conflict because
- of the $Id: article.sgml,v 1.172 2003-07-23 13:11:14 alex Exp $ (or in FreeBSD's case,
+ of the $Id: article.sgml,v 1.173 2003-08-06 21:48:38 simon Exp $ (or in FreeBSD's case,
$FreeBSD$)
lines, so you will have to edit the file to resolve the conflict
- (remove the marker lines and the second $Id: article.sgml,v 1.172 2003-07-23 13:11:14 alex Exp $ line,
- leaving the original $Id: article.sgml,v 1.172 2003-07-23 13:11:14 alex Exp $ line intact).
+ (remove the marker lines and the second $Id: article.sgml,v 1.173 2003-08-06 21:48:38 simon Exp $ line,
+ leaving the original $Id: article.sgml,v 1.173 2003-08-06 21:48:38 simon Exp $ line intact).
View differences between the local version and the
repository version with the diff
command.&prompt.user; cvs diff shazamshows you every modification you have made to the
shazam file or module.
Useful cvs diff optionsUses the unified diff format.Uses the context diff format.Shows missing or added files.
You always want to use , since
unified diffs are much easier to read than almost any other
diff format (in some circumstances, context diffs generated with
the option may be
better, but they are much bulkier). A unified diff consists of
a series of hunks. Each hunk begins with a line that starts
with two @ signs and specifies where in the
file the differences are and how many lines they span. This
is followed by a number of lines; some (preceded by a blank)
are context; some (preceded by a - sign)
are outtakes and some (preceded by a +) are
additions.You can also diff against a different version
than the one you checked out by specifying a version
with or as in
checkout or update,
or even view the diffs between two arbitrary versions
(without regard for what you have locally) by specifying
two versions with or
.View log entries with the log
command.&prompt.user; cvs log shazamIf shazam is a file, this will print a
header with information about this file, such
as where in the repository this file is stored, which revision is
the HEAD for this file, what branches this file
is in, and any tags that are valid for this file. Then, for each
revision of this file, a log message is printed. This includes
the date and time of the commit, who did the commit, how many lines
were added and/or deleted, and finally the log message that the
committer who did the change wrote.If shazam is a directory, then the log
information described above is printed for each file in the
directory in turn. Unless you give the to
log, the log for all subdirectories of
shazam is printed too, in a recursive
manner.Use the log command to view the history of
one or more files, as it is stored in the CVS repository. You can
even use it to view the log message of a specific revision, if you
add the to the
log command:&prompt.user; cvs log -r1.2 shazamThis will print only the log message for revision
1.2 of file shazam if it is
a file, or the log message for revision 1.2 of
each file under shazam if it is a
directory.See who did what with the annotate command.
This command shows you each line of the specified file or
files, along with which user most recently changed that
line.&prompt.user; cvs annotate shazamAdd new files with the add command.Create the file, cvs add it, then
cvs commit it.Similarly, you can add new directories by creating them
and then cvs adding them. Note that you
do not need to commit directories.Remove obsolete files with the remove command.Remove the file, then cvs rm it, then
cvs commit it.Commit with the commit or
checkin command.
Useful cvs commit optionsForce a commit of an unmodified file.Specify a commit message on the command line rather
than invoking an editor.
Use the option if you realize that
you left out important information from the commit message.Good commit messages are important. They tell others
why you did the changes you did, not just right here and now,
but months or years from now when someone wonders why some
seemingly illogical or inefficient piece of code snuck into
your source file. It is also an invaluable aid to deciding
which changes to MFC and which not to MFC.Commit messages should be clear, concise and provide
a reasonable summary to give an indication of what was
changed and why.Commit messages should provide enough information to
enable a third party to decide if the change is relevant to
them and if they need to read the change itself.Avoid committing several unrelated changes in one go. It
makes merging difficult, and also makes it harder to determine
which change is the culprit if a bug crops up.Avoid committing style or whitespace fixes and
functionality fixes in one go. It makes merging difficult,
and also makes it harder to understand just what functional
changes were made. In the case of documentation files, it
can make the job of the translation teams more complicated,
as it becomes difficult for them to determine exactly what
content changes need to be translated.Avoid committing changes to multiple files in one go
with a generic, vague message. Instead, commit each file (or
small, related groups of files) with tailored commit messages.Before committing, always:verify which branch you are committing to, using
cvs status.review your diffs, using
cvs diffAlso, ALWAYS specify which files to commit explicitly on
the command line, so you do not accidentally commit other files
than the ones you intended - cvs commit
without any arguments will commit every modification in your
current working directory and every subdirectory.Additional tips and tricks:You can place commonly used options in your
~/.cvsrc, like this:cvs -z3
diff -Nu
update -Pd
checkout -PThis example says:always use compression level 3 when talking to a
remote server. This is a life-saver when working over a
slow connection.always use the (show added or
removed files) and (unified diff
format) options to &man.diff.1;.always use the (prune empty
directories) and (check out new
directories) options when updating.always use the (prune empty
directories) option when checking out.Use Eivind Eklund's cdiff script to
view unidiffs. It is a wrapper for &man.less.1; that adds ANSI
color codes to make hunk headers, outtakes and additions stand
out; context and garbage are unmodified. It also expands tabs
properly (tabs often look wrong in diffs because of the extra
character in front of each line).Simply use it instead of &man.more.1; or &man.less.1;:&prompt.user; cvs diff -Nu shazam | cdiffAlternatively some editors like &man.vim.1;
(editors/vim5) have color support and when used as
a pager with color syntax highlighting switched on will
highlight many types of file, including diffs, patches,
and CVS/RCS logs. &prompt.user; echo "syn on" >> ~/.vimrc
&prompt.user; cvs diff -Nu shazam | vim -
&prompt.user; cvs log shazam | vim -CVS is old, arcane, crufty and buggy, and sometimes
exhibits non-deterministic behavior which some claim as proof
that it is actually merely the Newtonian manifestation of a
sentient transdimensional entity. It is not humanly possible
to know its every quirk inside out, so do not be afraid to ask
the resident AI (&a.cvs;) for help.Do not leave the cvs commit command in commit
message editing mode for too long (more than 2–3 minutes). It
locks the directory you are working with and will prevent other
developers from committing into the same directory. If you have
to type a long commit message, type it before executing
cvs commit, and insert it into the commit
message.Conventions and TraditionsAs a new committer there are a number of things you should do
first.Add yourself to the Developers section of
the Contributors List
and remove yourself from the Additional
Contributors section. Once you have done that, do not
forget to add your author entity to
doc/en_US.ISO8859-1/share/sgml/authors.ent;
use the other entries as example.This is a relatively easy task, but remains a good first test of
your CVS skills.Add an entry for yourself to
www/en/news/news.xml. Look for the other
entries that look like A new committer and follow the
format.If you have a PGP or GnuPG key, you may want to add it to
doc/share/pgpkeys.
&a.des; has
written a shell script to make this extremely simple. See the
README
file for more information.Some people add an entry for themselves to
ports/astro/xearth/files/freebsd.committers.markers.Some people add an entry for themselves to
src/usr.bin/calendar/calendars/calendar.freebsd.Introduce yourself to the other committers, otherwise no one
will have any idea who you are or what you are working on. You do
not have to write a comprehensive biography, just write a paragraph
or two about who you are and what you plan to be working on as a
committer in FreeBSD. Email this to the &a.developers; and you will
be on your way!Log into hub.FreeBSD.org and create a
/var/forward/user
(where user is your username) file
containing the e-mail address where you want mail addressed to
yourusername@FreeBSD.org to be forwarded.
This includes all of the commit messages as well as any other mail
addressed to the &a.committers; and the &a.developers;. Really
large mailboxes which have taken up permanent residence on
hub often get accidentally truncated
without warning, so forward it or read it and you will not lose
it.If you are subscribed to the &a.cvsall;, you will
probably want to unsubscribe to avoid receiving duplicate
copies of commit messages and their followups.All new committers also have a mentor assigned to them for
the first few months. Your mentor is more or less responsible for
explaining anything which is confusing to you and is also
responsible for your actions during this initial period. If you
make a bogus commit, it is only going to embarrass your mentor
and you should probably make it a policy to pass at least your
first few commits by your mentor before committing it to the
repository.All commits should go to &os.current; first
before being merged to &os.stable;. No major new
features or high-risk modifications should be made to the
&os.stable; branch.Developer RelationsIf you are working directly on your own code or on code
which is already well established as your responsibility, then
there is probably little need to check with other committers
before jumping in with a commit. If you see a bug in an area of
the system which is clearly orphaned (and there are a few such
areas, to our shame), the same applies. If, however, you are
about to modify something which is clearly being actively
maintained by someone else (and it is only by watching the
cvs-committers mailing list that you can
really get a feel for just what is and is not) then consider
sending the change to them instead, just as you would have
before becoming a committer. For ports, you should contact the
listed MAINTAINER in the
Makefile. For other parts of the
repository, if you are unsure who the active maintainer might
be, it may help to scan the output of cvs log
to see who has committed changes in the past. &a.fenner; has
written a nice shell script that can help determine who the
active maintainer might be. It lists each person who has
committed to a given file along with the number of commits each
person has made. It can be found on freefall
at ~fenner/bin/whodid. If your queries go
unanswered or the committer otherwise indicates a lack of
proprietary interest in the area affected, go ahead and commit
it.If you are unsure about a commit for any reason at
all, have it reviewed by -hackers
before committing. Better to have it flamed then and there
rather than when it is part of the CVS repository. If you do
happen to commit something which results in controversy
erupting, you may also wish to consider backing the change out
again until the matter is settled. Remember – with CVS we
can always change it back.Do not impugn the intentions of someone you disagree with.
If they see a different solution to a problem than you, or even
a different problem, it is not because they are stupid, because
they have questionable parentage, or because they are trying to
destroy your hard work, personal image, or FreeBSD, but simply
because they have a different outlook on the world. Different
is good.Disagree honestly. Argue your position from its merits,
be honest about any shortcomings it may have, and be open to
seeing their solution, or even their vision of the problem,
with an open mind.Accept correction. We are all fallible. When you have made
a mistake, apologize and get on with life. Do not beat up
yourself, and certainly do not beat up others for your mistake.
Do not waste time on embarrassment or recrimination, just fix
the problem and move on.Ask for help. Seek out (and give) peer reviews. One of
the ways open source software is supposed to excel is in the
number of eyeballs applied to it; this does not apply if nobody
will review code.GNATSThe FreeBSD Project utilizes
GNATS for tracking bugs and change
requests. Be sure that if you commit a fix or suggestion found
in a GNATS PR, you use
edit-pr pr-number
on freefall to close it. It is also considered
nice if you take time to close any PRs associated with your
commits, if appropriate. You can also make use of
&man.send-pr.1; yourself for proposing any change which you feel
should probably be made, pending a more extensive peer-review
first.You can find out more about GNATS
at:http://www.FreeBSD.org/support.html&man.send-pr.1;You can run a local copy of GNATS, and then integrate the FreeBSD
GNATS tree in to it using CVSup. Then you can run GNATS commands
locally, or use other interfaces, such as tkgnats.
This lets you query the PR database without needing to be connected to
the Internet.Using a local GNATS treeIf you are not already downloading the GNATS tree, add this line
to your supfile, and re-sup. Note that since
GNATS is not under CVS control it has no tag, so if you are adding
it to your existing supfile it should appear
before any tag= entry as these remain active once set.
gnats release=current prefix=/usrThis will place the FreeBSD GNATS tree in
/usr/gnats. You can use a
refuse file to control which categories to
receive. For example, to only receive docs PRs,
put this line in
/usr/local/etc/cvsup/sup/refuseThe precise path depends on the *default
base setting in your
supfile..gnats/[a-ce-z]*The rest of these examples assume you have only supped the
docs category. Adjust them as necessary,
depending on the categories you are syncing.Install the GNATS port from
ports/databases/gnats. This will place the
various GNATS directories under
$PREFIX/share/gnats.Symlink the GNATS directories you are supping under the version
of GNATS you have installed.&prompt.root; cd /usr/local/share/gnats/gnats-db
&prompt.root; ln -s /usr/gnats/docsRepeat as necessary, depending on how many GNATS categories you
are syncing.Update the GNATS categories file with these
categories. The file is
$PREFIX/share/gnats/gnats-db/gnats-adm/categories.# This category is mandatory
pending:Category for faulty PRs:gnats-admin:
#
# FreeBSD categories
#
docs:Documentation Bug:freebsd-doc:Run $PREFIX/libexec/gnats/gen-index to
recreate the GNATS index. The output has to be redirected to
$PREFIX/share/gnats/gnats-db/gnats-adm/index.
You can do this periodically from &man.cron.8;, or run &man.cvsup.1;
from a shell script that does this as well.&prompt.root; /usr/local/libexec/gnats/gen-index \
> /usr/local/share/gnats/gnats-db/gnats-adm/indexTest the configuration by querying the PR database. This
command shows open docs PRs.&prompt.root; query-pr -c docs -s openOther interfaces, such as that provided by the
databases/tkgnats port should also work
nicely.Pick a PR and close it.This procedure only works to allow you to view and query the PRs
locally. To edit or close them you will still have to log in to
freefall and do it from there.Who's WhoBesides the repository
meisters, there are other FreeBSD project members and teams whom you will
probably get to know in your role as a committer. Briefly,
and by no means all-inclusively, these are:&a.jhb;John is the manager of the SMPng Project, and has
authority over the architectural design and implementation
of the move to fine-grained kernel threading and locking.
He's also the editor of the SMPng Architecture Document.
If you are working on fine-grained SMP and locking, please
coordinate with John. You can learn more about the
SMPng Project on its home page:
&a.jake;, &a.tmm;
- Jake and Thomas are the maintainers of the sparc64 hardware
+ Jake and Thomas are the maintainers of the &sparc64; hardware
port.&a.doceng;doceng is the group responsible for the documentation build
infrastructure, approving new documentation committers, and
ensuring that the FreeBSD website and documentation on the FTP
site is up to date with respect to the CVS tree. It is not a
conflict resolution body. The vast majority of documentation
related discussion takes place on the &a.doc;. Committers
interested in contributing to the documentation should familiarize
themselves with the Documentation Project
Primer.&a.ru;Ruslan is Mister &man.mdoc.7;. If you are writing a
manual page and need
some advice on the structure, or the markup, ask Ruslan.&a.bde;Bruce is the Style Police-Meister.
When you do a commit that could have been done better,
Bruce will be there to tell you. Be thankful that someone
is. Bruce is also very knowledgeable on the various
standards applicable to FreeBSD.&a.gallatin;&a.mjacob;&a.dfr;&a.obrien;These are the primary developers and overseers of the
DEC Alpha AXP platform.&a.dg;David is the overseer of the
VM system. If you have a VM system change in mind,
coordinate it with David.&a.dfr;&a.marcel;&a.peter;&a.ps;These are the primary developers and overseers of the
- Intel IA-64 platform, officially known as the Itanium Processor
+ Intel IA-64 platform, officially known as the &itanium; Processor
Family (IPF).&a.murray;&a.steve;&a.rwatson;&a.jhb;&a.bmah;&a.scottl;These are the members of the &a.re;. This team is
responsible for setting release deadlines and controlling
the release process. During code freezes, the release
engineers have final authority on all changes to the
system for whichever branch is pending release status. If
there is something you want merged from &os.current; to
&os.stable; (whatever values those may have at any given
time), these are the people to talk to about it.Bruce is also the keeper of the release documentation
(src/release/doc/*). If you commit a
change that you think is worthy of mention in the release notes,
please make sure Bruce knows about it. Better still, send him
a patch with your suggested commentary.&a.benno;
- Benno is the official maintainer of the PowerPC port.
+ Benno is the official maintainer of the &powerpc; port.&a.brian;Official maintainer of
/usr/sbin/ppp.&a.nectar;Jacques is the
FreeBSD Security
Officer
and oversees the &a.security-officer;.
&a.wollman;If you need advice on obscure network internals or
are not sure of some potential change to the networking
subsystem you have in mind, Garrett is someone to talk
to. Garrett is also very knowledgeable on the various
standards applicable to FreeBSD.&a.committers;cvs-committers is the entity that CVS uses to send you all your
commit messages. You should never send email
directly to this list. You should only send replies to this list
when they are short and are directly related to a commit.&a.developers;All committers are subscribed to -developers. This list was created to be a
forum for the committers community issues.
Examples are Core
voting, announcements, etc. This list is
not intended as a place for code reviews or a
replacement for the &a.arch; or the &a.audit;. In fact
using it as such hurts the FreeBSD Project as it gives a sense of a
closed list where general decisions affecting all of the FreeBSD
using community are made without being open.
Last, but not least never, never ever, email
the &a.developers; and CC:/BCC: another FreeBSD list.
Never, ever email another FreeBSD email list and CC:/BCC:
the &a.developers;. Doing so can greatly diminish the benefits
of this list. Also, never publicly post or forward emails sent
to the &a.developers;. The act of sending to
the &a.developers; vs. a public list means the information in
the email is not for public consumption.
SSH Quick-Start GuideIf you are using FreeBSD 4.0 or later,
OpenSSH is included in the base system.
If you are using an earlier release,
update and install one of the SSH ports. In general,
you will probably want to get OpenSSH from the
security/openssh port. You
may also wish to check out the original ssh1 in the
security/ssh port, but make
certain you pay attention to its license. Note that both
of these ports cannot be installed at the same time.If you do not wish to type your password in every
time you use &man.ssh.1;, and you use RSA or DSA keys to
authenticate, &man.ssh-agent.1; is there for your
convenience. If you want to use &man.ssh-agent.1;, make
sure that you run it before running other applications. X
users, for example, usually do this from their
.xsession or
.xinitrc file. See &man.ssh-agent.1;
for details.Generate a key pair using &man.ssh-keygen.1;. The key
pair will wind up in your
$HOME/.ssh
directory.Send your public key
($HOME/.ssh/identity.pub)
to the person setting you up as a committer so it can be put
into your authorized_keys file in your
home directory on freefall
(i.e.
$HOME/.ssh/authorized_keys).
Now you should be able to use &man.ssh-add.1; for
authentication once per session. This will prompt you for
your private key's pass phrase, and then store it in your
authentication agent (&man.ssh-agent.1;). If you no longer
wish to have your key stored in the agent, issuing
ssh-add -d will remove it.Test by doing something such as ssh
freefall.FreeBSD.org ls /usr.For more information, see
security/openssh, &man.ssh.1;,
&man.ssh-add.1;, &man.ssh-agent.1;, &man.ssh-keygen.1;, and
&man.scp.1;.The FreeBSD Committers' Big List of RulesRespect other committers.Respect other contributors.Discuss any significant change
before committing.Respect existing maintainers (if listed in the
MAINTAINER field in
Makefile or in the
MAINTAINER file in the top-level
directory).Any disputed change must be backed out pending
resolution of the dispute if requested by a maintainer.
Security related changes may
override a maintainer's wishes at the Security Officer's
discretion.Changes go to &os.current; before
&os.stable; unless specifically permitted by
the release engineer or unless they are not applicable to
&os.current;. Any non-trivial or non-urgent
change which is applicable should also be allowed to sit in
&os.current; for at least 3 days before
merging so that it can be given sufficient testing. The
release engineer has the same authority over the
&os.stable; branch as outlined for the
maintainer in rule #5.Do not fight in public with other committers; it looks
bad. If you must strongly disagree about
something, do so only in private.Respect all code freezes and read the
committers and developers
mailing lists in a timely manner so you know when a code freeze is
in effect.When in doubt on any procedure, ask first!Test your changes before committing them.Do not commit to anything under the
src/contrib,
src/crypto, and
src/sys/contrib trees without
explicit approval from the respective
maintainer(s).As noted, breaking some of these rules can be grounds for
suspension or, upon repeated offense, permanent removal of
commit privileges. Individual members of core
have the power to temporarily suspend commit privileges until
core as a whole has the chance to review the
issue. In case of an emergency (a committer
doing damage to the repository), a temporary suspension may also
be done by the repository meisters.
Only a 2/3 majority of core
has the authority to suspend commit privileges for longer
than a week or to remove them permanently.
This rule does not exist to set core up as a bunch
of cruel dictators who can dispose of committers as casually as
empty soda cans, but to give the project a kind of safety fuse.
If someone is out of control, it is important to be
able to deal with this immediately rather than be paralyzed by
debate. In all cases, a committer whose privileges are
suspended or revoked is entitled to a hearing by core,
the total duration of the suspension being determined at that
time. A committer whose privileges are suspended may also
request a review of the decision after 30 days and every 30 days
thereafter (unless the total suspension period is less than 30
days). A committer whose privileges have been revoked entirely
may request a review after a period of 6 months has elapsed.
This review policy is strictly informal
and, in all cases, core reserves the right to either act on or
disregard requests for review if they feel their original
decision to be the right one.In all other aspects of project operation, core is a subset
of committers and is bound by the same
rules. Just because someone is in core this does not mean
that they have special dispensation to step outside any of
the lines painted here; core's special powers
only kick in when it acts as a group, not on an individual
basis. As individuals, the core team members are all committers
first and core second.DetailsRespect other committers.This means that you need to treat other committers as
the peer-group developers that they are. Despite our
occasional attempts to prove the contrary, one does not get
to be a committer by being stupid and nothing rankles more
than being treated that way by one of your peers. Whether
we always feel respect for one another or not (and
everyone has off days), we still have to
treat other committers with respect
at all times, on public forums and in private email.Being able to work together long term is this project's
greatest asset, one far more important than any set of
changes to the code, and turning arguments about code into
issues that affect our long-term ability to work
harmoniously together is just not worth the trade-off by
any conceivable stretch of the imagination.To comply with this rule, do not send email when you are
angry or otherwise behave in a manner which is likely to
strike others as needlessly confrontational. First calm
down, then think about how to communicate in the most
effective fashion for convincing the other person(s) that
your side of the argument is correct, do not just blow off
some steam so you can feel better in the short term at the
cost of a long-term flame war. Not only is this very bad
energy economics, but repeated displays of
public aggression which impair our ability to work well
together will be dealt with severely by the project
leadership and may result in suspension or termination of
your commit privileges. The project leadership will
take into account both public and private communications
brought before it. It will not seek the disclosure of
private communications, but it will take it into account
if it is volunteered by the committers involved in the
complaint.All of this is never an option which the
project's leadership enjoys in the slightest, but unity
comes first. No amount of code or good advice is worth
trading that away.Respect other contributors.You were not always a committer. At one time you were
a contributor. Remember that at all times. Remember what
it was like trying to get help and attention. Do not forget
that your work as a contributor was very important to
you. Remember what it was like. Do not discourage, belittle,
or demean contributors. Treat them with respect. They are
our committers in waiting. They are every bit as important
to the project as committers. Their contributions are as
valid and as important as your own. After all, you made
many contributions before you became a committer. Always
remember that. Consider the points raised under
and apply them also to contributors.Discuss any significant change
before committing.The CVS repository is not where changes should be
initially submitted for correctness or argued over, that
should happen first in the mailing lists and the commit should
only happen once something resembling consensus has
been reached. This does not mean that you have to ask
permission before correcting every obvious syntax error or
manual page misspelling, simply that you should try to
develop a feel for when a proposed change is not quite such
a no-brainer and requires some feedback first. People
really do not mind sweeping changes if the result is
something clearly better than what they had before, they
just do not like being surprised by
those changes. The very best way of making sure that
you are on the right track is to have your code reviewed by
one or more other committers.When in doubt, ask for review!Respect existing maintainers if listed.Many parts of FreeBSD are not owned in
the sense that any specific individual will jump up and
yell if you commit a change to their area,
but it still pays to check first. One convention we use
is to put a maintainer line in the
Makefile for any package or subtree
which is being actively maintained by one or more people;
see
for documentation on this. Where sections of code have
several maintainers, commits to affected areas by one
maintainer need to be reviewed by at least one other
maintainer. In cases where the
maintainer-ship of something is not clear,
you can also look at the CVS logs for the file(s) in
question and see if someone has been working recently or
predominantly in that area.Other areas of FreeBSD fall under the control of
someone who manages an overall category of FreeBSD
evolution, such as internationalization or networking.
See
http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/contributors/staff-who.html
for more information on this.Any disputed change must be backed out pending
resolution of the dispute if requested by a maintainer.
Security related changes may
override a maintainer's wishes at the Security Officer's
discretion.This may be hard to swallow in times of conflict (when
each side is convinced that they are in the right, of
course) but CVS makes it unnecessary to have an ongoing
dispute raging when it is far easier to simply reverse the
disputed change, get everyone calmed down again and then
try to figure out what is the best way to proceed. If the change
turns out to be the best thing after all, it can be easily
brought back. If it turns out not to be, then the users
did not have to live with the bogus change in the tree
while everyone was busily debating its merits. People
very very rarely call for back-outs in the repository
since discussion generally exposes bad or controversial
changes before the commit even happens, but on such rare
occasions the back-out should be done without argument so
that we can get immediately on to the topic of figuring
out whether it was bogus or not.Changes go to &os.current; before
&os.stable; unless specifically permitted
by the release engineer or unless they are not applicable
to &os.current;. Any non-trivial or
non-urgent change which is applicable should also be
allowed to sit in &os.current; for at least
3 days before merging so that it can be given sufficient
testing. The release engineer has the same authority over
the &os.stable; branch as outlined in rule
#5.This is another do not argue about it
issue since it is the release engineer who is ultimately
responsible (and gets beaten up) if a change turns out to
be bad. Please respect this and give the release engineer
your full cooperation when it comes to the
&os.stable; branch. The management of
&os.stable; may frequently seem to be
overly conservative to the casual observer, but also bear
in mind the fact that conservatism is supposed to be the
hallmark of &os.stable; and different rules
apply there than in &os.current;. There is
also really no point in having &os.current;
be a testing ground if changes are merged over to
&os.stable; immediately. Changes need a
chance to be tested by the &os.current;
developers, so allow some time to elapse before merging
unless the &os.stable; fix is critical,
time sensitive or so obvious as to make further testing
unnecessary (spelling fixes to manual pages, obvious bug/typo
fixes, etc.) In other words, apply common sense.Changes to the security branches
(for example, RELENG_4_5) must be
approved by a member of the &a.security-officer;, or in
some cases, by a member of the &a.re;.Do not fight in public with other committers; it looks
bad. If you must strongly disagree about
something, do so only in private.This project has a public image to uphold and that
image is very important to all of us, especially if we are
to continue to attract new members. There will be
occasions when, despite everyone's very best attempts at
self-control, tempers are lost and angry words are
exchanged. The best thing that can be done in such cases is to minimize
the effects of this until everyone has cooled back down. That
means that you should not air your angry words in public
and you should not forward private correspondence to
public mailing lists or aliases. What people say
one-to-one is often much less sugar-coated than what they
would say in public, and such communications therefore
have no place there - they only serve to inflame an
already bad situation. If the person sending you a
flame-o-gram at least had the grace to send it privately,
then have the grace to keep it private yourself. If you
feel you are being unfairly treated by another developer,
and it is causing you anguish, bring the matter up with
core rather than taking it public. Core will do its best to
play peace makers and get things back to sanity. In cases
where the dispute involves a change to the codebase and
the participants do not appear to be reaching an amicable
agreement, core may appoint a mutually-agreeable 3rd party
to resolve the dispute. All parties involved must then
agree to be bound by the decision reached by this 3rd
party.Respect all code freezes and read the
committers and developers
mailing list on a timely basis so you know when a code freeze is
in effect.Committing unapproved changes during a code freeze is a really
big mistake and committers are expected to keep up-to-date
on what is going on before jumping in after a long absence
and committing 10 megabytes worth of accumulated stuff.
People who abuse this on a regular basis will have their
commit privileges suspended until they get back from the
FreeBSD Happy Reeducation Camp we run in Greenland.When in doubt on any procedure, ask first!Many mistakes are made because someone is in a hurry
and just assumes they know the right way of doing
something. If you have not done it before, chances are
good that you do not actually know the way we do things
and really need to ask first or you are going to
completely embarrass yourself in public. There is no shame
in asking how in the heck do I do this? We
already know you are an intelligent person; otherwise, you
would not be a committer.Test your changes before committing them.This may sound obvious, but if it really were so
obvious then we probably would not see so many cases of
people clearly not doing this. If your changes are to the
kernel, make sure you can still compile both GENERIC and
LINT. If your changes are anywhere else, make sure you
can still make world. If your changes are to a branch,
make sure your testing occurs with a machine which is
running that code. If you have a change which also may
break another architecture, be sure and test on all
supported architectures. Currently, this is only the x86
and the Alpha so it is pretty easy to do. If you need to
test on the AXP, your account on beast.FreeBSD.org will let you
compile and test Alpha binaries/kernels/etc. As other
architectures are added to the FreeBSD supported platforms
list, the appropriate shared testing resources will be
made available.Do not commit to anything under the
src/contrib,
src/crypto, and
src/sys/contrib trees without
explicit approval from the respective
maintainer(s).The trees mentioned above are for contributed software
usually imported onto a vendor branch. Committing something
there, even if it does not take the file off the vendor branch,
may cause unnecessary headaches for those responsible for
maintaining that particular piece of software. Thus, unless
you have explicit approval from the
maintainer (or you are the maintainer), do
not commit there!Please note that this does not mean you should not try to
improve the software in question; you are still more than
welcome to do so. Ideally, you should submit your patches to
the vendor. If your changes are FreeBSD-specific, talk to the
maintainer; they may be willing to apply them locally. But
whatever you do, do not commit there by
yourself!Contact the &a.core; if you wish to take up maintainership
of an unmaintained part of the tree.Policy on Multiple ArchitecturesFreeBSD has added several new arch ports during the 5.0
- release cycle and is truly no longer an i386-centric operating
+ release cycle and is truly no longer an &i386; centric operating
system. In an effort to make it easier to keep FreeBSD portable
across the platforms we support, core has developed the following
mandate:
Our 32 bit reference platform is i386, and our 64 bit
- reference platform is sparc64. Major design work (including
+ reference platform is Sparc64. Major design work (including
major API and ABI changes) must prove itself on at least one
32 bit and at least one 64 bit platform, preferably the
primary reference platforms, before it may be committed
to the source tree.
- The i386 and sparc64 platforms were chosen due to being more
+ The i386 and Sparc64 platforms were chosen due to being more
readily available to developers and as representatives of more
diverse processor and system designs - big vs little endian,
register file vs register stack, different DMA and cache
implementations, hardware page tables vs software TLB management
etc.While the Alpha is a 64 bit processor, it is a more
traditional processor design and does not provide as good a testbed
for many of the challenges that the other 64 bit platform ports
face. The ia64 platform has many of the same complications that
- sparc64 has, but is still limited in availability to
+ Sparc64 has, but is still limited in availability to
developers.We will continue to re-evaluate this policy as cost and
availability of the 64 bit platforms change.Developers should also be aware of our Tier Policy for
the long term support of hardware architectures. The rules
here are intended to provide guidance during the development
process, and are distinct from the requirements for features
and architectures listed in that section. The Tier rules for
feature support on architectures at release-time are more
strict than the rules for changes during the development
process.Other SuggestionsWhen committing documentation changes, use a spell checker
before committing. For all SGML docs, you should also
verify that your formatting directives are correct by running
make lint.For all on-line manual pages, run manck
(from ports) over the manual page to verify all of the cross
references and file references are correct and that the man
page has all of the appropriate MLINKs
installed.Do not mix style fixes with new functionality. A style
fix is any change which does not modify the functionality of
the code. Mixing the changes obfuscates the functionality
change when using cvs diff, which can hide
any new bugs. Do not include whitespace changes with content
changes in commits to doc/ or
www/. The extra clutter in the diffs
makes the translators' job much more difficult. Instead, make
any style or whitespace changes in separate commits that are
clearly labeled as such in the commit message.Deprecating FeaturesWhen it is necessary to remove functionality from software
in the base system the following guidelines should be followed
whenever possible:Mention is made in the manual page and possibly the
release notes that the option, utility, or interface is
deprecated. Use of the deprecated feature generates a
warning.The option, utility, or interface is preserved until
the next major (point zero) release.The option, utility, or interface is removed and no
longer documented. It is now obsolete. It is also
generally a good idea to note its removal in the release
notes.Support for Multiple ArchitecturesFreeBSD is a highly portable operating system intended to
function on many different types of hardware architectures.
Maintaining clean separation of Machine Dependent (MD) and Machine
Independent (MI) code, as well as minimizing MD code, is an important
part of our strategy to remain agile with regards to current
hardware trends. Each new hardware architecture supported by
FreeBSD adds substantially to the cost of code maintenance,
toolchain support, and release engineering. It also dramatically
increases the cost of effective testing of kernel changes. As such,
there is strong motivation to differentiate between classes of
support for various architectures while remaining strong in a few
key architectures that are seen as the FreeBSD "target audience".
Statement of General IntentThe FreeBSD Project targets "production quality commercial
off-the-shelf (COTS) workstation, server, and high-end embedded
systems". By retaining a focus on a narrow set of architectures
of interest in these environments, the FreeBSD Project is able
to maintain high levels of quality, stability, and performance,
as well as minimize the load on various support teams on the
project, such as the ports team, documentation team,
security officer, and release engineering teams. Diversity in
hardware support broadens the options for FreeBSD consumers by
offering new features and usage opportunities (such as support
for 64-bit CPUs, use in embedded environments, etc.), but these
benefits must always be carefully considered in terms of the real-world
maintenance cost associated with additional platform support.
The FreeBSD Project differentiates platform targets into
four tiers. Each tier includes a specification of the
requirements for an architecture to be in that tier,
as well as specifying the obligations of developers with
regards to the platform. In addition, a policy is defined
regarding the circumstances required to change the tier
of an architecture.Tier 1: Fully Supported ArchitecturesTier 1 platforms are fully supported by the security
officer, release engineering, and toolchain maintenance staff.
New features added to the operating system must be fully
functional across all Tier 1 architectures for every release
(features which are inherently architecture-specific, such as
support for hardware device drivers, may be exempt from this
requirement). In general, all Tier 1 platforms must have build
and tinderbox support either in the FreeBSD.org cluster, or
easily available for all developers.Tier 1 architectures are expected to be Production Quality
with respects to all aspects of the FreeBSD operating system,
including installation and development environments.
- Current Tier 1 platforms are i386, sparc64, PC98, and
+ Current Tier 1 platforms are i386, Sparc64, PC98, and
Alpha.Tier 2: Developmental ArchitecturesTier 2 platforms are not supported by the security officer
and release engineering teams. At the discretion of the
toolchain maintainer, they may be supported in the toolchain. New
features added to FreeBSD should be feasible to implement on these
platforms, but an implementation is not required before the
feature may be added to the FreeBSD source tree. The
implementation of a Tier 2 architecture may be committed to the
main FreeBSD tree as long as it does not interfere with
production work on Tier 1 platforms, or substantially with other
Tier 2 platforms. Before a Tier 2 platform can be added to the
FreeBSD base source tree, the platform must be able to boot to at
least single-user mode on real world commodity hardware. Some
exceptions to these rules may be made for new hardware that is
under development by hardware vendors, but not yet available to
the project.Tier 2 architectures are usually systems targeted at Tier 1
support, but that are still under development. Architectures
reaching end of life may also be moved from Tier 1 status to Tier
2 status as the availability of resources to continue to maintain
the system in a Production Quality state diminishes.Current Tier 2 platforms are PowerPC, ia64 and AMD64.Tier 3: Experimental ArchitecturesTier 3 platforms are not supported by the security officer
and release engineering teams. At the discretion of the toolchain
maintainer, they may be supported in the toolchain. Tier 3
platforms are architectures for which hardware is not or will not
be available to the project in the foreseeable future, for which
there are two or fewer active developers, that can not boot to at
least single-user mode on real hardware (or a simulator for new
hardware platforms), or which are considered legacy systems
unlikely to see broad future use. Tier 3 systems will not be
committed to the base source tree, although support for Tier 3
systems may be worked on in the FreeBSD Perforce Repository,
providing source control and easier change integration from the
main FreeBSD tree.
- Current Tier 3 platforms are S/390.
+ Current Tier 3 platforms are &s390;.Tier 4: Unsupported ArchitecturesTier 4 systems are not supported in any form by the project.
All systems not otherwise classified into a support tier
are Tier 4 systems.Policy on Changing the Tier of an ArchitectureSystems may only be moved from one tier to another by
approval of the FreeBSD Core Team, which shall make that
decision in collaboration with the Security Officer, Release
Engineering, and toolchain maintenance teams.Ports Specific FAQAdding a New PortHow do I add a new port?First, please read the section about repository
copies.The easiest way to add a new port is to use the
addport script on
freefall. It will add a port from the
directory you specify, determining the category automatically
from the port Makefile.
It will also add an entry to the
CVSROOT/modules file and the port's
category Makefile. It was
written by &a.mharo; and &a.will;, but Will is the current
maintainer so please send questions/patches about
addport to him.Any other things I need to know when I add a new
port?Check the port, preferably to make sure it compiles
and packages correctly. This is the recommended
sequence:&prompt.root; make install
&prompt.root; make package
&prompt.root; make deinstall
&prompt.root; pkg_add package you built above
&prompt.root; make deinstall
&prompt.root; make reinstall
&prompt.root; make packageThe
Porters
Handbook contains more detailed
instructions.Use &man.portlint.1; to check the syntax of the port.
You do not necessarily have to eliminate all warnings but
make sure you have fixed the simple ones.If the port came from a submitter who has not
contributed to the project before, add that person's
name to the Additional
Contributors section of the FreeBSD Contributors
List.Close the PR if the port came in as a PR. To close
a PR, just do
edit-pr PR#
on freefall and change the
state from open
to closed. You will be asked to
enter a log message and then you are done.Repository CopiesWhen do we need a repository copy?When you want to add a port that is related to
any port that is already in the tree in a separate
directory, please send mail to the ports manager asking
about it. Here related means
it is a different version or a slightly modified
version. Examples are
print/ghostscript* (different
versions) and x11-wm/windowmaker*
(English-only and internationalized version).Another example is when a port is moved from one
subdirectory to another, or when you want to change the
name of a directory because the author(s) renamed their
software even though it is a
descendant of a port already in a tree.When do we not need a
repository copy?When there is no history to preserve. If a port is
added into a wrong category and is moved immediately,
it suffices to simply cvs remove the
old one and addport the new
one.What do I need to do?Send mail to &a.portmgr;, listing the reasons for
the repository copy request. If &a.portmgr approves
it, &a.cvs; will do a repository copy from the old
to the new location and/or name. Once you receive
notification that everything is done, perform the
following:When a port has been repo copied:Upgrade the copied port to the new version (remember
to change the PORTNAME so there
are not duplicate ports with the same name).Add the new subdirectory to the
SUBDIR listing in the parent
directory Makefile. You can run make
checksubdirs in the parent directory to check
this.If the port changed categories, modify the
CATEGORIES line of the port's
Makefile accordinglyAdd the new module entry.Add an entry to
ports/MOVED.When removing a port:Perform a thorough check of the ports collection for
any dependencies on the old port location/name, and
update them. Running grep on
INDEX is not enough because some
ports have dependencies enabled by compile-time options.
A full grep -r of the ports
collection is recommended.Remove the old port, the old
SUBDIR entry and the old module
entry.Add an entry to
ports/MOVED.After repo moves (rename operations where
a port is copied and the old location is removed):Follow the same steps that are outlined in the
previous two entries, to activate the new location of
the port and remove the old one.Ports FreezeWhat is a ports freeze?Before a release, it is necessary to restrict
commits to the ports tree for a short period of time
while the packages and the release itself are being
built. This is to ensure consistency among the various
parts of the release, and is called the ports
freeze.How long is a ports freeze?Usually an hour or two.What does it mean to me?During the ports freeze, you are not allowed to
commit anything to the tree without explicit approval
from the ports manager. Explicit
approval here means either of the
following:You asked the ports manager and got a reply
saying, Go ahead and commit
it.The ports manager sent a mail to you or the
mailing lists during the ports freeze pointing out
that the port is broken and has to be fixed.Note that you do not have implicit permission to fix
a port during the freeze just because it is
broken.How do I know when the ports freeze starts?The ports manager will send out warning messages to
the &a.ports; and &a.committers;
announcing the start of the impending release, usually
two or three weeks in advance. The exact starting time
will not be determined until a few days before the
actual release. This is because the ports freeze has to
be synchronized with the release, and it is usually not
known until then when exactly the release will be
rolled.When the freeze starts, there will be another
announcement to the &a.committers;, of course.How do I know when the ports freeze ends?A few hours after the release, the ports manager
will send out a mail to the &a.ports; and &a.committers;
announcing the end of the ports freeze. Note that the
release being cut does not automatically end the freeze.
We have to make sure there will not be any last minute
snafus that result in an immediate re-rolling of the
release.Miscellaneous QuestionsHow do I know if my port is building correctly or
not?First, go check
.
There you will find error logs from the latest package
building runs on all supported platforms for the most
recent branches.However, just because the port does not show up there
does not mean it is building correctly. (One of the
dependencies may have failed, for instance.) Here are
the relevant directories on bento, so feel free to dig
around. /a/asami/portbuild/<arch>/<major_version>/errors error logs from latest <major_version> run on <arch>
/logs all logs from latest <major_version> run on <arch>
/packages packages from latest <major_version> run on <arch>
/bak/errors error logs from last complete <major_version> run on <arch>
/bak/logs all logs from last complete <major_version> run on <arch>
/bak/packages packages from last complete <major_version> run on <arch>
Basically, if the port shows up in
packages, or it is in
logs but not in
errors, it built fine. (The
errors directories are what you get
from the web page.)I added a new port. Do I need to add it to the
INDEX?No. The ports manager will regenerate the
INDEX and commit it every few
days.Are there any other files I am not allowed to
touch?Any file directly under ports/, or
any file under a subdirectory that starts with an
uppercase letter (Mk/,
Tools/, etc.). In particular, the
ports manager is very protective of
ports/Mk/bsd.port*.mk so do not
commit changes to those files unless you want to face his
wra(i)th.What is the proper procedure for updating the checksum
for a port's distfile when the file changes without a
version change?When the checksum for a port's distfile is updated due
to the author updating the file without changing the port's
revision, the commit message should include a summary of
the relevant diffs between the original and new distfile to
ensure that the distfile has not been corrupted or
maliciously altered. If the current version of the port
has been in the ports tree for a while, a copy of the old
distfile will usually be available on the ftp servers;
otherwise the author or maintainer should be contacted to
find out why the distfile has changed.Perks of the JobUnfortunately, there are not many perks involved with being a
committer. Recognition as a competent software engineer is probably
the only thing that will be of benefit in the long run. However,
there are at least some perks:Direct access to cvsup-masterAs a committer, you may apply to &a.jdp; for direct access
to cvsup-master.FreeBSD.org,
providing the public key output from cvpasswd
yourusername@FreeBSD.org
freefall.FreeBSD.org. Please note: you must
specify freefall.FreeBSD.org on the
cvpasswd command line even though the
actual server is cvsup-master. Access to
cvsup-master should not be overused as it is
a busy machine.A Free DVD SubscriptionFreeBSD Services Limited offer a free DVD subscription to
FreeBSD committers. To take advantage of this offer, go to
and fill out their customer form,
making sure that you tick the FreeBSD Committer and free
subscription check-boxes. A message will be sent to your
FreeBSD.org email address asking
for confirmation. Just reply to the mail, quoting the message
and updating the Membership Valid field with a
Y. You can confirm that the reply was sent
successfully by logging
in to their site and checking that your Current
Status is set to
Associated.In addition to the free subscription, committers are also
entitled to a 10% discount on
all products on the site.A Free 4-CD Set SubscriptionFreeBSD Mall,
Inc. offers a free subscription of the 4-CD set or
the DVD product to all FreeBSD committers. Information about how
to obtain your free media is mailed to
developers@FreeBSD.org following each major
release.Miscellaneous QuestionsWhy are trivial or cosmetic changes to files on a vendor
branch a bad idea?From now on, every new vendor release of that file will
need to have patches merged in by hand.From now on, every new vendor release of that file will
need to have patches verified by hand.The option does not work very well.
Ask &a.obrien; for horror stories.How do I add a new file to a CVS branch?To add a file onto a branch, simply checkout or update
to the branch you want to add to and then add the file using
cvs add as you normally would. For
example, if you wanted to MFC the file
src/sys/alpha/include/smp.h from HEAD
to RELENG_4 and it does not exist in RELENG_4 yet, you would
use the following steps:MFC'ing a New File&prompt.user; cd sys/alpha/include
&prompt.user; cvs update -rRELENG_4
cvs update: Updating .
U clockvar.h
U console.h
...
&prompt.user; cvs update -kk -Ap smp.h > smp.h
===================================================================
Checking out smp.h
RCS: /usr/cvs/src/sys/alpha/include/smp.h,v
VERS: 1.1
***************
&prompt.user; cvs add smp.h
cvs add: scheduling file `smp.h' for addition on branch `RELENG_4'
cvs add: use 'cvs commit' to add this file permanently
&prompt.user; cvs commitWhat meta information should I include in a
commit message?As well as including an informative message with each commit
you may need to include some additional information as
well.This information consists of one or more lines containing the
key word or phrase, a colon, tabs for formatting, and then the
additional information.The key words or phrases are:PR:The problem report (if any) which is affected
(typically, by being closed) by this commit.Submitted by:The name and e-mail address of the person that
submitted the fix; for committers, just the username on
the FreeBSD cluster.Reviewed by:The name and e-mail address of the person or people
that reviewed the change; for committers, just the
username on the FreeBSD cluster. If a patch was
submitted to a mailing list for review, and the review
was favorable, then just include the list name.Approved by:The name and e-mail address of the person or people
that approved the change; for committers, just the
username on the FreeBSD cluster. It is customary to get
prior approval for a commit if it is to an area of the
tree to which you do not usually commit. In addition,
during the run up to a new release all commits
must be approved by the release
engineering team. If these are your first commits then
you should have passed them past your mentor first, and
you should list your mentor, as in
``username-of-mentor(mentor)''.
Obtained from:The name of the project (if any) from which the code
was obtained.MFC after:If you wish to receive an e-mail reminder to
MFC at a later date, specify the
number of days, weeks, or months after which an
MFC is planned.Commit log for a commit based on a PRYou want to commit a change based on a PR submitted by John
Smith containing a patch. The end of the commit message should
look something like this....
PR: foo/12345
Submitted by: John Smith <John.Smith@example.com>Commit log for a commit needing reviewYou want to change the virtual memory system. You have
posted patches to the appropriate mailing list (in this case,
freebsd-arch) and the changes have been
approved....
Reviewed by: -archCommit log for a commit needing approvalYou want to commit a change to a section of the tree with a
MAINTAINER assigned. You have collaborated with the listed
MAINTAINER, who has told you to go ahead and commit....
Approved by: abcWhere abc is the account name of
the person who approved.Commit log for a commit bringing in code from
OpenBSDYou want to commit some code based on work done in the
OpenBSD project....
Obtained from: OpenBSDCommit log for a change to &os.current; with a planned
commit to &os.stable; to follow at a later date.You want to commit some code which will be merged from
&os.current; into the &os.stable; branch after two
weeks....
MFC after: 2 weeksWhere 2 is the number of days,
weeks, or months after which an MFC is
planned. The weeks option may be
day, days,
week, weeks,
month, months,
or may be left off (in which case, days will be assumed).In some cases you may need to combine some of these.Consider the situation where a user has submitted a PR
containing code from the NetBSD project. You are looking at the
PR, but it is not an area of the tree you normally work in, so
you have decided to get the change reviewed by the
arch mailing list. Since the change is
complex, you opt to MFC after one month to
allow adequate testing.The extra information to include in the commit would look
something likePR: foo/54321
Submitted by: John Smith <John.Smith@example.com>
Reviewed by: -arch
Obtained from: NetBSD
MFC after: 1 monthHow do I access people.FreeBSD.org to put up personal
or project information?people.FreeBSD.org is the
same as freefall.FreeBSD.org. Just create a
public_html directory. Anything you
place in that directory will automatically be visible
under .Where are the mailing list archives stored?The mailing lists are archived under /g/mail
which will show up as /hub/g/mail with &man.pwd.1;.
This location is accessible from any machine on the FreeBSD cluster.
diff --git a/en_US.ISO8859-1/articles/contributing/article.sgml b/en_US.ISO8859-1/articles/contributing/article.sgml
index 09580b563e..842a09d18a 100644
--- a/en_US.ISO8859-1/articles/contributing/article.sgml
+++ b/en_US.ISO8859-1/articles/contributing/article.sgml
@@ -1,553 +1,562 @@
%man;
%freebsd;
%newsgroups;
%authors;
%mailing-lists;
+
+%trademarks;
]>
Contributing to FreeBSD$FreeBSD$This article describes the different ways in which an
individual or organization may contribute to the FreeBSD
Project.JordanHubbardContributed by
+
+
+ &tm-attrib.freebsd;
+ &tm-attrib.ieee;
+ &tm-attrib.general;
+
+
contributingSo you want to contribute to FreeBSD? That is great! FreeBSD
relies on the contributions of its user base
to survive. Your contributions are not only appreciated, they are
vital to FreeBSD's continued growth.Contrary to what some people might have you believe, you do
not need to be a hot-shot programmer or a close personal friend of
the FreeBSD core team to have your contributions accepted. A
large and growing number of international contributors, of greatly
varying ages and areas of technical expertise, develop FreeBSD.
There is always more work to be done than there are people
available to do it, and more help is always appreciated.The FreeBSD project is responsible for an entire operating
system environment, rather than just a kernel or a few scattered
utilities. As such, our TODO lists span a
very wide range of tasks: from documentation, beta testing and
presentation, to the system installer and highly specialized types
of kernel development. People of any skill level, in almost any
area, can almost certainly help the project.Commercial entities engaged in FreeBSD-related enterprises are
also encouraged to contact us. Do you need a special extension to
make your product work? You will find us receptive to your
requests, given that they are not too outlandish. Are you working
on a value-added product? Please let us know! We may be able to
work cooperatively on some aspect of it. The free software world
is challenging many existing assumptions about how software is
developed, sold, and maintained, and we urge you to at least give
it a second look.What Is NeededThe following list of tasks and sub-projects represents
something of an amalgam of various TODO
lists and user requests.Ongoing Non-Programmer TasksMany people who are involved in FreeBSD are not
programmers. The Project includes documentation writers, Web
designers, and support people. All that these people need to
contribute is an investment of time and a willingness to
learn.Read through the FAQ and Handbook periodically. If
anything is badly explained, out of date or even just
completely wrong, let us know. Even better, send us a fix
(SGML is not difficult to learn, but there is no objection
to ASCII submissions).Help translate FreeBSD documentation into your native
language. If documentation already exists for your
language, you can help translate additional documents or
verify that the translations are up-to-date. First take a
look at the Translations
FAQ in the FreeBSD Documentation Project Primer.
You are not committing yourself to translating every
single FreeBSD document by doing this — as a
volunteer, you can do as much or as little translation as
you desire. Once someone begins translating, others
almost always join the effort. If you only have the time
or energy to translate one part of the documentation,
please translate the installation instructions.Read the &a.questions; and &ng.misc;
occasionally (or even regularly). It can be very
satisfying to share your expertise and help people solve
their problems; sometimes you may even learn something new
yourself! These forums can also be a source of ideas for
things to work on.Ongoing Programmer TasksMost of the tasks listed here require either a considerable
investment of time, or an in-depth knowledge of the FreeBSD
kernel, or both. However, there are also many useful tasks
which are suitable for weekend hackers.If you run FreeBSD-CURRENT and have a good Internet
connection, there is a machine current.FreeBSD.org which builds a
full release once a day—every now and again, try to
install the latest release from it and report any failures
in the process.Read the &a.bugs;. There might be a
problem you can comment constructively on or with patches
you can test. Or you could even try to fix one of the
problems yourself.If you know of any bug fixes which have been
successfully applied to -CURRENT but have not been merged
into -STABLE after a decent interval (normally a couple of
weeks), send the committer a polite reminder.Move contributed software to
src/contrib in the source
tree.Make sure code in src/contrib is
up to date.Build the source tree (or just part of it) with extra
warnings enabled and clean up the warnings.Fix warnings for ports which do deprecated things like
using gets() or including
malloc.h.If you have contributed any ports, send your patches
back to the original authors (this will make your life
easier when they bring out the next version).
- Get copies of formal standards like POSIX. You can
+ Get copies of formal standards like &posix;. You can
get some links about these standards at the FreeBSD
- C99 & Posix Standards Conformance Project web
+ C99 & POSIX Standards Conformance Project web
site. Compare FreeBSD's behavior to that required by the
standard. If the behavior differs, particularly in subtle
or obscure corners of the specification, send in a PR
about it. If you are able, figure out how to fix it and
include a patch in the PR. If you think the standard is
wrong, ask the standards body to consider the
question.Suggest further tasks for this list!Work through the PR Databaseproblem reports databaseThe FreeBSD
PR list shows all the current active problem reports
and requests for enhancement that have been submitted by
FreeBSD users. The PR database includes both programmer and
non-programmer tasks. Look through the open PRs, and see if
anything there takes your interest. Some of these might be
very simple tasks that just need an extra pair of eyes to look
over them and confirm that the fix in the PR is a good one.
Others might be much more complex, or might not even have a
fix included at all.Start with the PRs that have not been assigned to anyone
else. If a PR is assigned to someone else, but it looks like
something you can handle, email the person it is assigned to
and ask if you can work on it—they might already have a
patch ready to be tested, or further ideas that you can
discuss with them.How to ContributeContributions to the system generally fall into one or more
of the following 5 categories:Bug Reports and General CommentaryAn idea or suggestion of general
technical interest should be mailed to the &a.hackers;.
Likewise, people with an interest in such things (and a
tolerance for a high volume of mail!) may
subscribe to the &a.hackers; by sending mail to
&a.majordomo;. See The
FreeBSD Handbook for more information about this and
other mailing lists.If you find a bug or are submitting a specific change,
please report it using the &man.send-pr.1; program or its
WEB-based
equivalent. Try to fill-in each field of the bug
report. Unless they exceed 65KB, include any patches directly
in the report. If the patch is suitable to be applied to the
source tree put [PATCH] in the synopsis of
the report. When including patches, do
not use cut-and-paste because cut-and-paste turns
tabs into spaces and makes them unusable. Consider
compressing patches and using &man.uuencode.1; if they exceed
20KB.After filing a report, you should receive confirmation
along with a tracking number. Keep this tracking number so
that you can update us with details about the problem by
sending mail to bug-followup@FreeBSD.org. Use
the number as the message subject, e.g. "Re:
kern/3377". Additional information for any bug
report should be submitted this way.If you do not receive confirmation in a timely fashion (3
days to a week, depending on your email connection) or are,
for some reason, unable to use the &man.send-pr.1; command,
then you may ask someone to file it for you by sending mail to
the &a.bugs;.See also this
article on how to write good problem reports.Changes to the Documentationdocumentation submissionsChanges to the documentation are overseen by the &a.doc;.
Please look at the FreeBSD Documentation
Project Primer for complete instructions. Send
submissions and changes (even small ones are welcome!) using
&man.send-pr.1; as described in Bug Reports and General
Commentary.Changes to Existing Source CodeFreeBSD-CURRENTAn addition or change to the existing source code is a
somewhat trickier affair and depends a lot on how far out of
date you are with the current state of FreeBSD
development. There is a special on-going release of FreeBSD
known as FreeBSD-CURRENT which is made
available in a variety of ways for the convenience of
developers working actively on the system. See The FreeBSD
Handbook for more information about getting and using
FreeBSD-CURRENT.Working from older sources unfortunately means that your
changes may sometimes be too obsolete or too divergent for
easy re-integration into FreeBSD. Chances of this can be
minimized somewhat by subscribing to the &a.announce; and the
&a.current; lists, where discussions on the current state of
the system take place.Assuming that you can manage to secure fairly up-to-date sources
to base your changes on, the next step is to produce a set of diffs to
send to the FreeBSD maintainers. This is done with the &man.diff.1;
command.The preferred &man.diff.1; format for submitting patches
is the unified output format generated by diff
-u. However, for patches that substantially change a
region of code, a context output format diff generated by
diff -c may be more readable and thus
preferable.diffFor example:&prompt.user; diff -c oldfile newfile
or
&prompt.user; diff -c -r olddir newdir
would generate such a set of context diffs for the given
source file or directory hierarchy.Likewise,
&prompt.user; diff -u oldfile newfile
or
&prompt.user; diff -u -r olddir newdir
would do the same, except in the unified diff format.See the manual page for &man.diff.1; for more details.Once you have a set of diffs (which you may test with the
&man.patch.1; command), you should submit them for inclusion
with FreeBSD. Use the &man.send-pr.1; program as described in
Bug Reports and General
Commentary. Do not just send the
diffs to the &a.hackers; or they will get lost! We greatly
appreciate your submission (this is a volunteer project!);
because we are busy, we may not be able to address it
immediately, but it will remain in the PR database until we
do. Indicate your submission by including
[PATCH] in the synopsis of the
report.uuencodeIf you feel it appropriate (e.g. you have added, deleted,
or renamed files), bundle your changes into a
tar file and run the &man.uuencode.1;
program on it. Archives created with &man.shar.1; are also welcome.If your change is of a potentially sensitive nature,
e.g. you are unsure of copyright issues governing its further
distribution or you are simply not ready to release it without
a tighter review first, then you should send it to &a.core;
directly rather than submitting it with &man.send-pr.1;. The
&a.core; reaches a much smaller group of people who
do much of the day-to-day work on FreeBSD. Note that this
group is also very busy and so you should
only send mail to them where it is truly necessary.Please refer to &man.intro.9; and &man.style.9; for
some information on coding style. We would appreciate it if
you were at least aware of this information before submitting
code.New Code or Major Value-Added PackagesIn the case of a significant contribution of a large body
work, or the addition of an important new feature to FreeBSD,
it becomes almost always necessary to either send changes as
uuencoded tar files or upload them to a web or FTP site for
other people to access. If you do not have access to a web or
FTP site, ask on an appropriate FreeBSD mailing list for
someone to host the changes for you.When working with large amounts of code, the touchy
subject of copyrights also invariably comes up. Acceptable
copyrights for code included in FreeBSD are:BSD copyrightThe BSD copyright. This copyright is most preferred
due to its no strings attached nature and
general attractiveness to commercial enterprises. Far
from discouraging such commercial use, the FreeBSD Project
actively encourages such participation by commercial
interests who might eventually be inclined to invest
something of their own into FreeBSD.GPLGNU General Public LicenseGNU General Public LicenseThe GNU General Public License, or GPL.
This license is not quite as popular with us due to the
amount of extra effort demanded of anyone using the code
for commercial purposes, but given the sheer quantity of
GPL'd code we currently require (compiler, assembler, text
formatter, etc) it would be silly to refuse additional
contributions under this license. Code under the GPL also
goes into a different part of the tree, that being
/sys/gnu or
/usr/src/gnu, and is therefore easily
identifiable to anyone for whom the GPL presents a
problem.Contributions coming under any other type of copyright
must be carefully reviewed before their inclusion into FreeBSD
will be considered. Contributions for which particularly
restrictive commercial copyrights apply are generally
rejected, though the authors are always encouraged to make
such changes available through their own channels.To place a BSD-style copyright on your
work, include the following text at the very beginning of
every source code file you wish to protect, replacing the text
between the %% with the appropriate
information:Copyright (c) %%proper_years_here%%
%%your_name_here%%, %%your_state%% %%your_zip%%.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer as
the first lines of this file unmodified.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY %%your_name_here%% ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL %%your_name_here%% BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
$Id$For your convenience, a copy of this text can be found in
/usr/share/examples/etc/bsd-style-copyright.Money, Hardware or Internet AccessWe are always very happy to accept donations to further
the cause of the FreeBSD Project and, in a volunteer effort
like ours, a little can go a long way! Donations of hardware
are also very important to expanding our list of supported
peripherals since we generally lack the funds to buy such
items ourselves.Donating FundsThe FreeBSD Foundation is a non-profit, tax-exempt
foundation established to further the goals of the FreeBSD
Project. As a 501(c)3 entity, the Foundation is generally
exempt from US federal income tax as well as Colorado State
income tax. Donations to a tax-exempt entity are often
deductible from taxable federal income.Donations may be sent in check form to:
The FreeBSD Foundation
7321 Brockway Dr.Boulder, CO80303USAThe FreeBSD Foundation is now able to accept donations
through the web with PayPal. To place a donation, please
visit the Foundation web
site.More information about the FreeBSD Foundation can be
found in The
FreeBSD Foundation -- an Introduction. To contact
the Foundation by email, write to
bod@FreeBSDFoundation.org.Donating HardwaredonationsThe FreeBSD Project happily accepts donations of
hardware that it can find good use for. If you are
interested in donating hardware, please contact the Donations Liaison
Office.Donating Internet AccessWe can always use new mirror sites for FTP, WWW or
cvsup. If you would like to be such a
mirror, please see the Mirroring FreeBSD
article for more information.
diff --git a/en_US.ISO8859-1/articles/contributors/article.sgml b/en_US.ISO8859-1/articles/contributors/article.sgml
index 000ebd61ed..c83a3d1ce1 100644
--- a/en_US.ISO8859-1/articles/contributors/article.sgml
+++ b/en_US.ISO8859-1/articles/contributors/article.sgml
@@ -1,682 +1,691 @@
%man;
%authors;
%teams;
%mailing-lists;
+
+%trademarks;
+
%contrib.ent;
]>
Contributors to FreeBSD$FreeBSD$
+
+ &tm-attrib.freebsd;
+ &tm-attrib.sun;
+ &tm-attrib.general;
+
+
This article lists individuals and organizations who have
made a contribution to FreeBSD.Donors GalleryThe FreeBSD Project is indebted to the following donors and would
like to publicly thank them here!Contributors to the central server
project:The following individuals and businesses made it possible for
the FreeBSD Project to build a new central server machine, which
has replaced freefall.FreeBSD.org at
one point, by donating the following items:&a.mbarkah; and his employer, Hemisphere Online,
donated a Pentium Pro (P6) 200MHz CPUASA
Computers donated a Tyan 1662
motherboard.Joe McGuckin joe@via.net of ViaNet Communications donated
a Kingston ethernet controller.Jack O'Neill jack@diamond.xtalwind.net
donated an NCR 53C875 SCSI controller
card.Ulf Zimmermann ulf@Alameda.net of Alameda Networks donated
128MB of memory, a 4 Gb disk
drive and the case.Direct funding:The following individuals and businesses have generously
contributed direct funding to the project:Annelise Anderson
ANDRSN@HOOVER.STANFORD.EDU&a.dillon;Blue Mountain
ArtsEpilogue Technology
Corporation&a.sef;Global Technology
Associates, IncDon Scott WildeGianmarco Giovannelli
gmarco@masternet.itJosef C. Grosch joeg@truenorth.orgRobert T. Morris&a.chuckr;Kenneth P. Stox ken@stox.sa.enteract.com of
Imaginary Landscape,
LLC.Dmitry S. Kohmanyuk dk@dog.farm.orgLaser5 of Japan
(a portion of the profits from sales of their various FreeBSD
CDROMs).Fuki Shuppan
Publishing Co. donated a portion of their profits from
Hajimete no FreeBSD (FreeBSD, Getting
started) to the FreeBSD and XFree86 projects.ASCII Corp.
donated a portion of their profits from several FreeBSD-related
books to the FreeBSD project.Yokogawa Electric
Corp has generously donated significant funding to the
FreeBSD project.BuffNETPacific
SolutionsSiemens AG
via Andre Albsmeier
andre.albsmeier@mchp.siemens.deChris Silva ras@interaccess.comHardware contributors:The following individuals and businesses have generously
contributed hardware for testing and device driver
development/support:BSDi for providing the Pentium P5-90 and
486/DX2-66 EISA/VL systems that are being used for our
development work, to say nothing of the network access and other
donations of hardware resources.Compaq
has donated a variety of Alpha systems to the FreeBSD
Project. Among the many generous donations are 4
AlphaStation DS10s, an AlphaServer DS20,
AlphaServer 2100s, an AlphaServer 4100, 8 500Mhz
Personal Workstations, 4 433Mhz Personal Workstations,
and more! These machines are used for release
engineering, package building, SMP development, and general
development on the Alpha architecture.TRW Financial Systems, Inc. provided 130 PCs, three 68 GB
file servers, twelve Ethernets, two routers and an ATM switch for
debugging the diskless code.Dermot McDonnell donated the Toshiba XM3401B CDROM drive
currently used in freefall.Chuck Robey chuckr@glue.umd.edu contributed
his floppy tape streamer for experimental work.Larry Altneu larry@ALR.COM, and &a.wilko;,
provided Wangtek and Archive QIC-02 tape drives in order to
improve the wt driver.Ernst Winter ewinter@lobo.muc.de contributed
a 2.88 MB floppy drive to the project. This will hopefully
increase the pressure for rewriting the floppy disk driver.
Tekram
Technologies sent one each of their DC-390, DC-390U
and DC-390F FAST and ULTRA SCSI host adapter cards for
regression testing of the NCR and AMD drivers with their cards.
They are also to be applauded for making driver sources for free
operating systems available from their FTP server .Larry M. Augustin contributed not only a
Symbios Sym8751S SCSI card, but also a set of data books,
including one about the forthcoming Sym53c895 chip with Ultra-2
and LVD support, and the latest programming manual with
information on how to safely use the advanced features of the
latest Symbios SCSI chips. Thanks a lot!Christoph Kukulies kuku@FreeBSD.org donated
an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver
development.Mike Tancsa mike@sentex.ca donated four various
ATM PCI cards in order to help increase support of these cards as
well as help support the development effort of the netatm ATM
stack.
Special contributors:BSDi (formerly Walnut Creek CDROM)
has donated almost more than we can say (see the 'About the FreeBSD Project'
section of the FreeBSD Handbook for more details).
In particular, we would like to thank them for the original
hardware used for freefall.FreeBSD.org, our primary
development machine, and for thud.FreeBSD.org, a testing and build
box. We are also indebted to them for funding various
contributors over the years and providing us with unrestricted
use of their T1 connection to the Internet.The interface
business GmbH, Dresden has been patiently supporting
&a.joerg; who has often preferred FreeBSD work over paid work, and
used to fall back to their (quite expensive) EUnet Internet
connection whenever his private connection became too slow or
flaky to work with it...Berkeley Software Design,
Inc. has contributed their DOS emulator code to the
remaining BSD world, which is used in the
doscmd command.The FreeBSD Core TeamThe FreeBSD core team constitutes the project's Board of
Directors, responsible for deciding the project's overall goals
and direction as well as managing specific
areas of the FreeBSD project landscape.(in alphabetical order by last name):
&contrib.core;
The FreeBSD DevelopersThese are the people who have commit privileges and do the
engineering work on the FreeBSD source tree. All core team members are
also developers.(in alphabetical order by last name):
&contrib.committers;
The FreeBSD Documentation ProjectThe FreeBSD
Documentation Project is responsible for a number of different
services, each service being run by an individual and his
deputies (if any):Documentation Project Architect&a.nik;Handbook Editor&a.doc;FAQ Editor&a.doc;News Editor&a.jim;In the Press Editor&a.jkoshy;FreeBSD Really-Quick NewsLetter EditorChris Coleman chrisc@vmunix.comGallery Editor&a.phantom;Commercial Gallery Editor&a.ceri;User Groups Editor&a.grog;
- FreeBSD Java Project
+ FreeBSD &java; Project&a.patrick;LinuxDoc to DocBook conversion&a.nik;Who is Responsible for WhatDocumentation
Project Manager&a.nik;CVSup Mirror Site Coordinator&a.cvsup-master;which includes:&a.kuriyama; (responsible),&a.jdp; (advisor)Internationalization&a.ache;Postmaster&a.jmb;Release
Coordination&a.re; headed by &a.murray;Public Relations & Corporate LiaisonSeat openSecurity
Officers&a.security-officer; headed by &a.nectar;Source
Repository ManagersPrincipal: &a.peter;Assistants: &a.markm;, &a.joe;Website Management&a.www;Ports
Manager&a.portmgr;which includes:&a.asami;,&a.knu;,&a.kris;,&a.lioux;,&a.marcus;,&a.sobomax;,&a.steve;,&a.will;Standards&a.wollman;XFree86 Project, Inc. Liaison&a.rich;GNATS
Administrator&a.steve;Bugmeister&a.keramida;Donations Liaison Office&a.donations;which includes:&a.mwlucas&a.nsayer&a.obrien&a.rwatson&a.trhodesCore Team Alumnicore teamThe following people were members of the FreeBSD core team during
the periods indicated. We thank them for their past efforts in the
service of the FreeBSD project.In rough chronological order:
&contrib.corealumni;
Development Team Alumnidevelopment teamThe following people were members of the FreeBSD development team
during the periods indicated. We thank them for their past efforts
in the service of the FreeBSD project.In rough chronological order:
&contrib.develalumni;
Derived Software ContributorsThis software was originally derived from William F. Jolitz's 386BSD
release 0.1, though almost none of the original 386BSD specific code
remains. This software has been essentially re-implemented from the
4.4BSD-Lite release provided by the Computer Science Research Group
(CSRG) at the University of California, Berkeley and associated academic
contributors.There are also portions of NetBSD and OpenBSD that have been
integrated into FreeBSD as well, and we would therefore like to thank
all the contributors to NetBSD and OpenBSD for their work.Additional FreeBSD Contributors(in alphabetical order by first name):
&contrib.additional;
386BSD Patch Kit Patch Contributors(in alphabetical order by first name):
&contrib.386bsd;
diff --git a/en_US.ISO8859-1/share/sgml/catalog b/en_US.ISO8859-1/share/sgml/catalog
index 41eb3847fd..e6008ea304 100644
--- a/en_US.ISO8859-1/share/sgml/catalog
+++ b/en_US.ISO8859-1/share/sgml/catalog
@@ -1,15 +1,17 @@
-- ...................................................................... --
-- FreeBSD SGML Public Identifiers ...................................... --
-- $FreeBSD$
--
PUBLIC "-//FreeBSD//DOCUMENT DocBook Stylesheet//EN"
"freebsd.dsl"
PUBLIC "-//FreeBSD//ENTITIES DocBook Mailing List Entities//EN"
"mailing-lists.ent"
PUBLIC "-//FreeBSD//ENTITIES DocBook Language Specific Entities//EN"
"l10n.ent"
+PUBLIC "-//FreeBSD//ENTITIES DocBook Trademark Entities//EN"
+ "trademarks.ent"