The proposal should be about four pages long. Don't write an abstract or a conclusion. Don't write at length about world peace, a cure for cancer, or the unprecedented growth of the Internet unless you are addressing those issues directly.
Consider the audience for all of your writing to be fellow computer scientists that are capable but are not taking this class and may not have read exactly the papers that we have. Target your writing to a smart graduate student that knows something about distributed systems but doesn't know the details of the papers that we have read.
Later in the semester, your draft papers will be peer reviewed by students in the class and also by anonymous referees outside the class. So, keep in mind that your audience has not been attending the class all semester.
Your proposal should have the following sections:
Begin by laying out the big picture. Even if you are researching something that has been discussed in class, you must give a short introduction to the topic in your own words. Describe how this system or idea is used (or could be used) by real people. Give a short example of why this topic is difficult or interesting.
For example, if you are researching some aspect of Linda, briefly describe the Linda language, describe a Lindified application such a Gaussian, and give a short example of why Linda is difficult to implement.
In this section, demonstrate that you have a good grasp of what has already been accomplished in the field. Make good use of your annotated bibliography here. However, do not simply make a list of papers that your have read. Give some overarching structure to what others have accomplished. Point out open problems or considerations that others have not researched.
To continue the Linda example, you might discuss three ways that Linda has been implemented: systems that distribute only tuples, systems that distribute only templates, and systems that distribute both. Or, you might slice it another way: algorithms for broadcast networks vs. algorithms for point-to-point networks. Paint the big picture instead of just enumerating examples.
Once you have laid out the background, describe exactly what you intend to accomplish. What will you build? What will you demonstrate? What machinery and software will you require? Where and how will you get such resources? What parts do you expect to be difficult, and which will be easy? How is this different from what has been accomplished before?
Next, you must give a very specific statement of what quantitative evaluation you will perform in order to evaluate your work. Will you demonstrate that one system is more scalable than another? Will you demonstrate that one system performs better than another? Are you expecting a certain result?
If you expect that your final paper will have some graphs (and it should,) then put in two or three draft graphs. Of course, they won't contain any data, but decide on the axes, the units, and the nature of the experiments that will produce the graphs.
Give a timeline indicating what each group member will accomplish each week until the final paper is due. Make sure that you will have some working prototype ready to demonstrate at the midterm progress report. It might also be wise to leave a week empty as "catch up" time during some point of the semester.
The timeline is not set in stone: in any research effort, it is expected that the goals and schedule will change a little as work proceeds. However, if you are slipping from your timeline in any serious way, then you need to meet with the instructor in order to adjust your schedule and get back on track.
Summarize in a few sentences what your contribution to computer science will be.
Give citations to papers mentioned in the previous sections. The exact format is not important as long as the citation is clear. Reference what you feel is necessary to make the paper clear. You don't have to (and probably shouldn't) include your entire bibliography. 5-10 references would be appropriate here.