Wine and the Google Summer of Code
Current Projects
- Improving Wine MSXML implementation
- by Piotr Caban, mentored by James Hawkins
- Print Dialog
- by Gal Topper, mentored by Detlef Riekenberg
- Implementing proper Control Panel support for Wine
- by Owen Rudge, mentored by Juan Lang
DirectPlay implementation
- by Ismael Barros Barros, mentored by Kai Blin
- Wine - Richedit with Tables
- by Dylan Andrew Harper Smith, mentored by Huw D M Davies
- Improve Gdi+ Implementation by Adam Joel Petaccia, mentored by Lei Zhang
Congratulations to each of the students.
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 SummerOfCode07 for history and even more ideas and details.)
- Do not forget, that we can only support one Proposal for an Application (one exception is listed below)
Beware of Legal Requirements
You must state, that you follow minimal legal requirements during SoC and in the Past:
- It's not allowed to read / reuse Windows source code (leaked source / ... )
- It's not allowed to reverse engineer the Windows files by disassembling / decompiling
Your own idea
Possible mentors: We'll provide you with the appropriate mentor
- You will have the biggest chance of being accepted by coming up with your own idea. We'll help you with mistakes you make in time indication. And 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.
Tools - Merge winecfg and control panel
Possible Mentors: DanKegel
- Wine provides no graphical way to see a list of installed control panel applets. Wine's "winecfg.exe" tool is kind of like that, 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...
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
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.
Direct3D - Implement missing D3D9_xx DLLs
Possible Mentors: We'll provide you with the appropriate mentor
D3D comes with lots of numbered DLLs (e.g. d3dx9_36). These aren't as mysterious as they sound. It probably wouldn't be too hard to support the ones lots of games use, see D3DX
- [details, please]
Direct3D - Implement fixed function shader
Possible Mentors: StefanDoesinger
- OpenGL and Direct3D have a fixed function pipeline for vertex and fragment processing, which can be configured quite flexibly, but supports only a fixed set of functionality. With DirectX 8, a programmable pipeline appeared via Pixel and Vertex shaders. Currently Wine implements the fixed function D3D pipeline by using the fixed function OpenGL pipeline. This has a few limitations, like the lack of vertex blending, which we could overcome by using an OpenGL shader instead if available. This project would involve writing code to generate GL shaders for D3D fixed function settings either via the GL_ARB_vertex_program and GL_ARB_fragment_program extensions, or with the newer OpenGL shading language. Infrastructure is available already.
Direct3D - Implement Pixel shaders on Geforce 4 or ATI 8500 cards
Possible Mentors: StefanDoesinger
- Currently our minimum requirement for pixel shader support is the GL_ARB_fragment_program extension. This extension is comparable to Shader Model 2.0 pixel shaders, and as such is not available on hardware that has Pixel Shader 1.x support only, like Geforce3/4 cards and ATI Radeon 8500 to 9200 cards. Those cards have vendor specific OpenGL extensions which cover up to pixel shader 1.4. Those are GL_NV_register_combiners and GL_NV_texture_shader on Nvidia cards, and GL_ATI_fragment_shader on ATI cards. This project would involve mapping the Pixel Shader 1.x functionality to those extensions. Implementing this for one brand of cards is big enough for a project already, we can also have two simultaneous projects for the ATI and NVIDIA codepath
Direct3D 10 - Write tests
For implementing Direct3D10 test cases will be very helpful. Writing a comprehensive d3d10 testsuit might be a good project.
DirectPlay - Implement the core protocol
Possible Mentors: KaiBlin
Now that Microsoft released (almost) complete specs on the DirectPlay4 protocol, it's time for Wine to get it's own set of DirectPlay DLLs that work.
See the list of DirectPlayGames for an impression on how many gamers will love you if this will work out of the box.
Vista Game Explorer API - Implement the core functionality of this dll
After Wine 1.0 work on Direct3D 10.0 will resume. Tt appears that most D3D10 games use the 'Vista Game Explorer API' whose task is to manage game settings, save games and things like that. Without this dll most games D3D10 games won't work second using the Windows version of the dll is illegal in most cases as it is bundled with Vista. The task of this project would be to implement this dll.
GDI+ - implement missing functions
Possible Mentors: LeiZhang
GDI+ has enough functions to stun an ox! But most of them are pretty simple. A group of students at UCLA made good headway on adding a bunch of them; see the class project page for some ideas.
Richedit - implement Windowless mode
Possible Mentors: MaartenLankhorst
Richedit is supposed to support Windowless mode, and a number of apps use this. Wine has only a stub implementation, and there's lots of room for improvement. Maarten promises to help you with any COM problems you run into
Richedit - Tables
Possible Mentors: We'll provide you with the appropiate mentor
- Wine's richedit implementation doesn't support tables yet, and you just KNOW somebody's going to want to load an .rtf file that has a table in it. This should be fun to fix.
Print Dialog
Possible Mentors: DetlefRiekenberg
Believe it or not, Wine doesn't have a good Print dialog box yet! The task would be to implement PrintDlgEx; you'd end up touching the comdlg32, printui, and compstui DLLs. The preferred Printing Dialog since w2k allow custom property sheets.
Test Suite
Possible Mentors: DanKegel, AndrewRiedi
- Wine can only do rapid releases thanks to its test suite, but our test suite could be so much better.
- For instance, we don't really have an easy to use set of automated tests for real apps.
It would be great if somebody went through the unattended install scripts at http://wpkg.org and picked out the install scripts for freely downloadable apps that work on Wine, and then wrote a simple script to run them all.
- That would be an awesome regression test which we could run before every release.
- 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.)
FUSE - Some features for Wine
Possible Mentors: KaiBlin
- Wine could use some FUSE file systems to make life easier. These include
- A case-insensitive file system for .wine/drive_c
- Better ISO FUSE file system integration
- - I don't know if the FUSE api supports enumeration of mounts in the VFS but it would be cool if explorer could detect if a FUSE iso mounted filesystem is mounted somewhere in the VFS and auto-magically create a fake cdrom device associated with this mount. It would solve some of the complexity we have in cxtest where you have to mount iso images for regression testing, plus it would just save a bunch of time for stupid installers that assume they are always running from a real cdrom.
- A FUSE wrapper for remote named pipes using libsmbclient
a .cda / audio track information file system for music cdroms - bug 11320 has more information
NTDLL - support performance registry keys
Possible Mentors: DanKegel
Wine doesn't support HKEY_PERFORMANCE_DATA yet, but a few apps need it; see bug 5322.
Improving Wine Internet Explorer GUI
Possible Mentors: JacekCaban
* See wine-devel post.
Improving HTML Help viewer
Possible Mentors: JacekCaban
* Most functionality is not implemented (just run hh.exe and look...) and API is almost totally not implemented. Also current implementation can't handle many chm files.
Get Mozilla compiling as a Winelib application
Possible Mentors: StevenEdwards
* See wine-devel post.
Make dxdiag usable
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 collect system Informations
- With dxdiag, we have tests for ddraw, d3d, dsound, dplay
- For collecting System-Informations, WMI is used in many new games
Your own idea
Possible mentors: We'll provide you with the appropriate mentor
Once Again: Use your own Ideas
