Contents
- Google Summer of Code 2011
- Wine and the Google Summer of Code
- Beware of Legal Requirements
- Ideas
- Your own idea
- Kernel - implement message-mode pipes
- Security - implement sandboxing
- Encryption - implement a DSS provider
- System Management - Improve WMI support
- Tools - Merge winecfg and control panel
- Tools - Implement new control panel applets
- Theming - Implement Wine theming support
- DirectInput - Implement missing DirectInput8 features
- Direct3D - Implement missing D3D9_xx DLLs
- Direct3D - Conformance / Performance / Interactive tests
- Richedit - implement Windowless mode
- Test Suite
- CMD - implement more robust parser
- Cygwin - improve cygwin support under Wine
- NTDLL - support performance registry keys
- Improve dxdiag and/or dxdiagn
- Implement the Explorer
- Winelib Aware Scons (or cmake)
- Cleanup Winemenubuilder to support generating Application Bundles on Mac OS X
- Xinput / Xbox 360 controller compatibility
- Implement Open MP (vcomp.dll)
Google Summer of Code 2011
It's that time again! See the official Google Summer of Code site for tips on how to participate.
This page collects some tips for students who want to work on Wine during the Summer of Code, and provides a few ideas for projects.
Wine and the Google Summer of Code
- Do you
Know C?
Have an idea for Wine that might help fix Wine bug 10000?
- Great!
Please introduce yourself on the wine-devel mailing list or the #winehackers IRC channel at freenode.net, and apply for a Google Summer of Code scholarship!
- Here are a few ideas.
- (Hint: go beyond what's written here. Copy-and-paste proposals tend to be rejected.)
(You might also want to look at SummerOfCode/PreviousProjects for history and even more ideas and details in SummerOfCode07.)
- Do not forget: we can only support one proposal per application
We cannot accept ReactOS proposals, so please only make proposals that will benefit Wine.
Copying proposals verbatim will get your proposal deleted without even looking at it twice. You have to make your own proposal. See also PostgreSQL's Summer Of Code Advice
Beware of Legal Requirements
You must state that you will follow these minimal legal requirements during the SoC (and have done so in the past):
You are not allowed to read or reuse Windows source code (leaked source / Windows Research Kernel* / ...)
(* we are following the SFLC's advice)
You are not allowed to reverse engineer Windows files by disassembling or decompiling them
You are not allowed to analyze Windows files with the trace functions of Wine
People who work or have worked for Microsoft should probably not participate
Ideas
Your own idea
Possible mentors: We'll provide you with the appropriate mentor
If you have an idea, please post it on Wine Developers mailing list so we can help you with your idea and find out if it's realistic or not. Showing initiative and willing to discuss your idea greatly improves your chances of getting accepted. Even more so than taking one of the ideas below.
- As long as you work hard and interact with the community and your mentor in a positive and constructive way you don't have to worry about not meeting all your goals.
Kernel - implement message-mode pipes
Possible Mentors: TBD
Some apps, e.g. Rift, use PIPE_TYPE_MESSAGE, and misbehave when Wine ignores message boundaries.
- Implementing this is hard, Alexandre doesn't know how to do it. It's vaguely possible a kernel module would help.
See also http://msdn.microsoft.com/en-us/library/aa365605(v=vs.85).aspx
Security - implement sandboxing
Possible Mentors: DanKegel
- Some Wine users would like to restrict Windows apps from accessing the Unix filesystem, but Wine doesn't provide this yet. (Removing z: is incomplete, since the unixfs is always there, and fragile, since wineboot recreates it.)
- Different operating systems provide different building blocks for sandboxing, and it would be nice to provide a simple sandboxing interface that invoked the right building blocks depending on the system Wine is compiled for
See also http://code.google.com/p/setuid-sandbox (linux), http://blog.chromium.org/2009/06/google-chrome-sandboxing-and-mac-os-x.html (macosx), http://zerowine.sourceforge.net (worst case use case
Encryption - implement a DSS provider
Possible Mentors: JuanLang, DanKegel
Some .net apps, e.g. Miner Wars, need DSS for their autoupdater
- Juan says "I believe it'd mostly be a case of copy and paste from rsaenh, replacing the protocols as necessary (and inserting calls to libtomcrypt, which) actually has support for the DSS-related protocols, and it isn't heavyweight like a lot of libraries."
See also http://msdn.microsoft.com/en-us/library/aa381986%28v=vs.85%29.aspx
System Management - Improve WMI support
Possible Mentors: DanKegel
- WMI is an API for asking the system about its capabilities. Wine doesn't implement it fully yet.
Some apps need it to install, e.g. Impulse
Some apps need it to run, e.g. Need for Speed Hot Pursuit
Some apps have corners that won't run without it, e.g. Steam Hardware Survey
See also http://msdn.microsoft.com/en-us/library/aa394582(v=vs.85).aspx
Tools - Merge winecfg and control panel
Possible Mentors: DanKegel
- Wine has a control panel, but it doesn't come with many pre-installed applets.
Wine's winecfg tool is a kind of control panel, but it only handles its own hardcoded applets, not real control panel applets. Why not? Let's unify them.
- Looks like pure_evil at mail.bg has gotten started on this; he's got a script that splits winecfg apart into control panel applets...
Owen Rudge split out the Desktop Integration tab into its own control panel, but it hasn't been merged with WineHQ yet. (See here.)
Tools - Implement new control panel applets
Possible Mentors: We'll provide you with the appropriate mentor
- Basic 3D and screen resizing (tests X 3D drivers via OpenGL from Wine, or verifies that Wine was compiled with OpenGL support)
Current network IP addresses, see IPaddress for inspiration
List of fonts, see FontPage for inspiration
- Improve the Internet Explorer control panel: Configure proxy and cache settings and more.
Theming - Implement Wine theming support
Possible Mentors: ReeceDunn, RoderickColenbrander, AndreHentschel
Windows XP improved theming support in Windows with support for skinning controls with bitmaps, alphablending, shadowing and other forms of eye-candy. Theming support was achieved by shipping new versions of comdlg32/comctl32 with Windows which under the hood use uxtheme.dll for reading theme files (.msstyles file).
Wine has support for loading themes using uxtheme. This theming code is called from the wine common controls code (comctl32). Currently, the drawing procedure of a control is overridden by a themed drawing version by subclassing. This is not the way it is implemented on Windows and this causes drawing issues and other nasty issues. Instead each control needs to be reimplemented in comctl32 when a program requests theming (it does this using a manifest). The goal of this project would be to implement theming support in comctl32 and get an XP theme working this way.
Some info about XP theming can be found here along with a sample theme project.
DirectInput - Implement missing DirectInput8 features
Possible Mentors: MarcusMeissner
Implement DirectInput8 specific features, e.g. ActionMapping and Enumeration by Semantics. This allows application specific mappings of specific actions to specific keys/buttons/whatever. A sample game that requires this is Rally Trophy by JoWood games, which includes a demo. Also see http://bugs.winehq.org/show_bug.cgi?id=8754 .
In 2011 GSoC, by Lucas Fialho Zawacki, webpage: http://lfzawacki.heroku.com/wine/published/HomePage
Direct3D - Implement missing D3D9_xx DLLs
Possible Mentors: RoderickColenbrander
D3D comes with lots of numbered DLLs (e.g. d3dx9_36). These aren't as mysterious as they sound. They contain utility functions to make life easier for developers. For instance they contain math functions, functions for loading bitmaps, compiling shaders and much more. These days matrix math and some other parts have been implemented but most functionality is still missing. The work would consist of adding missing functions (I would choose a few simple demos or games and get those working) and writing behavioral tests to verify that the functions work correctly. It probably wouldn't be too hard to support the ones lots of games use, see D3DX
Direct3D - Conformance / Performance / Interactive tests
Possible Mentors: DanKegel
Even small demos show interesting problems in Wine (see e.g. http://bugs.winehq.org/buglist.cgi?quicksearch=3drad, http://bugs.winehq.org/show_bug.cgi?id=21817 )
There are lots of tools (see http://wiki.winehq.org/GameEngines ) that make developing tiny games easy; they often come with tutorials or examples that might let you isolate problems
- We would like to capture the problems these expose by writing conformance tests (possibly WINETEST_INTERACTIVE ones, if they can't be automated) or performance test tools (as part of programs/dxdiag, perhaps; see "Make dxdiag usable" below, and yagmark), or at the very least bug reports
- It'd be nice to also fix some of the problems, too. For instance, figuring out why wine is slow at some app, and then fixing it, would be great.
Richedit - implement Windowless mode
Possible Mentors: MaartenLankhorst
Richedit is supposed to support Windowless mode, and a number of apps use this. Wine has mostly a stub implementation, so there's lots of room for improvement. Maarten promises to help you with any COM problems you run into
DylanSmith has been working on this, after the SoC 2008 (See bug 5162).
Test Suite
Possible Mentors: DanKegel, AustinEnglish
- Wine can only do rapid releases thanks to its test suite, but our test suite could be so much better.
UnitTestSuites documents several open source Windows apps that build properly under Wine, and many more than might not.
Dan Kegel spent a couple weeks automating the build of Chromium and filing bugs for all the problems that turned up; see BuildAndTestChromium. Doing something similar for another app or two would be great.
Dan Kegel et al wrote an automated app installer wisotool and then folded it into winetricks-alpha (see http://winetricks.org ). Extending this to handle more apps, or to actually test the existing apps (instead of just their installers) might be very useful.
Appinstall, created by Austin English in GSoC 2009, which allows automated testing of real Windows apps. Expanding this would be great.
It would be great if somebody went through the unattended install scripts at http://wpkg.org and converted them into AppInstall tests. (This idea doesn't even require any C programming.) See discussion at http://www.winehq.org/pipermail/wine-devel/2008-March/063785.html for more details.
Other possible sources of debugged unattended installation scripts include http://windows-get.sourceforge.net/ and http://www.playonlinux.com/en/scripts.html. (Potentially wine-doors, too, but their web site is so disorganized I can't tell.)
Firefox and OpenOffice have their own test suites; we should run those under Wine. Austin English may have a start on this already, ask him.
Creating a Buildbot (see http://buildbot.net) to run all the above daily would be useful.
CMD - implement more robust parser
Possible Mentors: DanKegel, Jason Edmeades
http://kegel.com/wine/sweng/2010/ is a project to fix a number of small bugs in Wine's cmd.exe and friends, and to write testcases for it. It has helped bring to light certain flaws in cmd.exe's parsing of if/then/else and () blocks. Somebody could quite usefully spend a summer bulking up the test cases for cmd and friends, fixing any remaining reported bugs, and improving the parser.
Cygwin - improve cygwin support under Wine
Possible Mentors: We'll provide you with the appropriate mentor
Wine currently doesn't support Cygwin very well, though several F/OSS programs use it for compiling/testing their Windows builds. Several bugs prevent it from being useful for testing and building, e.g., VLC under Wine.
NTDLL - support performance registry keys
Possible Mentors: DanKegel, OwenRudge
Wine doesn't support HKEY_PERFORMANCE_DATA yet, but a few apps need it; see bug 5322.
Improve dxdiag and/or dxdiagn
Possible Mentors: We'll provide you with the appropriate mentor
- First thing requested in a forum of a game: Send me the logs of msinfo and dxdiag
- dxdiag collects system information, and has interactive tests for ddraw, d3d, dsound, and dplay
- Two ways to go: make native dxdiag gui work better, or implement a builtin dxdiag gui, or both
UCLA students are implementing builtin dxdiag gui for wine, see http://www.kegel.com/wine/sweng/2011 and http://code.google.com/p/yadxdiag/
- Wine-specific tests, like a tiny subset of winetest, might be handy to identify whether the user's wine suffers from common gaming-related bugs
Implement the Explorer
Possible Mentors: We'll provide you with the appropriate mentor
- We have an explorer.exe that launches winefile.
- Since Explorer is a COM based architecture, you need to know (to learn fast) the Magic behind COM in C
Shell Extensions: http://www.codeproject.com/KB/shell/shellextguide1.aspx
COM in plain C: http://www.codeproject.com/KB/COM/com_in_c1.aspx
- All Bands / Toolbars are missing, but not all are required yet
- The Menu Bar, the Tools Bar, the Address Bar
- The Search Band, the Folders Band, a Desk Band for the Quicklaunch
http://msdn.microsoft.com/en-us/library/bb776819(VS.85).aspx
- Maybe, in desktop mode, it should implement the task bar and a start button too.
See the ReactOS explorer FAQ for inspiration. It's written in C++, whereas Wine is written in ANSI C, so we can't use it directly.
Since Vista, much of the functionality in native Explorer is embedded in the IExplorerBrowser control. This control is now implemented in wine and could be used when implemented the Explorer. See http://msdn.microsoft.com/en-us/library/bb761909%28v=vs.85%29.aspx.
Winelib Aware Scons (or cmake)
Possible Mentors: Someone in Wine, or someone in the appropriate project (scons but not cmake is a GSoC organizations as well)
- The goal is to be able to take a visual studio project file for a formerly windows-only program, run it through a magic script, and turn it into a winelib-powered linux-compatible build system.
See SconsWine
Cleanup Winemenubuilder to support generating Application Bundles on Mac OS X
Possible Mentors: Steven Edwards
- There is an initial patch that adds support for building App bundles to launch Windows applications however winemenubuilder needs much more cleanup before this should go in.
http://www.winehq.org/pipermail/wine-patches/2009-December/082960.html
Xinput / Xbox 360 controller compatibility
Possible Mentors: We'll provide you with the appropriate mentor
- Michael Gruber submitted patches from 2009 that appear to actually implement xinput:
There were two follow up threads in relation to this:
http://www.winehq.org/pipermail/wine-devel/2009-July/077190.html
http://www.winehq.org/pipermail/wine-devel/2010-June/084401.html
Implement Open MP (vcomp.dll)
See http://bugs.winehq.org/show_bug.cgi?id=26688 Only two games are known to be affected at the moment. Non-parallel fallback implementations might be useful?
