Google Summer of Code Acceptance

From BZFlagWiki
Revision as of 05:45, 2 April 2009 by DTRemenak (Talk | contribs) (Make a patch: sure, we'll take more than one patch if you want, but quality > quantity)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This page is intended to lay out the basic "rules and requirements" that the BZFlag project is going to require of all Google Summer of Code students whose project proposals are accepted. Unless otherwise arranged with the BZFlag GSoC administrator (contact brlcad via IRC on, it will be expected that all students comply with the requirements outlined below.

Application requirements

Make a patch

We want to make sure that you have rudimentary skills in compiling code, reading other people's code, and can even simply get BZFlag to compile. Prepare and submit a patch to our Sourceforge patches tracker.

Don't fret. The patch can be almost anything just so long as it is can be applied to the BZFlag sources with very minimal hassle. It should be something actually useful. The patch should not just be whitespace, indent, or style changes as we automate those periodically. It should be a functional patch such as fixing a known bug (see our BUGS file or sf bug tracker) or implementing some very minor uncontroversial feature (see our TODO file). Bug fixes are generally the preferred scope but even something as trivial as fixing typos can make an acceptable patch. This is one of several opportunities to impress us, so feel free to be creative.

You are welcome to submit more than one patch if you like. We will review any you submit, but we only require and expect one; remember that quality is far more important than quantity in our reviews.

Be sure to include either a link to the Sourceforge patch tracker item or your Sourceforge username in your application.

Play BZFlag with the mentors

We will schedule several open gaming gatherings during the application process and ask that serious applicants come play a round of BZFlag with us. You should compile your own client using the latest BZFlag trunk sources (which is incompatible with the latest public release) when you come to the gaming session. We will work out available times to play with you after you've submitted an application.

You should play the game from a binary you've built yourself before beginning any work. You should do this at least once before the gathering if not more if you are so inclined. Being able to compile the sources on your own equipment is a very basic task that is beyond the scope of GSoC and will be an expected unassisted capacity of all students once the summer coding begins. Additionally, understanding the existing player community, what they like and dislike, and seeing how they interact is all very important for most developers to have at least a basic familiarity with. In the end, your changes will (hopefully) be pushed out to the community and you be cognizant of what that will mean.

We'll be glad to help you the first time if you run into trouble. Talk to the developers.

Come talk to us

You really should be talking to the BZFlag developers long before submitting your application. Discuss your ideas with us on the IRC channel. Communication is a huge part of our evaluation criteria.

Participation requirements

Assign copyright and license under the LGPL

Per the GSoC FAQ, BZFlag requires that any work performed and provided while participating in BZFlag development will be in accordance with BZFlag's existing license (LGPL) and that full nonexclusive copyright will be assigned to Tim Riker, the project copyright holder.

Provide weekly progress reports

In addition to any communications you hold with a given mentor, the administrator, or any of the developers, it will be expected of all students that they will submit a brief progress report on a weekly basis. These reports won't need to be more than a few sentences (or at most a couple of paragraphs, whatever is appropriate) but the reports should give an indication of your overall progress, things you discover, tasks completed, difficulties encountered, milestones reached, and other similar details on your activities. You will be expected to complete a report every week, at least once a week. More information on the exact method for providing these reports will be provided after the projects commence.

List your milestones

All projects will be required to submit a minimum of three and a maximum of ten milestones for your project. These are not deliverables but, rather, are overall tasks that should be completed throughout the duration of your work. These should be necessary implementation steps and not include any research or familiarity phases. In the end, there is code that must be produced and your milestones should be a (very) rough breakdown for estimating your actual implementation progress. These milestones should be published in your first progress report, that is, at the beginning of code development (before, on or very soon after May 28).

Be available via IRC

All students will be expected to join the #bzflag IRC channel on while they are working. Students are expected to be on the channel so they can be responsive and available to the questions, inquiries, and suggestions of other BZFlag developers. BZFlag development occurs entirely over IRC as it is the central gathering forum for core development activities, developer discussions, and more. See here if you are new to IRC and need assistance finding a client (or just do a search). Interaction via IRC is required.

Create a Sourceforge account

BZFlag sources live in a Subversion repository on Sourceforge. You will need a Sourceforge account and will be expected to abide by the same coding requirements of the other existing developers. You will similarly be expected to know the basics of how to work with SVN and check in changes, resolve conflicts, and apply patches as needed. SVN has a nearly identical interface to CVS -- if you're familiar with CVS, then you should be fine. If you don't have a Sourceforge account, be sure to get one and familiarize yourself with BZFlag's sourceforge account. Whether students work on a branch or on the mainline will vary depending on the student and the project.

Evaluate your performance

Particularly for projects that interact with the client or server run-loop or affect networking (but also for others), quantitatively evaluate your performance and the impact your modifications will make. Don't prematurely optimize and don't over-architect, but also don't make guesses or assumptions either. Use a performance profiler, test your code, add temporary debug timers, have a peer review your approach, etc. Modifications to the game client and network code that detrimentally impact performance in non-optional ways will likely be rejected outright.

Write maintainable code

This requirement cannot be stressed enough. One of the primary evaluation criteria for all students is how maintainable is the end result. This is not only maintainability from the stand-point of source code longevity as it stands written, but also involves other higher-level maintainability and integration aspects. Does your implementation use interfaces, languages, tools, or techniques that introduce some new requirement to widespread BZFlag development? If so, that choice needs to be discussed and justified or otherwise mitigated as a concern. Any usage of external dependencies needs to be consensus approved by the core developers. Is your code comprehensive and comprehensible? Well-documented? Organized? You are required to follow BZFlag's existing developer guidelines, existing code style, and established conventions.

Write portable code

BZFlag has an extensive heritage of being as portable as reasonably possible with effort continually being taken to make sure the entire codebase works on a vareity of compilation and run-time environments. While each developer's perception of what is reasonable certainly fluctuates over the years and from developer to developer, the general intention is that code written for BZFlag should function the same on most moderately popular operating system environments as much as possible including Linux, Mac OS X, and Windows as well as other platforms. It is each developer's responsibility to either make sure their code isn't platform-specific or that equivalent functionality is provided on other maintained platforms. You are expected to interact with other developers when portability issues are raised to resolve any problems. Portability of any dependencies being used must similarly be taken into account and relates to the aforementioned maintainability requirement.

Write complete code

Perhaps treat each week like it is your last. You should be able to hand over functional code over just about any time during development (within a day or so) to another developer. Focus on completing tasks, completing code features, and working on keeping your code functional at all stages of development. That way, no matter how far you get on your milestones or deliverable(s), other developers will be able to review, test, and readily integrate your code. Plan your development approach accordingly. You should generally not "stub" code functionality (though comments are good), but instead focus on coding "deep" instead of "wide". It's generally preferred to have 2 features that work fully, than 5 features that half-work or even 20 features that are all 90% complete.

Pre-Flight Participation Checklist