Difference between revisions of "Summer Of Code"

From WineHQ Wiki
Jump to: navigation, search
 
(65 intermediate revisions by 12 users not shown)
Line 9: Line 9:
 
** If so, please introduce yourself on the [http://www.winehq.org/mailman/listinfo/wine-devel wine-devel mailing list] or the [irc://irc.freenode.net/#winehackers #winehackers IRC channel at freenode.net], and apply for a [http://code.google.com/soc Google Summer of Code scholarship]!
 
** If so, please introduce yourself on the [http://www.winehq.org/mailman/listinfo/wine-devel wine-devel mailing list] or the [irc://irc.freenode.net/#winehackers #winehackers IRC channel at freenode.net], and apply for a [http://code.google.com/soc Google Summer of Code scholarship]!
 
* Hint/reminders:
 
* Hint/reminders:
 +
** Have a look at [[Developers|the developers page on the wiki]] and grab Wine's [[Source_Code|source code]], try to get acquainted with it
 
** Look at [[Previous_Summers_of_Code|Previous Summers Of Code]] for previously accepted proposals / their results
 
** Look at [[Previous_Summers_of_Code|Previous Summers Of Code]] for previously accepted proposals / their results
** Do not forget: we can only support one proposal per application
+
** Do not forget: we can only support one proposal per application. You can file multiple applications if you want to propose more than one idea.
** We cannot accept [http://www.reactos.org 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 [http://www.postgresql.org/developer/summerofcodeadvice PostgreSQL's Summer Of Code Advice]
 
** Copying proposals verbatim will get your proposal deleted without even looking at it twice. You have to make your own proposal. See also [http://www.postgresql.org/developer/summerofcodeadvice PostgreSQL's Summer Of Code Advice]
 
** Read [http://www.quora.com/How-can-I-prepare-for-GSoC-2015 How can I prepare for GSoC] for some general rules.
 
** Read [http://www.quora.com/How-can-I-prepare-for-GSoC-2015 How can I prepare for GSoC] for some general rules.
 
** Read [http://blog.gerv.net/2006/05/how_not_to_apply_for_summer_of/ How Not To Apply For Summer Of Code] to save your time and save our time.
 
** Read [http://blog.gerv.net/2006/05/how_not_to_apply_for_summer_of/ How Not To Apply For Summer Of Code] to save your time and save our time.
* Note: Applicants '''MUST''' have submitted a patch or testcase to wine-patches (see http://wiki.winehq.org/SubmittingPatches) to be considered for acceptance.
+
* Note: Applicants '''MUST''' have submitted a patch or testcase to wine-devel (see [[Submitting Patches]]) to be considered for acceptance.
 
To apply, go to the [https://developers.google.com/open-source/gsoc/ Google Summer of Code home page].
 
To apply, go to the [https://developers.google.com/open-source/gsoc/ Google Summer of Code home page].
  
 
----
 
----
 +
 +
== Important notes! ==
 +
* Applicants '''MUST''' have submitted a patch or testcase to wine-devel (see [[Submitting Patches]]) to be considered for acceptance.
 +
* Please first send a draft proposal and discuss it with us, don't send the final one directly.
 +
* We cannot accept [http://www.reactos.org ReactOS] proposals, so please only make proposals that will benefit Wine.
 +
To apply, go to the [https://developers.google.com/open-source/gsoc/ Google Summer of Code home page].
 +
-----
  
 
== Beware of Legal Requirements ==
 
== Beware of Legal Requirements ==
Line 28: Line 35:
 
* '''You are not allowed to analyze Windows files with the trace functions of Wine'''
 
* '''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'''
 
* '''People who work or have worked for Microsoft should probably not participate'''
 +
-----
 +
 +
== Other Outreach Programs ==
 +
In addition to Google Summer of Code Wine also participates in:
 +
* [https://www.outreachy.org/ Outreachy] is a program similar to GSoC organized by the Software Freedom Conservancy. The goal of Outreachy is to provide encouragement, experience, and networking opportunities for minorities that are underrepresented in tech. Unlike GSoC, it is not limited to students; you can read the Wine Wiki's [[Outreachy]] page for more information.
 
-----
 
-----
  
Line 36: Line 48:
 
* If you have an idea, please post it on [http://www.winehq.org/pipermail/wine-devel 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.
 
* If you have an idea, please post it on [http://www.winehq.org/pipermail/wine-devel 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.
 
* 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.
 
 
----
 
=== Further cmd.exe improvements ===
 
 
Further work on the cmd.exe implementation. We need to scope / find out what is missing before offering.
 
 
----
 
=== Implement ping.exe ===
 
 
(We could also forward to ping.exe ... ) We have one, but we could hook in icmp.dll usage.
 
Or call out to system /usr/bin/ping
 
 
Might not be big enough for GSOC.
 
 
----
 
 
=== Fix Windows theming / implement themes ===
 
 
After we fix Windows theming in Wine (project 1) we could implement themes (project 2).
 
 
----
 
=== Improve Wines fonts ===
 
 
Improve our own fonts and/ or add new fonts.
 
(This is not for GSOC usually, more for Outreachy)
 
 
 
----
 
=== Improve accessibility of Wine ===
 
 
Wines accessibility for e.g. blind people is lacking and can use improvements.
 
 
 
----
 
=== winetest improvements ===
 
 
Improve the server and/or client side of the wine test framework. (?)
 
 
----
 
=== signtool.exe ===
 
 
A tool to verify signatures on MSI packages / EXEs(?)
 
 
(Need to evaluate if effort matches GSOC effort scope.)
 
 
----
 
 
=== tasklist.exe ===
 
 
A tool to list currently running programs.
 
 
(Need to evaluate if effort matches GSOC effort scope.)
 
 
See, e.g., https://bugs.winehq.org/show_bug.cgi?id=43990
 
 
----
 
 
=== Calculator ===
 
 
Implement a calc.exe.
 
 
----
 
=== DPI Resolution handling ===
 
 
We have some DPI resolution issues, some work in this area is needed.
 
 
 
----
 
=== DirectPlay ===
 
 
Is there any work needed on DirectPlay... Identify missing things.
 
 
----
 
=== Common Item Dialog Box improvements ===
 
 
Ask Vincent Povirk about details / ideas.
 
 
Improvements of this dialog box framework.
 
 
----
 
=== Improvements of specific Windows applications ===
 
 
Hard to scope the effort for specific applications beforehand to meet the GSOC effort range.
 
 
(brainstorm: Perhaps select some "known" apps that might be in the range?)
 
 
----
 
=== Improve the AppDB ===
 
 
Our application database written in PHP code is in need of improvements and bugfixes. (fill in)
 
 
Cross check with Roseanne on needed projects.
 
 
- accessibility
 
 
 
----
 
=== Tools - implement a wine diagnostic tool ===
 
 
Collect data about the current installation that can be used for AppDB or bugreporting. Things like wine version, operating system, native dlls versions, etc.
 
----
 
=== Tools - Implement resource editor and / or dialog editor ===
 
Possible Mentors: [[User:MarcusMeissner|Marcus Meissner]], [[User:AndreHentschel|André Hentschel]]
 
 
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: [[User:AndreHentschel|André Hentschel]]
 
 
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 [http://test.winehq.org/data/ test.winehq.org].
 
* It would be nice to have a mode in [http://test.winehq.org/builds/winetest-latest.exe 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.
 
----
 
=== VKD3D - Write more tests for Direct3D 12 ===
 
Possible Mentors: Józef Kucia
 
Knowledge prerequisite: C, knowledge of Direct3D 11, 12 or any 3D
 
graphics API is helpful
 
 
Difficulty: Easy
 
 
* VKD3D (https://source.winehq.org/git/vkd3d.git/) is a D3D12 to
 
Vulkan translation library. It has a test suite which verifies
 
behavior of Direct3D 12 API.
 
* The work would consists of writing more tests for Direct3D 12 API.
 
* Direct3D 11 tests from Wine conformance tests are good candidates to
 
be ported to Direct3D 12 tests.
 
 
----
 
----
=== Direct3D 10 Effects ===
 
Possible Mentors: Józef Kucia
 
 
Difficulty: Medium
 
  
* Direct3D 10 implements effects in d3d10.dll. Native d3d10.dll cannot
+
=== Fix Tests on Your Windows Machine ===
be used in Wine, thus it would be quite valuable to have a better
+
Possible mentors: Depends on the libraries you pick
support for Direct3D 10 effects.
 
* The work would consists of writing more tests for Direct3D 10
 
effects and implementing missing functionality.
 
* The project goal could be set to fix/improve Steam Big Picture
 
rendering in Wine, see bug 44120
 
(https://bugs.winehq.org/show_bug.cgi?id=44120).
 
----
 
=== VKD3D - DXBC/Direct3D 10 shader reflection ===
 
Possible Mentors: Józef Kucia
 
  
* VKD3D (https://source.winehq.org/git/vkd3d.git/) contains
+
Wine has an extensive testsuite that is used to document how the Windows API works and check Wine's conformance to the native Windows behaviour. The Wine testbot automatically runs tests when patches are submitted to check if a patch breaks anything.
libvkd3d-shader library which has a parser for shaders in the DXBC
 
format.
 
* The goal of project would be to introduce shader reflection API to
 
libvkd3d-shader. In long-term, the API could be used to implement
 
Direct3D 10 shader reflection - ID3D10ShaderReflection.
 
* The work would consists of writing tests for ID3D10ShaderReflection,
 
and developing a new libvkd3d-shader reflection API.
 
* The following WineHQ bugs are related: 39816
 
(https://bugs.winehq.org/show_bug.cgi?id=39816) and 43042
 
(https://bugs.winehq.org/show_bug.cgi?id=43042).
 
----
 
=== D3DX9 - Implement missing D3DX9 APIs ===
 
Possible Mentors: [[User:StefanDösinger|Stefan Dösinger]], [[User:MatteoBruni|Matteo Bruni]]
 
  
Knowledge prerequisite: C, maybe some domain-specific knowledge related to the APIs you want to implement
+
Unfortunately no Windows machine passes all the tests: http://test.winehq.org/data/ . A few tests are failing reliably and others fail randomly. This can have a number of reasons. Either the test is too strict, Windows' behaviour changed from version to version, the test does not take the influence on some settings into account (e.g. system language), etc.
  
Difficulty: Easy to medium, depending on the functions you want to work on
+
A possible GSoC project is to pick a set of libraries of a certain domain you are familiar with (e.g. 3D graphics, XML parsing, networking, etc), where tests are failing on one or more of your machines and try to fix them. However, we don't simply want to remove failing tests, but try to understand why they are not behaving as expected. So be prepared for long debug sessions to find out the differences between your Windows installation and one that passes the tests.
  
* [[DirectX-D3DX9|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.
+
Some of the details we expect you to provide in your proposal are DLLs you plan to look at and the current test failures you see in them. Hack away any crashes that prevent any later tests from running to get the full picture. Test how the same tests behave on Linux inside Wine.
* 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 - Microbenchmarks ===
 
Possible Mentors: [[User:StefanDoesinger|Stefan Dösinger]]
 
 
Knowledge prerequisite: C, Direct3D, OpenGL
 
 
Difficulty: Medium
 
  
Debugging performance problems in full games is a challenge. Small test programs that test the performance of single operations can help to locate performance problems and fix them. Once fixed, those test programs can be used as regression tests to detect regressions that are hidden inside the margin of error in games. With an equivalent test case in OpenGL it is possible to separate problems in wined3d from problems in the driver.
+
=== Upstream changes from winevdm ===
 +
Possible mentors: Stefan Dösinger
  
Stefan Dösinger has already written test programs for draws, buffer uploads, clears and a few other operations and is testing them on a daily basis. More tests need to be written. The test programs will probably be maintained outside the Wine source tree.
+
Wine supports running old Windows 3.x (Win16) programs on 64 bit Linux hosts. The winevdm project (https://github.com/otya128/winevdm) ported this ability to Windows. They are using Wine's 16 bit thunks and combine it with a CPU emulator to get around kernel limitations that prevent 16 bit applications from working natively on 64 bit Windows.
  
A good application should contain a list of d3d operations to test, a rationale why those operations are good candidates and a short description how each of the tests will be implemented.
+
The winevdm project has made quite a few changes to the thunks over time and extended them. This project proposal is about upstreaming those changes to Wine. Find some applications that work in winevdm but not Wine, isolate the changes necessary to make them work (the winevdm git log is your friend) and submit them in small patches to wine-devel.
  
 +
Your GSoC application should identify one or more Win16 applications together with a likely set of changes that will get the application running. It doesn't have to be a complete set of patches - that will be the main part of your project - but we want to see that you are able to find your way around the source tree.
 
----
 
----
=== Direct3D - Automated game benchmarks ===
 
Possible Mentors: [[User:StefanDoesinger|Stefan Dösinger]]
 
 
Knowledge prerequisite: Autohotkey, knowledge of common game engines
 
 
Difficulty: Medium
 
 
Monitoring performance over time is a tedious task. In many cases it requires manual gameplay, and the results are unreliable if the gameplay is not 100% the same every time. It would be much better if the game could be scripted to produce a reliable result without human intervention.
 
 
Many games have a replay mode or even a builtin benchmark mode for this purpose. [[User:StefanDoesinger|Stefan Dösinger]] has written a few scripts for Half Life 2, Unreal Tournament, Trackmania and a few other games to monitor performance. More tests are needed, especially with newer games.
 
  
If you know some games that offer a benchmark mode that can be controlled from the command line or via Autohotkey this task may be right for you. The goal is to write scripts that can run the games on Windows (and thus by extension in Wine), configure common settings, run a benchmark and read the result. Stefan's scripts track the results via the Phoronix Test Suite, but other performance monitoring tools can be used as well.
+
=== Multi-monitor display settings support on Mac ===
 +
Possible mentors: Zhiyi Zhang
  
 +
* Currently, Wine supports enumerating multiple monitors(EnumDisplayMonitors) but cannot change their display settings on Mac(EnumDisplaySettings, ChangeDisplaySettings). On Mac, only the primary display settings can be changed. Multi-monitor display setting handlers are implemented in winex11.drv so we can do a similar thing in winemac.drv.
 +
* End goal would be to allow changing the display setting on multi-monitor Mac systems and passing all the tests in dlls/user32/tests/monitor.c
 
----
 
----
=== Direct3DRM - Implement rendering for D3DRM ===
 
Possible Mentors: [[User:StefanDoesinger|Stefan Dösinger]], [[User:AndreHentschel|André Hentschel]]
 
 
Knowledge prerequisite: C, DirectDraw, Direct3D
 
  
Difficulty: Hard
+
=== Implement XRandR display settings handler with transforms ===
 +
Possible mentors: Zhiyi Zhang
  
* D3DRM (Direct3D Retained Mode) is partially implemented, it needs to interact with ddraw to actually display something.
+
* On Wayland and some setups with Nvidia proprietary drivers, XRandR reports only one resolution(https://bugs.winehq.org/show_bug.cgi?id=34348#c34). In this case, the proper solution is to use XRandR transforms to simulate display resolution changes so that Wine can support multiple display resolutions even if the host only report the native resolution.
* Even if it's an old library and has been removed in Vista, there are small Games based on it.
+
* End goal would be to allow changing the display setting on Wayland and passing all the tests in dlls/user32/tests/monitor.c
* There may be value in making this work on Windows / native ddraw as well.
 
* Some bugs with games that use d3drm: [https://bugs.winehq.org/show_bug.cgi?id=12851 12851], [https://bugs.winehq.org/show_bug.cgi?id=19733 19733], [https://bugs.winehq.org/show_bug.cgi?id=21670 21670]. There are more of them.
 
* Basic object creation, ddraw initialization and stand-alone math functions are implemented. Very rudimentary display functionality exists.
 
* The most notable missing features are geometry and texture handling, state management and actual 3D draws.
 
Applicants should have understanding of how 3D APIs work, and specific knowledge in old Direct3D / DirectDraw versions will be of an advantage. You will have to work with file formats for 3D geometry and textures, fixed function transformation and the really awful Direct3D 1 interface.
 
 
----
 
----
=== CMD - implement more robust parser ===
+
Possible Mentors: We'll provide you with the appropriate mentor
+
=== DirectShow DVD support ===
 
+
Possible mentors: Zebediah Figura
Knowledge prerequisite: C, CMD commands
 
 
 
Difficulty: Medium
 
  
* 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.
+
* DirectShow is a general multimedia streaming framework, built around creating graphs of individual "filters" which consume and produce data. Windows ships a number of built-in filters.
* 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.
+
* Several interfaces related to DVD support (DVD Navigator filter, DVD filter graph) are stubs or unimplemented. The work would consist of providing an implementation of these interfaces.
 +
* End goal would be to allow a native application to play DVDs.
 
----
 
----
=== Portability - Port WineLib to a new architecture ===
 
Possible mentors: [[User:AndreHentschel|André Hentschel]]
 
 
Knowledge prerequisite: Assembler for the target
 
  
Difficulty: Medium, depending on the target
+
=== AVFoundation video capture support ===
 +
Possible mentors: Zebediah Figura, Gijs Vermeulen<br>
 +
Requirements: Mac OS development
  
* Wine can run WineLib applications on different CPU architectures, but needs at least some assembler code for that.
+
* Yet another DirectShow project: implement video capture on Mac.
* Suggested architectures: [https://en.wikipedia.org/wiki/Ppc64 PowerPC64 (maybe POWER8?)], [http://en.wikipedia.org/wiki/Sparc64 Sparc64], [https://en.wikipedia.org/wiki/RISC-V RISC-V], [http://en.wikipedia.org/wiki/X32_ABI x32].
+
* Currently the only video capture backend is Video4Linux (i.e. v4l2). The work would consist of writing another backend using AVFoundation.
* You will also need a test system. Qemu should be possible.
+
* End goal would be to allow a native application to capture video.
 
----
 
----
=== Implementing XACT sound dlls ===
 
Possible mentors: [[User:AndrewEikum|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, xapofx) involved, so only a portion would be done for the project. Some examples would be implementing xaudio effects like reverb and echo, or implementing 3D positional audio.
+
=== DirectShow audio capture ===
 +
Possible mentors: Zebediah Figura
  
 +
* Yet another DirectShow project: implement audio capture.
 +
* The work would consist of implementing the CLSID_AudioRecord object, which is currently only stubs.
 +
* Audio capture should probably be done through WinMM APIs (i.e. waveIn*).
 +
* End goal would be to allow a native application to capture audio.
 
----
 
----
=== WineCE: Implement the CommandBar ===
 
Possible mentors: [[User:AndreHentschel|André Hentschel]]
 
 
Knowledge prerequisite: C
 
 
Other prerequisite: ARM device with Linux or some Qemu experience
 
  
Difficulty: Medium
+
=== Implement robocopy.exe ===
 +
Possible mentors: Zebediah Figura
  
* WineCE targets to support Windows CE applications, an huge update to revive it will be pushed soon.
+
* A complex copying program needed by some installers: <https://bugs.winehq.org/show_bug.cgi?id=43653>
* This is an out-of-tree project, but obviously still related to Wine.
+
* Work would consist of implementing the basic functionality of the program, including flags needed by the relevant programs.
* The goal is to implement [https://github.com/AndreRH/wine/blob/winece/dlls/commctrl/main.c#L41 the CommandBar].
 
* If there's time you could also implement [http://msdn.microsoft.com/en-us/library/aa931573.aspx CommandBands].
 
 
----
 
----
=== Winecfg / winemenubuilder - enhance MIME type handling ===
 
Possible Mentors: [[User:MichaelMueller|Michael Müller]], [[User:SebastianLackner|Sebastian Lackner]]
 
  
Knowledge prerequisite: C
+
=== Evaluate performance of hqemu in Hangover ===
 +
Possible mentors: Stefan Dösinger
  
Difficulty: Medium
+
Hangover (https://github.com/AndreRH/hangover) is a proof of concept of integrating a CPU emulator - in this case qemu - with Wine to run x86 Windows applications on non-x86 host CPUs without running a full Linux userspace stack inside the emulator. While its design is not suitable for upstream integration, it is useful for performance evaluation.
  
Wine tries to integrate Windows programs as much as possible into your unix/linux system and provides ways to directly assign MIME types to programs running in Wine. This makes it possible to open Word when you click on a .docx file in your file browser. However, this kind of integration is not always desirable, especially if there are native programs which support the same MIME type. At the moment a user can only decide to disable this kind of integration completely or Wine will automatically forward all MIME type registrations of Windows programs, resulting in questionable ones like .txt -> notepad and .png -> Wine Internet Explorer. If a user wants to remove such MIME type registration again, it is necessary to manually delete the according files.
+
hqemu (http://csl.iis.sinica.edu.tw/hqemu/) is a modification of qemu to generate more efficient translated code with the help of LLVM.
  
The idea of this task is to provide a GUI (most probably as part of winecfg) to control the creation of such MIME type assignments and therefore making Wine more user friendly. You can find ideas how such a GUI could look like in the [https://forum.winehq.org/viewtopic.php?f=2&t=24237 Forum] or in the [https://bugs.winehq.org/show_bug.cgi?id=19182 Bug Tracker]. This task is also suitable for new Wine developers as no deep knowledge about the Wine source code is required. It might help though to have some knowledge about Win32 Dialogs.
+
This project proposal is about merging together the hqemu modifications and hangover qemu modifications to evaluate the combined performance. Hangover ideally keeps the amount of code that needs to be emulated small and hqemu speeds up the emulation. If combined, they might either synergize well, or the faster emulation makes hangover's high level thunks moot.
  
 +
To work on this you will need an arm64 Linux machine. Hangover is notoriously difficult to build. Please try to build and run both Hangover and hqemu separately before submitting your application. Try to get an idea of the modifications each project makes to qemu and how to reconcile them.
 
----
 
----
=== XMLLite: Implement fully compatible xmllite parser ===
 
Possible mentors: [[User:NikolaySivov|Nikolay Sivov]]
 
 
Knowledge prerequisite: C
 
 
Difficulty: Medium
 
 
* There shoudn't be any external dependencies for parsing functionality
 
* The main focus should be on the Reader
 
* Full parser resuming functionality for pending reads
 
* Unit tests
 
* Support for external entities to allow nested parser inputs
 
----
 
=== Tools - Winetest Scripting Interface ===
 
Possible mentors: [[User:StefanDoesinger|Stefan Dösinger]]
 
 
Knowledge prerequisite: C, scripting language of your choice
 
 
Difficulty: Easy
 
 
Wine has an extensive set of regression tests. These tests can be helpful for projects Wine depends on. E.g. the developers of 3D drivers may want to run our d3d tests and our d3d implementation to test their OpenGL implementations.
 
 
One obstacle Mesa developers reported is that the default way to run tests (run "make test") only reports success or failure. That's OK when all tests are passing, but it is a problem when there are known test failures and you want to make sure you don't introduce additional failures. In this case users have to manually check the output written to stdout, which is a terrible task.
 
 
The Wine testbot has some scripts to ignore known failures. It might help developers of dependency libraries if we made them available outside the testbot environment somehow. On the other hand we do not want to make the existing test code more complicated than it is. Ideally the tests themselves would not be modified.
 
 
For your proposal please think about what the API of such a scripting interface would look like and which information it provides to its callers.
 
 
----
 
=== DirectWrite: Implement vertical text layout support ===
 
Possible mentors: [[User:NikolaySivov|Nikolay Sivov]]
 
 
Knowledge prerequisite: C
 
 
Difficulty: Medium
 
 
DirectWrite is a text layout and rendering library available on recent Windows releases, starting with Vista. It provides several API layers to manage font file, process text, render it, and interact with GDI subsystem. A lot of basic functionality is already supported in Wine, this proposal is however about specific feature to process and render text in vertical mode. This touches every layer mentioned above, brief summary on what needs to be done follows:
 
 
* AnalyzeVerticalGlyphOrientation - this method analyzes input text and returns orientation for every part of the text;
 
* GetVerticalGlyphVariants - returns vertical glyphs for specified nominal glyphs, if font has any;
 
* vertical glyph metrics should be properly returned, that includes GetDesignGlyphAdvances;
 
* layout part has to support vertical direction when building lines, this implies baseline calculation, alignment logic changes, maybe something else;
 
* IDWriteBitmapRenderTarget1 and IDWriteGlyphRunAnalysis have to support sideways mode too.
 
 
=== AppDB improvements ===
 
Possible mentors: Jeremy Newman, Rosanne DiMesio
 
 
Knowledge prerequisite: PHP, HTML, MySQL
 
 
Wine's Application Database (https://appdb.winehq.org/) is old and could use improvements. If you have ideas for improvements and new features please step forward!
 
 
----
 
=== Uniscribe: Improve Indic language support ===
 
Possible mentors: [[User:AricStewart|Aric Stewart]]
 
 
Knowledge prerequisite: C, familiarity with fonts and opentype a plus,  familiarity/fluency in Devanagari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada or Malayalam not required but a big plus.
 
 
Difficulty: Medium
 
 
Uniscribe is the text layout and rendering system for earlier versions of windows and much of the Wine UI.  The frameworks is mostly in place as well as a first pass implementation for many languages including the Indic languages. However nobody with more than a passing knowledge of the languages has dug into the details and issues in properly displaying these complicated languages.  Including issues around separate Indic matras. Ideally the student working on this will also be fluent enough to at least start doing some translation of the Wine strings into the target language as well, so that Wine's usability in those languages greatly improves.
 
 
 
----
 
=== Implement Unicode string normalization ===
 
Possible mentors:
 
 
Knowledge prerequisite: C
 
 
Difficulty: Medium
 
 
Unicode string normalization handles transformations between composed and decomposed character forms. Windows exposes this functionality with NormalizeString and IsNormalizedString functions.
 
 
Implementation should be based on publicly available character classification data provided by Unicode.org. Simple external program to check algorithm conformance using Unicode.org test data is also required, as well as some Win32 tests added to wine tests suite.
 
 
  
[[Category:Development]] [[Category:Summer of Code]] [[Category:ToDo]]
+
[[Category:Development]] [[Category:Internships]] [[Category:ToDo]]

Latest revision as of 01:53, 14 July 2021

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 home page.


Important notes!

  • Applicants MUST have submitted a patch or testcase to wine-devel (see Submitting Patches) to be considered for acceptance.
  • Please first send a draft proposal and discuss it with us, don't send the final one directly.
  • We cannot accept ReactOS proposals, so please only make proposals that will benefit Wine.

To apply, go to the Google Summer of Code 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

Other Outreach Programs

In addition to Google Summer of Code Wine also participates in:

  • Outreachy is a program similar to GSoC organized by the Software Freedom Conservancy. The goal of Outreachy is to provide encouragement, experience, and networking opportunities for minorities that are underrepresented in tech. Unlike GSoC, it is not limited to students; you can read the Wine Wiki's Outreachy page for more information.

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.

Fix Tests on Your Windows Machine

Possible mentors: Depends on the libraries you pick

Wine has an extensive testsuite that is used to document how the Windows API works and check Wine's conformance to the native Windows behaviour. The Wine testbot automatically runs tests when patches are submitted to check if a patch breaks anything.

Unfortunately no Windows machine passes all the tests: http://test.winehq.org/data/ . A few tests are failing reliably and others fail randomly. This can have a number of reasons. Either the test is too strict, Windows' behaviour changed from version to version, the test does not take the influence on some settings into account (e.g. system language), etc.

A possible GSoC project is to pick a set of libraries of a certain domain you are familiar with (e.g. 3D graphics, XML parsing, networking, etc), where tests are failing on one or more of your machines and try to fix them. However, we don't simply want to remove failing tests, but try to understand why they are not behaving as expected. So be prepared for long debug sessions to find out the differences between your Windows installation and one that passes the tests.

Some of the details we expect you to provide in your proposal are DLLs you plan to look at and the current test failures you see in them. Hack away any crashes that prevent any later tests from running to get the full picture. Test how the same tests behave on Linux inside Wine.


Upstream changes from winevdm

Possible mentors: Stefan Dösinger

Wine supports running old Windows 3.x (Win16) programs on 64 bit Linux hosts. The winevdm project (https://github.com/otya128/winevdm) ported this ability to Windows. They are using Wine's 16 bit thunks and combine it with a CPU emulator to get around kernel limitations that prevent 16 bit applications from working natively on 64 bit Windows.

The winevdm project has made quite a few changes to the thunks over time and extended them. This project proposal is about upstreaming those changes to Wine. Find some applications that work in winevdm but not Wine, isolate the changes necessary to make them work (the winevdm git log is your friend) and submit them in small patches to wine-devel.

Your GSoC application should identify one or more Win16 applications together with a likely set of changes that will get the application running. It doesn't have to be a complete set of patches - that will be the main part of your project - but we want to see that you are able to find your way around the source tree.


Multi-monitor display settings support on Mac

Possible mentors: Zhiyi Zhang

  • Currently, Wine supports enumerating multiple monitors(EnumDisplayMonitors) but cannot change their display settings on Mac(EnumDisplaySettings, ChangeDisplaySettings). On Mac, only the primary display settings can be changed. Multi-monitor display setting handlers are implemented in winex11.drv so we can do a similar thing in winemac.drv.
  • End goal would be to allow changing the display setting on multi-monitor Mac systems and passing all the tests in dlls/user32/tests/monitor.c

Implement XRandR display settings handler with transforms

Possible mentors: Zhiyi Zhang

  • On Wayland and some setups with Nvidia proprietary drivers, XRandR reports only one resolution(https://bugs.winehq.org/show_bug.cgi?id=34348#c34). In this case, the proper solution is to use XRandR transforms to simulate display resolution changes so that Wine can support multiple display resolutions even if the host only report the native resolution.
  • End goal would be to allow changing the display setting on Wayland and passing all the tests in dlls/user32/tests/monitor.c

DirectShow DVD support

Possible mentors: Zebediah Figura

  • DirectShow is a general multimedia streaming framework, built around creating graphs of individual "filters" which consume and produce data. Windows ships a number of built-in filters.
  • Several interfaces related to DVD support (DVD Navigator filter, DVD filter graph) are stubs or unimplemented. The work would consist of providing an implementation of these interfaces.
  • End goal would be to allow a native application to play DVDs.

AVFoundation video capture support

Possible mentors: Zebediah Figura, Gijs Vermeulen
Requirements: Mac OS development

  • Yet another DirectShow project: implement video capture on Mac.
  • Currently the only video capture backend is Video4Linux (i.e. v4l2). The work would consist of writing another backend using AVFoundation.
  • End goal would be to allow a native application to capture video.

DirectShow audio capture

Possible mentors: Zebediah Figura

  • Yet another DirectShow project: implement audio capture.
  • The work would consist of implementing the CLSID_AudioRecord object, which is currently only stubs.
  • Audio capture should probably be done through WinMM APIs (i.e. waveIn*).
  • End goal would be to allow a native application to capture audio.

Implement robocopy.exe

Possible mentors: Zebediah Figura


Evaluate performance of hqemu in Hangover

Possible mentors: Stefan Dösinger

Hangover (https://github.com/AndreRH/hangover) is a proof of concept of integrating a CPU emulator - in this case qemu - with Wine to run x86 Windows applications on non-x86 host CPUs without running a full Linux userspace stack inside the emulator. While its design is not suitable for upstream integration, it is useful for performance evaluation.

hqemu (http://csl.iis.sinica.edu.tw/hqemu/) is a modification of qemu to generate more efficient translated code with the help of LLVM.

This project proposal is about merging together the hqemu modifications and hangover qemu modifications to evaluate the combined performance. Hangover ideally keeps the amount of code that needs to be emulated small and hqemu speeds up the emulation. If combined, they might either synergize well, or the faster emulation makes hangover's high level thunks moot.

To work on this you will need an arm64 Linux machine. Hangover is notoriously difficult to build. Please try to build and run both Hangover and hqemu separately before submitting your application. Try to get an idea of the modifications each project makes to qemu and how to reconcile them.