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

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

Wine is still alpha software and is very incomplete.

If you want to help Wine project you can:

 * visit Bugzilla (http://wine.codeweavers.com/bugzilla/) for 
   list of existing bugs. Metabug 406 lists bugs which are
   reasonably simple to fix even for someone new to Wine.
   Have a look at it and choose subject you are insterested in.
   http://wine.codeweavers.com/bugzilla/showdependencytree.cgi?id=406
   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 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

