Contributions to the system generally fall into one or more of the following 6 categories:
An idea or suggestion of general technical interest should be mailed to the FreeBSD technical discussions mailing list <freebsd-hackers@FreeBSD.org>. Likewise, people with an interest in such things (and a tolerance for a high volume of mail!) may subscribe to the hackers mailing list by sending mail to <majordomo@FreeBSD.org>. See mailing lists 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 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. 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 uuencode(1) if they exceed 20KB. Upload very large submissions to ftp.FreeBSD.org:/pub/FreeBSD/incoming/.
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 send-pr(1) command, then you may ask someone to file it for you by sending mail to the FreeBSD problem reports mailing list <freebsd-bugs@FreeBSD.org>.
Changes to the documentation are overseen by the FreeBSD documentation project mailing list <freebsd-doc@FreeBSD.org>. Send submissions and changes (even small ones are welcome!) using send-pr as described in Bug Reports and General Commentary.
An 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 the core 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 Staying current with FreeBSD 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 FreeBSD announcements mailing list <freebsd-announce@FreeBSD.org> and the FreeBSD-current mailing list <freebsd-current@FreeBSD.org> 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 diff(1) command, with the ``context diff'' form being preferred. For example:
% diff -c oldfile newfileor
% diff -c -r olddir newdirwould generate such a set of context diffs for the given source file or directory hierarchy. See the man page for diff(1) for more details.
Once you have a set of diffs (which you may test with the patch(1) command), you should submit them for inclusion with FreeBSD. Use the send-pr(1) program as described in Bug Reports and General Commentary. Do not just send the diffs to the FreeBSD technical discussions mailing list <freebsd-hackers@FreeBSD.org> 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.
If you feel it appropriate (e.g. you have added, deleted, or renamed files), bundle your changes into a tar file and run the uuencode(1) program on it. Shar archives 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 FreeBSD core team <freebsd-core@FreeBSD.org> directly rather than submitting it with send-pr(1). The core mailing list 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 9 intro and man 9 style for some information on coding style. We would appreciate it if you were at least aware of this information before submitting code.
In the rare 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 uuencode'd tar files or upload them to our ftp site ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming/.
When working with large amounts of code, the touchy subject of copyrights also invariably comes up. Acceptable copyrights for code included in FreeBSD are:
The 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.
The GNU 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.
We 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.
While the FreeBSD Project is not a 501(c)(3) (charitable) corporation and hence cannot offer special tax incentives for any donations made, any such donations will be gratefully accepted on behalf of the project by FreeBSD, Inc.
FreeBSD, Inc. was founded in early 1995 by Jordan K. Hubbard <jkh@FreeBSD.org> and David Greenman <dg@FreeBSD.org> with the goal of furthering the aims of the FreeBSD Project and giving it a minimal corporate presence. Any and all funds donated (as well as any profits that may eventually be realized by FreeBSD, Inc.) will be used exclusively to further the project's goals.
Please make any checks payable to FreeBSD, Inc., sent in care of the following address:
c/o Jordan Hubbard
4041 Pike Lane, Suite F
(currently using the Walnut Creek CDROM address until a PO box can be opened)
Wire transfers may also be sent directly to:
Concord Main Office
P.O. Box 37176
Routing #: 121-000-358
Account #: 01411-07441 (FreeBSD, Inc.)
Any correspondence related to donations should be sent to Jordan K. Hubbard <jkh@FreeBSD.org>, either via email or to the FreeBSD, Inc. postal address given above.
If you do not wish to be listed in our donors section, please specify this when making your donation. Thanks!
Donations of hardware in any of the 3 following categories are also gladly accepted by the FreeBSD Project:
General purpose hardware such as disk drives, memory or complete systems should be sent to the FreeBSD, Inc. address listed in the donating funds section.
Hardware for which ongoing compliance testing is desired. We are currently trying to put together a testing lab of all components that FreeBSD supports so that proper regression testing can be done with each new release. We are still lacking many important pieces (network cards, motherboards, etc) and if you would like to make such a donation, please contact David Greenman <dg@FreeBSD.org> for information on which items are still required.
Hardware currently unsupported by FreeBSD for which you would like to see such support added. Please contact the FreeBSD core team <freebsd-core@FreeBSD.org> before sending such items as we will need to find a developer willing to take on the task before we can accept delivery of new hardware.