For information on how to post a useful bug report, please
read documentation/bugs.sgml.

This is intended to be a place where you should look first if
you want to contribute to the development of Wine.

Wine is still considered alpha software and is still incomplete.

If you want to help the Wine project you can:

 * visit Bugzilla (http://bugs.winehq.org/) for 
   a list of existing bugs. You are also welcome to 
   help with Bugzilla - add new bugs, confirm,
   remove duplicates, test fixes, etc.

 * create unit tests for Windows API

 * contribute to the Wine documentation

 * subscribe to wine-devel, wine-user mailing lists, participate
   in the discussions

 * run Windows applications, port open-source Windows applications
   to Wine, fix bugs you found, enter bugs you can't fix to Bugzilla.
   Enter information you discovered to the
   Wine Application Database (http://appdb.codeweavers.com/).

 * grep for FIXME in the source files
