Regarding stable/release builds, here are a few options:
Option 1:
We could have a seperate stable branch in CVS (actually this would probably be the "main" branch, so that if someone checks out the source without providing a specific release or branch tag, what they would get would be the most recent "stable" version). We would also have a "development" branch -- or maybe several branches (but probably not more than one active branch concurrently).
So right now we'd be working on the "prerelease_3_3" branch;the head of the main branch would correspond to release 3.2. When everything's in order and we're ready to release 3.3, we would merge it with the main branch, test and tag the mainline with "fs2_open_3_3," and then create a new "prerelease_3_4" branch, and the old prerelease branch becomes inactive.
Option 2:
Another alternative is to keep a single branch, just tag more frequently than we do now -- tagging "subreleases" instead of just releases. That way if you checkout with no options, you are not guaranteed to get a stable copy; if you want a stable copy, you checkout or export a particular release (e.g., "cvs export -r fs2_open_3_3_21 fs2_open")