Google Summer of Code 2009
GSoC 2009 has finished.
GSoC website: http://socghop.appspot.com
Wine's GSoC 2009 page: http://socghop.appspot.com/org/home/google/gsoc2009/wine
Source code for Wine's GSoC 2009 projects: http://code.google.com/p/google-summer-of-code-2009-wine/downloads/list
List of projects
The following projects were accepted for GSoC 2009:
mentored by James Hawkins
Wiki page: Appinstall
code done for SoC: http://google-summer-of-code-2009-wine.googlecode.com/files/AustinMatthew_English.tar.gz
current code: http://code.google.com/p/winezeug/source/browse/#svn/trunk/appinstall
Improving JScript implementation
by Piotr Caban
mentored by Marcus Meissner
code done for SoC: http://google-summer-of-code-2009-wine.googlecode.com/files/Piotr_Caban.tar.gz
Direct3D - Implement D3DXAssembleShader function
- by Matteo Bruni
mentored by Stefan Doesinger
code done for SoC: http://google-summer-of-code-2009-wine.googlecode.com/files/Matteo_Bruni.tar.gz
- by Trevor Davenport
- mentored by Edward Hervey
Wiki page: Trevor_Davenport/gstreamer
code done for SoC: http://google-summer-of-code-2009-wine.googlecode.com/files/Trevor_Davenport.tar.gz
current code: http://github.com/tdaven
Implement Texture, Mesh and Font handling in D3DX and get some DirectX SDK samples running in WINE
- mentored by Roderick Colenbrander
code done for SoC: http://google-summer-of-code-2009-wine.googlecode.com/files/Tony_Wasserka.tar.gz
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
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.
Graphics - implement DOS graphics modes more faithfully
Possible Mentors: DanKegel
Many DOS games use video modes that Wine's VGA implementation does not yet support (see e.g. bugs 2408, 15390, 15570, and 15688). It should be relatively easy to improve this situation (and fun, since most of the testing is playing classic games...)
- Update: Jeremiah Flerchinger and Peter Dons Tychsen have done a bit of work on this.
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
- An Internet Explorer control panel. This could set the default home page, configure proxy settings, allow you to manage certificates, and more.
Theming - Implement Wine GTK/QT theming support
Possible Mentors: ReeceDunn or RoderickColenbrander
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 theming support using uxtheme and except for some rendering bugs and performance issues (especially when using alpha blending or a lot of bitmaps) the code is starting to become usable. Tne next step in theming would be a way to use GTK/QT themes in Wine. The path which needs to be taken for this is to write an external tool which can convert GTK/QT themes to .msstyles ones since GTK/QT can't be used in Wine. The end-result of this project would be a tool which can be used to give Wine apps a GTK/QT look.
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.
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 - Implement Vertex / Pixel shaders using NV_vertex_program* / NV_fragment_program*
Possible Mentors: StefanDoesinger
Currently Wine implements 1.x shaders using GL_ARB_vertex_program/GL_ARB_fragment program and later versions using GLSL because the ARB extensions don't offer functionality behind 1.x. GLSL allows us to implement all SM2.0/3.0 support but it isn't used in entirely the same way as Direct3D e.g. in GLSL a vertex and a pixel shader are grouped together whereas on Direct3D they can be set independently. has various limitations (e.g. compiling / linking at runtime) which can cause major performance issues. Nvidia has their own GL_NV_vertex_program/_fragment_program extensions which are compatible to the GL_ARB_*_program ones and they even extended them to shader model 4.0 (GL_NV_fragment_program2 for 2.0, GL_NV_fragment_program3 for 3.0 and so on). The use of these extensions on Nvidia hardware (the S3 drivers offer them too) would take away some of the performance limitations and might even improve performance since D3D9 provides us with assembler and these extensions also use assembler instead of a high level language like GLSL. This would also give us proper Shader Model 2.0b support for GeforceFX cards.
- The work would consist of extending our ARB shader backend with the new SM 2.0 / SM 3.0 instructions using the GL_NV_*_program extensions.
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
Note that nvidia's NVParse does something that's pretty similar. The license for NVParse looks compatible with Wine. It certainly can't be used directly, but might be helpful in figuring out how to map shader instructions to the appropriate GL state.
Direct3D 10 - Write tests
For implementing Direct3D10 test cases will be very helpful. Writing a comprehensive d3d10 testsuite might be a good project.
DirectShow (Quartz) - Implement Gstreamer plugin
Possible Mentors: MaartenLankhorst, Edward Hervey (GStreamer developer)
At the moment native win32 codecs are required to play mpeg, divx and other files from applications like games and media players. This is uncovenient for users as they need win32 codec packs (those might be illegal) and second for commercial programs (e.g. Crossover) shipping of win32 codecs has licensing issues. In this project a gstreamer plugin for wine's directshow would be written, so that we can use codecs which are available on the system in wine (most systems ship with gstreamer). Second there are legal codecs for mpeg and other codecs available as gstreamer plugins from fluendo.org. That would be a legal way to distribute codecs. Further some distributions already strip wine of its mp3 codec because of legal issues. When users add the codecs to gstreamer wine would get support too.
It should be possible to hook gstreamer up to wine. Years ago transgaming did something similar with ffmpeg but we shouldn't use ffmpeg because its api isn't stable and for that reason we would have to merge it into Wine which is what we want to avoid.
Vista Game Explorer API - Implement the core functionality of this dll
Work on Direct3D 10.0 has resumed. It 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 D3D10 games won't work. 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.
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, AndrewRiedi
- Wine can only do rapid releases thanks to its test suite, but our test suite could be so much better.
We now also have Appinstall, created by Austin English in GSoC 2009, which allows automated testing of real Windows apps.
Running the Chromium unit test suite would be cool. And passing it would be even cooler; see bugs 17813, 17820, 17810, 16550, and 16552. It would be great if somebody translated the failing test cases so they could be included in Wine's test suite.
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.)
See also UnitTestSuites.
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
- Since IE is a COM based architecture, you need to know (to learn fast) the Magic behind COM in C
IE Architecture: http://msdn.microsoft.com/en-us/library/aa741312(VS.85).aspx
COM in plain C: http://www.codeproject.com/KB/COM/com_in_c1.aspx
- Some Features in IWebBrowser and in other Interfaces are missing
- All Bands / Toolbars are missing, but not all are required yet to get a working GUI
- The Menu Bar, the Tools Bar, the Address Bar, the Links Bar
- The Search Band, the History Band, the Favorites Band
http://msdn.microsoft.com/en-us/library/bb776819(VS.85).aspx
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.
Implement CHM compiler
Possible Mentors: JacekCaban
- The task would be to implement CHM compiler similar to hhc as a plain UNIX application.
See wine-devel post.
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 collects system information
- With dxdiag, we have tests for ddraw, d3d, dsound, dplay
- For collecting system information, WMI is used in many new games
Implement the Explorer
Possible Mentors: We'll provide you with the appropriate mentor
- We have an explorer.exe that launches winefile.
- This should be changed to view the shell namespace and handle shell extensions.
- 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.
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
