|
Now that you have decided that your issue merits a problem report, and that it is a FreeBSD problem, it is time to write the actual problem report. Before we get into the mechanics of the program used to generate and submit PRs, here are some tips and tricks to help make sure that your PR will be most effective.
Do not leave the “Synopsis” line empty. The PRs go both onto a mailing list that goes all over the world (where the “Synopsis” is used for the Subject: line), but also into a database. Anyone who comes along later and browses the database by synopsis, and finds a PR with a blank subject line, tends just to skip over it. Remember that PRs stay in this database until they are closed by someone; an anonymous one will usually just disappear in the noise.
Avoid using a weak “Synopsis” line. You should not assume that anyone reading your PR has any context for your submission, so the more you provide, the better. For instance, what part of the system does the problem apply to? Do you only see the problem while installing, or while running? To illustrate, instead of Synopsis: portupgrade is broken, see how much more informative this seems: Synopsis: port sysutils/portupgrade coredumps on -current. (In the case of ports, it is especially helpful to have both the category and portname in the “Synopsis” line.)
If you have a patch, say so. A PR with a patch included is much more likely to be looked at than one without. If you are including one, put the string [patch] at the beginning of the “Synopsis”. (Although it is not mandatory to use that exact string, by convention, that is the one that is used.)
If you are a maintainer, say so. If you are maintaining a part of the source code (for instance, a port), you might consider adding the string [maintainer update] at the beginning of your synopsis line, and you definitely should set the “Class” of your PR to maintainer-update. This way any committer that handles your PR will not have to check.
Be specific. The more information you supply about what problem you are having, the better your chance of getting a response.
Include the version of FreeBSD you are running (there is a place to put that, see below) and on which architecture. You should include whether you are running from a release (e.g. from a CDROM or download), or from a system maintained by cvsup(1) (and, if so, how recently you updated). If you are tracking the FreeBSD-CURRENT branch, that is the very first thing someone will ask, because fixes (especially for high-profile problems) tend to get committed very quickly, and FreeBSD-CURRENT users are expected to keep up.
Include which global options you have specified in your make.conf. Note: specifying -O2 and above to gcc(1) is known to be buggy in many situations. While the FreeBSD developers will accept patches, they are generally unwilling to investigate such issues due to simple lack of time and volunteers, and may instead respond that this just is not supported.
If this is a kernel problem, then be prepared to supply the following information. (You do not have to include these by default, which only tends to fill up the database, but you should include excerpts that you think might be relevant):
your kernel configuration (including which hardware devices you have installed)
whether or not you have debugging options enabled (such as WITNESS), and if so, whether the problem persists when you change the sense of that option
a backtrace, if one was generated
the fact that you have read src/UPDATING and that your problem is not listed there (someone is guaranteed to ask)
whether or not you can run any other kernel as a fallback (this is to rule out hardware-related issues such as failing disks and overheating CPUs, which can masquerade as kernel problems)
If this is a ports problem, then be prepared to supply the following information. (You do not have to include these by default, which only tends to fill up the database, but you should include excerpts that you think might be relevant):
which ports you have installed
any environment variables that override the defaults in bsd.port.mk, such as PORTSDIR
the fact that you have read ports/UPDATING and that your problem is not listed there (someone is guaranteed to ask)
Avoid vague requests for features. PRs of the form “someone should really implement something that does so-and-so” are less likely to get results than very specific requests. Remember, the source is available to everyone, so if you want a feature, the best way to ensure it being included is to get to work! Also consider the fact that many things like this would make a better topic for discussion on freebsd-questions than an entry in the PR database, as discussed above.
Make sure no one else has already submitted a similar PR. Although this has already been mentioned above, it bears repeating here. It only take a minute or two to use the web-based search engine at http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query. (Of course, everyone is guilty of forgetting to do this now and then.)
Avoid controversial requests. If your PR addresses an area that has been controversial in the past, you should probably be prepared to not only offer patches, but also justification for why the patches are “The Right Thing To Do”. As noted above, a careful search of the mailing lists using the archives at http://www.FreeBSD.org/search/search.html#mailinglists is always good preparation.
Be polite. Almost anyone who would potentially work on your PR is a volunteer. No one likes to be told that they have to do something when they are already doing it for some motivation other than monetary gain. This is a good thing to keep in mind at all times on Open Source projects.
Before running the send-pr(1) program, make sure your VISUAL (or EDITOR if VISUAL is not set) environment variable is set to something sensible.
You should also make sure that mail delivery works fine. send-pr(1) uses mail messages for the submission and tracking of problem reports. If you cannot post mail messages from the machine you're running send-pr(1) on, your problem report will not reach the GNATS database. For details on the setup of mail on FreeBSD, see the “Electronic Mail” chapter of the FreeBSD Handbook at http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/mail.html.
The send-pr(1) program has provisions for attaching files to a problem report. You can attach as many files as you want provided that each has a unique base name (i.e. the name of the file proper, without the path). Just use the -a command-line option to specify the names of the files you wish to attach:
% send-pr -a /var/run/dmesg -a /tmp/errors
Do not worry about binary files, they will be automatically encoded so as not to upset your mail agent.
If you attach a patch, make sure you use the -c or -u option to diff(1) to create a context or unified diff (unified is preferred), and make sure to specify the exact CVS revision numbers of the files you modified so the developers who read your report will be able to apply them easily. For problems with the kernel or the base utilities, a patch against FreeBSD-CURRENT (the HEAD CVS branch) is preferred since all new code should be applied and tested there first. After appropriate or substantial testing has been done, the code will be merged/migrated to the FreeBSD-STABLE branch.
If you attach a patch inline, instead of as an attachment, note that the most common problem by far is the tendency of some email programs to render tabs as spaces, which will completely ruin anything intended to be part of a Makefile.
Also note that while including small patches in a PR is generally all right--particularly when they fix the problem described in the PR--large patches and especially new code which may require substantial review before committing should be placed on a web or ftp server, and the URL should be included in the PR instead of the patch. Patches in email tend to get mangled, especially when GNATS is involved, and the larger the patch, the harder it will be for interested parties to unmangle it. Also, posting a patch on the web allows you to modify it without having to resubmit the entire patch in a followup to the original PR.
You should also take note that unless you explicitly specify otherwise in your PR or in the patch itself, any patches you submit will be assumed to be licensed under the same terms as the original file you modified.
When you run send-pr(1), you are presented with a template. The template consists of a list of fields, some of which are pre-filled, and some of which have comments explaining their purpose or listing acceptable values. Do not worry about the comments; they will be removed automatically if you do not modify them or remove them yourself.
At the top of the template, below the SEND-PR: lines, are the email headers. You do not normally need to modify these, unless you are sending the problem report from a machine or account that can send but not receive mail, in which case you will want to set the From: and Reply-To: to your real email address. You may also want to send yourself (or someone else) a carbon copy of the problem report by adding one or more email addresses to the Cc: header.
Next comes a series of single-line fields:
Submitter-Id: Do not change this. The default value of current-users is correct, even if you run FreeBSD-STABLE.
Originator: This is normally prefilled with the gecos field of the currently logged-in user. Please specify your real name, optionally followed by your email address in angle brackets.
Organization: Whatever you feel like. This field is not used for anything significant.
Confidential: This is prefilled to no. Changing it makes no sense as there is no such thing as a confidential FreeBSD problem report--the PR database is distributed worldwide by CVSup.
Synopsis: Fill this out with a short and accurate description of the problem. The synopsis is used as the subject of the problem report email, and is used in problem report listings and summaries; problem reports with obscure synopses tend to get ignored.
As noted above, if your problem report includes a patch, please have the synopsis start with [patch]; if you are a maintainer, you may consider adding [maintainer update] and set the “Class” of your PR to maintainer-update.
Severity: One of non-critical, serious or critical. Do not overreact; refrain from labeling your problem critical unless it really is (e.g. root exploit, easily reproducible panic) or serious unless it is something that will affect many users (problems with particular device drivers or system utilities). FreeBSD developers will not neccesarily work on your problem faster if you inflate its importance since there are so many other people who have done exactly that -- in fact, some developers pay little attention to this field, and the next, because of this.
Priority: One of low, medium or high. high should be reserved for problems that will affect practically every user of FreeBSD and medium for something that will affect many users.
Category: Choose one of the following (taken from http://www.FreeBSD.org/cgi/cvsweb.cgi/src/gnu/usr.bin/send-pr/categories):
advocacy: problems relating to FreeBSD's public image. Rarely used.
alpha: problems specific to the Alpha platform.
amd64: problems specific to the AMD64 platform.
bin: problems with userland programs in the base system.
conf: problems with configuration files, default values etc.
docs: problems with manual pages or on-line documentation.
i386: problems specific to the i386™ platform.
ia64: problems specific to the ia64 platform.
java: problems related to the Java™ Virtual Machine. (Ports that merely depend on Java to run should be filed under ports.)
kern: problems with the kernel or (non-platform-specific) device drivers.
misc: anything that does not fit in any of the other categories. (Note that it is easy for things to get lost in this category).
ports: problems relating to the ports tree.
powerpc: problems specific to the PowerPC® platform.
sparc64: problems specific to the Sparc64® platform.
standards: Standards conformance issues.
threads: problems related to the FreeBSD threads implementation (especially on FreeBSD-CURRENT).
usb: problems related to the FreeBSD USB implementation.
www: Changes or enhancements to the FreeBSD website.
Class: Choose one of the following:
sw-bug: software bugs.
doc-bug: errors in documentation.
change-request: requests for additional features or changes in existing features.
update: updates to ports or other contributed software.
maintainer-update: updates to ports for which you are the maintainer.
Release: The version of FreeBSD that you are running. This is filled out automatically by send-pr(1) and need only be changed if you are sending a problem report from a different system than the one that exhibits the problem.
Finally, there is a series of multi-line fields:
Environment: This should describe, as accurately as possible, the environment in which the problem has been observed. This includes the operating system version, the version of the specific program or file that contains the problem, and any other relevant items such as system configuration, other installed software that influences the problem, etc.--quite simply everything a developer needs to know to reconstruct the environment in which the problem occurs.
Description: A complete and accurate description of the problem you are experiencing. Try to avoid speculating about the causes of the problem unless you are certain that you are on the right track, as it may mislead a developer into making incorrect assumptions about the problem.
How-To-Repeat: A summary of the actions you need to take to reproduce the problem.
Fix: Preferably a patch, or at least a workaround (which not only helps other people with the same problem work around it, but may also help a developer understand the cause for the problem), but if you do not have any firm ideas for either, it is better to leave this field blank than to speculate.
Once you are done filling out the template, have saved it, and exit your editor, send-pr(1) will prompt you with s)end, e)dit or a)bort?. You can then hit s to go ahead and submit the problem report, e to restart the editor and make further modifications, or a to abort. If you choose the latter, your problem report will remain on disk (send-pr(1) will tell you the filename before it terminates), so you can edit it at your leisure, or maybe transfer it to a system with better net connectivity, before sending it with the -f to send-pr(1):
% send-pr -f ~/my-problem-report
This will read the specified file, validate the contents, strip comments and send it off.
This, and other documents, can be downloaded from ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
For questions about FreeBSD, read the documentation before contacting <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.
Hosting by: Hurra Communications Ltd.
Generated: 2007-01-26 17:58:40