Version 35 (modified by 17 years ago) (diff) | ,
---|
Development projects
We need volunteers to help with software testing and development. If you have one or more of the relevant technical skills (C++ system programming, PHP/MySQL Web development, wxWidgets programming, autoconf/automake expertise, etc.) you may be able to help us maintain and enhance BOINC.
The University of California holds the copyright on all BOINC source code. By submitting contributions to the BOINC code, you irrevocably assign all right, title, and interest, including copyright and all copyright rights, in such contributions to The Regents of the University of California, who may then use the code for any purpose that it desires.
To get started, read about the BOINC software development process. Find a small bug fix or enhancement to do (look at the BOINC bug database, the email lists, or message boards for ideas). Look at the source code and think about how you would implement it. Then communicate with the area owner, sketching what you want to do and how. Work with the the area owner to carry out and check in the work.
The following development projects are available (Note: please do not add items to these lists. Suggest new items in the boinc_dev email list.)
Web features
(Requires advanced knowledge of PHP and MySQL.)
Easy:
- Convert PHP code to use the new database abstraction layer.
- Combine user page and profile.
- Change the ops/ web pages to require login by a user with admin privileges.
- Change default Q&A page to refer BOINC-specific questions to BOINC web site.
- Convert team name HTML and team description to BBcode.
- Use rich-text editing widget (e.g. Yahoo) wherever we allow BBcode.
Medium:
- Notification mechanism:
- The arrival of a private message, or a new post in a subscribed thread, maybe moderation events (and maybe other things we haven't thought of yet) produce "notification events".
- Notification events are shown on the Your Account (and maybe on any page that requires login).
- Notification events are exported as an RSS feed, so you can see them in an RSS reader.
- The BOINC manager will (optionally) poll this RSS feed and show new items as alerts.
- You can optionally ask for email notifications, either one email per event or a daily digest. This will be separate from the "accept email newsletters from project", which is currently overloaded with PM notification.
- Add a mechanism where joining a team or group requires approval of an admin.
- Groups (sub-teams). New DB table with name, description, team ID, flags, forum ID. Group membership table.
- Propagate profiles between projects. When create or edit profile, if attached to other projects, show ‘propagate changes’ page, with checkboxes for other projects (must have same password on other projects). Add web RPCs for updating profile (args: user ID, profile, password hash). Implement this so that page doesn't block waiting for replies from RPCs. NOTE: this may not be a good idea — spammers could exploit it.
- Same for forum preferences.
- Add new profile features:
- ‘Buddy lists’.
- list of recent posts and threads this person created, on this and other projects.
- other features from social networking sites?
- Add ‘referral’ mechanism: new user creates account, enters email of ‘referrer’ (or goes to URL that has it embedded). Give referrer a fraction of credit (or a 1-time bonus). List referrals on user page (show only those still active). Add new referral table to DB.
- Make it easy for teams to offer a client download that features their skin, and pre-register the user on that team for any projects he attaches to.
Applications
Easy:
- Create Makefiles and project files to build the sample applications using MinGW and Dev-C++.
Medium:
- Write example FORTRAN application and Makefiles/ project files.
- Write an example compound application (and suggest API revisions to make this easier).
- Investigate the crlibm library for generating identical results across processors (or at least reducing the number of cases for HR).
- Java support: core client checks for the existence of JVM, reports version to scheduler. Write Java wrapper (runs JVM, gives it jar files). Note: Sztaki has already done some part of this.
- Same, .NET
- Distributed Python: Borrow or invent a notation for master/slave execution in Python. Develop a system that implements this on BOINC, i.e., creates WUs and applications, and harvests the results.
Core client
(Requires advanced C++ system programming experience)
Medium:
- Add a preferences for total download and upload in a month (many Australian ISPs have monthly limits), or per X hours of processing time (see email from Kevin Reed).
- Don't enforce RAM limits unless free RAM is low
- GUI RPC to tell apps to checkpoint and quit.
Hard:
- Have the core client sense CPU temperature and throttle CPU if it goes too high. Open-source software for collecting sensor data (on Linux) is available.
- Windows: get proxy config info directly from the OS.
- After an applications exits or is killed (for whatever reason) make sure (after a few second delay) that its subprocesses are gone too. Don't restart the job until this happens. Unix: use process groups and killpg().
- More generally: make a better state machine for shutting down apps: tell them to checkpoint, wait a little, tell them to quit, clean up straggler processes.
- Same, but for suspend: if we tell a client to suspend and it's still using lots of CPU after a few seconds, abort it (or something).
- Integrate BitTorrent (libtorrent?) with the core client (Janus Kristensen is working on this).
- Do potentially slow RPCs and other tasks (such as computing disk usage) in a separate thread.
- Log result start/ends (for use by 3rd-party software like BoincView).
- Prevent disk space usage from exceeding user preferences, and enforce resource shares, with file deletion according to project policy.
- Make messages of class MSG_USER_ERROR translatable.
- Vista: if get 'about to shut down' msg from OS, stop apps immediately (don't tell them to checkpoint). Investigate.
- XML stats: add lat/long to user record?
BOINC Manager
(Requires experience with WxWidgets GUI toolkit)
Easy:
- If using an AMS, put link to AMS (or user page) in sys tray popup, elsewhere.
Hard:
- Properties pages for projects, jobs.
- Turn off alerts (Rom Walton is working on this).
- Have the Manager do RPCs in a separate thread.
Server/Back? End
(Requires advanced C++/Unix system programming experience)
Medium:
- When using HR, if the scheduler has sent one result of a WU using a particular app version, it should use the same app version for other results from that WU.
Hard:
- Implement a mechanism so that server software detects incompatible database format.
- Scheduler: implement mechanisms so that server:
- Attempts to send results from the same WU to hosts with similar turnaround time, so that a fast host doesn't have to wait weeks to get credit.
- Implement a "reference WU" mechanism. An app can have a reference WU. Every host must complete the reference WU before it is sent any other jobs for that app. This could be used, e.g., to do app-specific benchmarking, to gather info on the host hardware or software configuration, or to periodically check the numerical hardware.
Please check with area owner or David Anderson before undertaking any of these.