Contributing to FreeBSD

Contributed by &a.jkh;. This guide is intended for those who are moderately familar with FreeBSD and are now to the point where they have some locally developed customizations or fixes to the system which they'd like to incorporate back into the mainstream sources, thus saving the work of having to re-integrate the changes for each subsequent FreeBSD release. Submitting something to the FreeBSD project is also an excellent way of getting your code seriously tested! Many people have seen an original concept develop far beyond what they might have envisioned at the start just due to the flood of feedback and ideas generated by the many thousands of users of FreeBSD. Contributions are also what FreeBSD lives and grows from, and so your contributions are very important to the continued survival of this communal effort of ours---we're very glad to see you reading this document! Submissions to FreeBSD can generally be classified into four catagories: Ideas, general suggestions, bug reports. Addition, deletion, renaming or patching of existing sources. Significant contribution of a large body of independant work. Porting of freely available software. A submission in any of these catagories is highly welcomed as they are each, in their own way, quite significant to the project. Ideas and suggestions

An idea, suggestion or fix can be communicated in one of the following ways: An idea or suggestion of general technical interest should be mailed to <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 sendimg mail to <majordomo@freebsd.org>. See for more information about this and other mailing lists. An actual bug report should be filed by using the send-pr(1) program. This will prompt you for various fields to fill in. Simply go to the fields surrounded by <>'s and fill in your own information in place of what's suggested there. You should receive confirmation of your bug report and a tracking number. Keep this tracking number and use it in any subsequent correspondence. 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 also file a bug report by sending mail to <bugs@freebsd.org>. Changes to the existing code

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'' and made available in a variety of ways for the convenience of developers who wish to actively work on the system. See for more information about getting and using FreeBSD-current. Working from older sources unfortunately means that your changes may sometimes be too obsolete to use, or too divergent to allow for easy re-integration. This can be minimized somewhat by subscribing to the <announce@freebsd.org> mailing list, among others, where periodic announcements concerning the current state of the system are made. If you see a change being proposed for which you have a better solution, by all means come forward with your contribution and we will do our very best to evaluate it fairly and perhaps integrate it if it is indeed a better solution. 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 for evaluation and possible adoption. This is done with the diff(1) command, with the FreeBSD maintainers preferring to receive diffs in `context diff' form. For example: diff -c <oldfile> <newfile> or diff -c -r <olddir> <newdir> See the man page for diff(1) for more details on producing both context and recursive context diffs. Once you have a set of diffs that are capable of taking a copy of the original code and bringing it to a state identical to the ``new'' sources (you may test this with the patch(1) command), you should bundle them up in an email message and send it, along with a brief description of what the diffs are for, to <hackers@freebsd.org>. Someone will very likely get back in touch with you in 24 hours or less, assuming of course that your diffs are interesting! If your changes don't express themselves well as diffs alone (e.g. you've perhaps added, deleted or renamed files as well) then you may be better off bundling any new files, diffs and instructions for deleting/renaming any others into a tar file and running the uuencode(1) program on it before sending the output of that to <hackers@freebsd.org>. See the man pages on tar(1) and uuencode(1) for more info on bundling files through the mail this way. If your change is of a potentially sensitive nature, for example you're unsure of copyright issues governing its further distribution, or you're simply not ready to release it without a tighter review first, then you should send it to <core@freebsd.org> rather than <hackers@freebsd.org>. 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 mail to them in cases where mailing to hackers truly is impractical. Contributions of new code

In 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 our ftp site where users may log in anonymously and upload their work or download the work-in-progress files left by others. When working with large amounts of code, the touchy subject of copyrights also invariably comes up. Acceptable copyrights for code included in FreeBSD are: Contributions under the BSD copyright are greatly preferred due to its ``no strings attached'' nature and general attractiveness to commercial enterprises who might then be inclined to invest something of their own into FreeBSD. Contributions under the GNU Public License, or ``GPL''. This is not quite as popular a solution for us, due to the amount of extra effort demanded of anyone using the code for commercial purposes. However, given the sheer quantity of GPL'd code we currently require (compiler, assembler, text formatter, etc), it would be silly to pretend that we couldn't deal with the GPL at all and so we have become more willing to accept code with either the BSD or the GPL copyright. Code under the GPL also goes into a different part of the tree, that being /sys/gnu or /usr/src/gnu. Contributions coming under any other type of copyright must be carefully reviewed before their inclusion into FreeBSD will even be considered. Contributions for which particularly restrictive commercial copyrights apply are generally rejected, though the authors are always free to make the changes available through their own channels. To place such a copyright on your work, place 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. 3. All advertising materials mentioning features or use of this software must display the following acknowledgment: This product includes software developed by %%your_name_here%%. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. 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: submitters.sgml,v 1.4 1995/06/30 17:37:51 jfieber Exp $ For your convenience, a copy of this text can be found in /usr/share/examples/etc/bsd-style-copyright. Porting of software

The porting of freely available software, while perhaps not as gratifying as developing your own package from scratch, is still a vital part of FreeBSD's growth and of great usefulness to those who wouldn't otherwise know where to turn for it. All ported software is organized into a hierarchy know as ``the ports collection''. This collection enables a new user to get a complete overview of what's available in a short time, and with a logical framework. The ports collection also saves considerable space by not actually containing the the majority of the sources being ported. See for more information on using the ports collection and for guidelines on creating new ports. You may also send mail to <ports@freebsd.org>. Whichever way you decide to contribute, we hope you'll find it an enjoyable process and also realize how valuable your contributions are to the project! FreeBSD is one of those great projects where the more we all put in, the more we all get back out of it again, and with enough steady contributions it begins to aquire a momentum of its own. It is through such momentum that mountains are moved!