Hi,
I would like to establish two Wine tasklists in Wine's bugzilla. * the first list would contain the items listed in my previous 'Call for Volunteers' emails. This would make it easier to keep track of these tasks. * the second list would contain more complex and general items like 'DCOM support'.
For the first list, refer to my previous 'Call for Volunteers' emails. I think I will start it from there and we can update it after that. For the second list, I included a first draft below. I would like your comments on it, especially with regard to the status of some of these items, and suggestions if you see missing items.
I know we already have a 'Wine 1.0' and 'Wine 1.x' tasklists'. There may be some overlap but I think the intent is different. * My intent with these two new tasklists is to advertise what we want to do to potential contributors. So the idea is to then add a page to the WineHQ web site that would list all the ways one can contribute to Wine: maintaining an application entry in the Application Database, helping users on the mailing lists, buying Wine based applications, and of course contributing code. And for this last item, these lists would provide a good starting point, both for developpers with little time and for developpers who want to invest themselves more heavily in Wine. * Then unlike the 1.0 and 1.x tasklists, these new lists would not be tied to a specific Wine release or date.
I hope to produce a draft of this web page in the coming days. In the meantime let me know if I missed things in the list below. For each item I tried to indicate the rationale behind the task, and point to the corresponding bugzilla report if there is one.
Wine tasklist -------------
* Make the registry loadable on demand - when working from a Windows partition the registry is big. - this causes wineserver to allocate a lot of memory - this has a big impact on startup times - a 'database' based registry may be more robust
* Rasterizer - to paint into a DIB we have to copy the IB contents into an X bitmap, call X functions to modify the bitmap, often only to have to copy the result back to the DIB when the application tries to read it. Imagine it for eash SetPixel operation! - a rasterizer would be able to perform these operations directly on the DIB and thus provide better performance, at least in some situations. - it would also provide better color accuracy: the X server often only supports a few bit depths so that if the application works on a 24bpp DIB but the X server is in 16bpp mode, 3bits are lost per color component.
* Cross process messages - used by many applications - needed for DDE (bug 95) - Alexandre, you worked on this recently, right? Is this working now? - See bug 93
* Out of proc COM - Needed for Installshield 6 - Would probably help with at least some functionality of a host of other applications
* DCOM support - same as out of proc COM but network transparent - should be interoperable with Microsoft's implementation so that, in a company setting, processes running in Wine can connect to servers running on whatever Windows server are present.
* Better multi-user support - how to get per-user registry files - how much per-user setup is really necessary? (create a '.wine' directory, create per user registry files, who does that, ...) - is it possible to share a single read-only 'c:' drive? What do we need to get parity with an NT environment? - is it possible to share a read-only 'system.reg' file? - what is the impact of a 'load on demand' registry? Could we share a single registry server? - what would be necessary to share a single - there are many options that need to be investigated and documented...
* UNC path handling - for drives '\.\e:', devices - for network paths - there's been a patch related to this recently but I believe it does not cover all cases - integrate with Samba to handle network UNC paths - provide a way to mount/unmount drives at runtime, especially network drives. One should be able to disable this in the config file (for security reasons). - Support for 'persistent' mounts... will require modifying the way w specify which drives are mounted where. - provide an applet to mount/unmount drives while Wine is running.
* Native Alsa support - Alsa is the future of sound in Linux: should be integrated in 2.5 - Could it offer capabilities that OSS does not offer? - Other platforms may not support Alsa any time soon so we must keep OSS too - Anti-rational: Alsa includes an OSS compatibilty mode that seems to work pretty well - see bug 324
* aRts support - On an OSS system when the aRts daemon is running Wine cannot access the sound device - aRts makes it possible to send the sound other the network. This kind of functionality is great for a thin-client environments: setup a server and have the sound sent to each terminal ("You've got mail" ;-). Supporting aRts in Wine would let it integrate perfectly in such an environment. - this could either be native support, or making Wine compatible with artsdsp. The current problem may be related to the -Bsymbolic link option. - see bug 325
* ESounD support - Same thing as for aRts - see bug 326 - Making Wine compatible with artsdsp may also make it compatible with esddsp (and vice versa).
* Write a regedit replacement - used by some installers to create registry keys - we can limit the functionality to just that although since Wine has a registry we should probably provide a tool to browse/edit it. - will be more important once we have a database based registry for the load on demand functionality
* Write a regsvr32 replacement - used by some installers
* Fix the desktop mode - If a process running in desktop mode start another, the new process creates a new desktop - the background is black - one cannot start a specific application in desktop mode. You have to modify the config file.
* Compile with STRICT on - better type safety - reveales all the 16/32bits hacks - see bug 90
* Dll separation - to allow us to swap native dlls in and out with less problems - to make the dlls more independent of each other and make it easier to treat them as independent projects - see bug 96
* HEAP_strdup* removal - Alexandre said some day that they will go away - Part of the dll separation?
* Move the winsock16 code to wsock32 - winsock16 is more related to wsock32 than to ws2_32 - ws2_32 is the new API. This would leave us with a clean 32bit implementation of the new API that is not encumbered with 16bit hacks.
* Check .spec file completeness - we need complete spec file to know where we stand - determine what's new in WinMe, Win2000, WinXP - check that the ordinals/absence of ordinals is correct - I have scripts that can be used as a starting point
* Winedbg expression handling - when modifying the contents of a variable there can be mixups where the debugger modifies its own memory instead of that of the debugged process.
* Winedbg g++ 3.0 support - The debugging format and the ABI changed in g++ 3.0 and winedbg does not support the new ABI. - This prevents debugging of C++ Winelib applications - This is especially troublesome for MFC Winelib applications - Eric, you worked on this recently, do you know if this is a thing of the past or is it possible that there are still problems (I did not test recently)
* Better memory allocator - some memory allocation/release patterns cause the current allocator to be relatively inefficient - see threads on wine-dev (Ove/Gav hit this problem)
* Winelib richedit support - one of the things needed by MFC - the API seems at least partly supported, but the headers are very incomplete - see bug 330
* Visual C++ project support - make it possible to generate a Winelib project from a Visual C++ project - this should be done by extending winemaker - see bug 61
* Specify how to compile and package the MFC - many applications use the MFC. To make Winelib useful it is necessary to make it easier to compile the MFC and MFC-based applications - winemaker has some support for the MFC. But it makes suppositions about how the MFC were compiled (library names, etc.). So it is necessary to document how to get something that works well - see bug 110
-- Francois Gouget fgouget@free.fr http://fgouget.free.fr/ 145 = 1! + 4! + 5!
Hi Francois,
What about a list of general, unclassified things that need to be fixed, basically keeping track of all the FIXME stuff? Such as (just for example, of course :) setting virtual memory protections on executable images when loaded.
--Rob
On Sun, 23 Dec 2001, Robert Baruch wrote:
Hi Francois,
What about a list of general, unclassified things that need to be fixed, basically keeping track of all the FIXME stuff? Such as (just for example, of course :) setting virtual memory protections on executable images when loaded.
Yes, I guess we could have a third list containing fully-diagnosed bugs. The virtual memory protection issues could go there as well as maybe other items picked-up from wine-dev. The task could even point straight to the wine-dev discussion when appropriate to reduce the amount of work necessary to enter the bug. But we must be careful not to have too many task lists. One of the ideas is to focus attention on a relatively limited set of issues and if we just have a ton of tasklists that just cover all the bugs in bugzilla then they are not very useful.
-- Francois Gouget fgouget@free.fr http://fgouget.free.fr/ "Lotto: A tax on people who are bad at math." -- unknown "Windows: Microsoft's tax on computer illiterates." -- WE7U
a few comments...
- Cross process messages
- used by many applications
- needed for DDE (bug 95)
- Alexandre, you worked on this recently, right? Is this working now?
- See bug 93
interprocess messages should be fine now (even if all the interprocess object sharing isn't over yet) DDE is being worked on, so I don't think you should keep the item
- Native Alsa support
- Could it offer capabilities that OSS does not offer?
[snip]
- Anti-rational: Alsa includes an OSS compatibilty mode that seems to work pretty well
ALSA is needed when you need proper full duplex capabilities however, only ALSA 1.0 should be supported (0.5 and 0.9 shouldn't, except if 0.9 interface turns out to stay the one for 1.0)
- aRts support
- ESounD support
I think it would be a too high task to implement all the drivers... there's quite some activity right now on linux audio to ease this a bit. let's see where stuff like JACK will go
- Move the winsock16 code to wsock32
more generally, it would be a good thing to be able to tear 16 bit code away from wine (with a configure switch). This would be a must-have for embedded wine. Not really fun to do.
- Winedbg expression handling
- when modifying the contents of a variable there can be mixups where the debugger modifies its own memory instead of that of the debugged process.
do you have a precise example for this one ? this is more a bug than a big thing to do. from the debugger stand point, you could add: - (re)implement function calls from interpreter - add 16 bit trap support - write a transformer to make MSVC .DBG files from wine's .so files (&stabs) so that standard windows debugger can handle native DLLs - implementing imagehlp (or debughlp) would also be appreciated
- Winedbg g++ 3.0 support
- The debugging format and the ABI changed in g++ 3.0 and winedbg does not support the new ABI.
- This prevents debugging of C++ Winelib applications
- This is especially troublesome for MFC Winelib applications
- Eric, you worked on this recently, do you know if this is a thing of the past or is it possible that there are still problems (I did not test recently)
winedbg never had support for the C++ ABI (neither from GCC nor MSVC). So GCC 3.0 shouldn't be an exception regarding the debugging format, it seems more (but I didn't install nor looked closely at it) that gcc chooses which debug format to use instructing gcc with -gstabs (or -gstabs+) instead of -g should ease the issue
some other items to look at: * make the server a linux kernel module (has been discontinued) but could provide some performance enhancements
A+
eric pouech wrote:
- Native Alsa support
- Could it offer capabilities that OSS does not offer?
[snip]
- Anti-rational: Alsa includes an OSS compatibilty mode that seems to work pretty well
ALSA is needed when you need proper full duplex capabilities however, only ALSA 1.0 should be supported (0.5 and 0.9 shouldn't, except if 0.9 interface turns out to stay the one for 1.0)
One of the most annoying problems we've seen with Alsa OSS emulation is that it doesn't properly support directly mmap-ing the sound buffer. It kind of claims to do it, but on most of the machines we've tried alsa on, actually doing the mmap fails.
This means that to build a single Wine binary that supports doing dsound on most different hardware, we have to disable direct sound buffer access, and use the dsound HEL mode instead. This, in turn, results in either latency problems, or cracking, depending on how we tune dsound, even on OSS systems. And problems are magnified on ALSA cards, since the driver is doing yet another layer of conversion before sending the data out to the sound chip.
The TransGaming subscribers have voted for us to do something to fix this. I'd like to put one of our people on it, but we can't spare them right now from their DX8 tasks. So: we are willing to sponsor the development of an ALSA back-end sound driver for Wine, if anyone is willing to work on it. If you're interested in doing the work, let me know and we can discuss details.
- Winedbg g++ 3.0 support
- The debugging format and the ABI changed in g++ 3.0 and winedbg does not support the new ABI.
- This prevents debugging of C++ Winelib applications
- This is especially troublesome for MFC Winelib applications
Why would you want to use Winedbg for a Winelib application, instead of gdb?
some other items to look at:
- make the server a linux kernel module (has been discontinued) but
could provide some performance enhancements
We did some more examination of this question, and came up with some notes and code for doing a server-accellerator kernel module that would move some functionality into the kernel, but keep the current architecture mostly intact. If I recall, the architecture centered around the creation of a /proc like virtual file-system for managing NT kernel objects. Our own resources for continuing this effort directly are limited, but again, we would consider sponsoring further development along these lines: WineServer overhead is one of the nastier performance blocks for several games we've looked at.
I'll try to see if we can put the notes and code we've done so far into better shape to be picked up by someone else.
-Gav
The TransGaming subscribers have voted for us to do something to fix this. I'd like to put one of our people on it, but we can't spare them right now from their DX8 tasks. So: we are willing to sponsor the development of an ALSA back-end sound driver for Wine, if anyone is willing to work on it. If you're interested in doing the work, let me know and we can discuss details.
I have this on my (rather long) todo list, and don't need sponsoring so you might get it for free.
Why would you want to use Winedbg for a Winelib application, instead of gdb?
multi-threading, native DLL symbol support
A+
On Sun, 23 Dec 2001, Francois Gouget wrote:
- Move the winsock16 code to wsock32
- winsock16 is more related to wsock32 than to ws2_32
- ws2_32 is the new API. This would leave us with a clean 32bit implementation of the new API that is not encumbered with 16bit hacks.
Is anybody working on this right now? I need to get going with certain ws2_32 functionality ASAP, and I don't want to write code that will conflict with other people's work.
On Thu, 3 Jan 2002, Martin Wilck wrote:
On Sun, 23 Dec 2001, Francois Gouget wrote:
- Move the winsock16 code to wsock32
- winsock16 is more related to wsock32 than to ws2_32
- ws2_32 is the new API. This would leave us with a clean 32bit implementation of the new API that is not encumbered with 16bit hacks.
Is anybody working on this right now? I need to get going with certain ws2_32 functionality ASAP, and I don't want to write code that will conflict with other people's work.
I am not working on it currently and I am not aware of anyone else working on it. Go ahead!
-- Francois Gouget fgouget@free.fr http://fgouget.free.fr/ Linux: It is now safe to turn on your computer.
On Thu, 3 Jan 2002, Francois Gouget wrote:
- Move the winsock16 code to wsock32
Is anybody working on this right now?
I am not working on it currently and I am not aware of anyone else working on it. Go ahead!
What you propose means that winsock16 will be "owned" by winsock32, which will, in turn, forward most calls to ws2_32 (as it does now), right ?
I don't know if I'll be able to sort this out, because my understanding of the Wine linking issues and the spec files is yet very limited. To make matters worse, the Winsock code has some problems with symbol clashes between system headers and wine headers.
I'll see what I can do.
Martin
On Fri, 4 Jan 2002, Martin Wilck wrote:
On Thu, 3 Jan 2002, Francois Gouget wrote:
- Move the winsock16 code to wsock32
Is anybody working on this right now?
I am not working on it currently and I am not aware of anyone else working on it. Go ahead!
What you propose means that winsock16 will be "owned" by winsock32, which will, in turn, forward most calls to ws2_32 (as it does now), right ?
Yes.
I don't know if I'll be able to sort this out, because my understanding of the Wine linking issues and the spec files is yet very limited. To make matters worse, the Winsock code has some problems with symbol clashes between system headers and wine headers.
I mostly meant that you could go ahead with the changes that you had planned to do in Winsock. But of course you are welcome to tackle this too. If you do, I will try to help as I can.
-- Francois Gouget fgouget@free.fr http://fgouget.free.fr/ Computers are like airconditioners They stop working properly if you open WINDOWS