Wine and the Google Summer of Code

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.

To apply, go to the Google Summer of Code 2015 home page.

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


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.

Tools - Implement new control panel applets

Possible Mentors: We'll provide you with the appropriate mentor

Knowledge prerequisite: C

Difficulty: Easy to medium, depending on the controls you want to work on

  • 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.

  • List of codecs for ACM and DirectShow including Gstreamer support. See MultimediaWiki for a list, Filmerit and GSpot for inspiration.

  • Improve the Internet Explorer control panel: Configure proxy and cache settings and more.
  • Improve the joystick configuration panel joy.cpl to support remapping buttons, axes, etc.

Tools - Implement resource editor and / or dialog editor

Possible Mentors: We'll provide you with the appropriate mentor

Knowledge prerequisite: C, some UI programming perhaps

Difficulty medium, might be bit large for a student project

* We currently have no graphical dialog / resource editor * Free external ones are AdWare infected or Payware

Tools - Winetest Graphical User Interface

Possible Mentors: We'll provide you with the appropriate mentor

Knowledge prerequisite: C

Difficulty: Easy

  • Currently the only way to see test results in a nice synthetic format is to upload the report and view it at

  • It would be nice to have a mode in winetest.exe that would present a nice table of available tests with their results, ideally updated on the fly as tests are run.

  • The list could also be interactive and allow you to click on a test to run it again, view its result log, etc.

D3DX9 - Implement missing D3DX9 APIs

Possible Mentors: Stefan Dösinger, Matteo Bruni

Knowledge prerequisite: C, maybe some domain-specific knowledge related to the APIs you want to implement

Difficulty: Easy to medium, depending on the functions you want to work on

  • D3DX9 dlls contain various utility functions related to common 3D graphics tasks. For instance they contain math functions, functions for loading textures, compiling shaders and much more.

  • A good chunk of those APIs has been implemented but a lot is still missing, such as:
    • some math functions (what's left is mostly about spherical harmonics and precomputed radiance transfer)
    • some mesh functions (D3DXComputeNormals(), D3DXOptimizeVertices(), ...)
    • a few texture functions
    • quite a few ID3DXConstantTable methods
    • various shader-related functions (D3DXGetShaderInputSemantics() and D3DXGetShaderOutputSemantics() to name two)
    • effect framework bits and pieces
    • fonts framework
  • The project would choose a reasonable subset of the missing functions and the work would consist of writing behavioral tests for those functions and actually implementing the functions themselves. We will help you in selecting a reasonably-sized subset of the API, suitable for a GSoC project.

Direct3D - Conformance / Performance / Interactive tests

Possible Mentors: Dan Kegel

Knowledge prerequisite: C

Difficulty: Medium

  • Even small demos show interesting problems in Wine (see e.g., )

  • There are lots of tools (see 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.

Direct3DRM - Implement rendering for D3DRM

Possible Mentors: André Hentschel, Christian Costa

Knowledge prerequisite: C, COM

Difficulty: Medium

  • Direct3D Retained Mode is mostly a stub, it needs to interact with DirectX 8/9 to actually display something

  • Even if it's an old library and has been removed in Vista, there are small Games based on it

Richedit - implement Windowless mode

Possible Mentors: Maarten Lankhorst

Knowledge prerequisite: C

Difficulty: Medium

  • 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).

CMD - implement more robust parser

Possible Mentors: Dan Kegel, Jason Edmeades

Knowledge prerequisite: C, CMD commands

Difficulty: Medium

  • 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

Knowledge prerequisite: C

Difficulty: Medium to hard

  • 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.

Improve dxdiag and/or dxdiagn

Possible Mentors: We'll provide you with the appropriate mentor

Knowledge prerequisite: C

Difficulty: Medium

  • 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 and

  • 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.

Xinput / Xbox 360 controller compatibility

Possible Mentors: We'll provide you with the appropriate mentor

Knowledge prerequisite: C

Difficulty: Medium

Michael Gruber submitted patches from 2009 that appear to actually implement xinput:

There were two follow up threads in relation to this:

Implement OpenMP (vcomp.dll)

Possible Mentors: Dan Kegel, André Hentschel

Knowledge prerequisite: C, at least x86 assembler

Difficulty: Medium to hard

  • OpenMP is a shared memory multiprocessing API and vcomp.dll contains the Windows implementation for it.
  • See

  • Only two games are known to be affected at the moment.
  • Non-parallel fallback implementations might be useful?

Portability - Port WineLib to a new architecture

Possible mentors: André Hentschel

Knowledge prerequisite: Assembler for the target

Difficulty: Medium, depending on the target

  • Wine can run WineLib applications on different CPU architectures, but needs at least some assembler code for that.

  • Suggested architectures: MIPS, Sparc64, x32.

  • You will also need a test system. Qemu is possible, but real hardware is recommended.

Implementing XACT sound dlls

Possible mentors: Andrew Eikum

Knowledge prerequisite: C

Difficulty: Medium

The goal here is to implement a subset of the Microsoft Cross-Platform Audio Creation Tool dlls, also known as xact. There are a few sections (xactengine, xaudio, x3daudio, xapof) involved, so only a portion would be done for the project. You should have (or read up on) experience with Linux sound systems (ALSA/OSS) or other audio experience.

See also bug 26833

WineCE: Implement the CommandBar

Possible mentors: André Hentschel

Knowledge prerequisite: C

Other prerequisite: ARM device with Linux or some Qemu experience

Difficulty: Medium

  • WineCE targets to support Windows CE applications, an huge update to revive it will be pushed soon.
  • This is an out-of-tree project, but obviously still related to Wine.
  • The goal is to implement the CommandBar.

  • If there's time you could also implement CommandBands.

CategoryDevelopment CategoryToDo CategorySummerofCode

SummerOfCode (last edited 2015-02-27 04:41:15 by AlexandreJulliard)