In light of e.g. http://reactos.com:8080/archives/public/ros-dev/2004-November/000658.html I would like to suggest the following header ideas.
Currently MingW has: 1.A set of headers that contain a copy of part of the platform SDK 2.Some extra stuff (like that ntdll.h) 3.A set of headers that contain a copy of part of the windows DDK 4.Mabie again some extra stuff MS doesnt have (I dont know) 5.A set of headers that contain a copy of part of the visual C++ runtime library 6.Some extra stuff (mainly bits required to deal with differences between GCC and Visual C I think)
WINE has: 1.A set of headers that are supposed to contain a copy of part of the platform SDK (although some things have been claimed to be wrong) 2.A set of headers that are supposed to contain a copy of part of the visual C++ runtime library (although again there may be things that are wrong) and 3.Extra definitions for stuff in both header sets microsoft doesnt define in the platform SDK (e.g. internal bits, functions microsoft doesnt document etc)
ReactOS has: w32api (the ROS import of it) include/ddk (the ReactOS version of the windows DDK) include/wine (the WINE windows API headers) include/msvcrt (the MSVCRT headers ROS uses to build and link with msvcrt) include (various misc ReactOS specific headers)
What I suggest for ReactOS (and I think some of this is already being done) is as follows: grab any headers from include/* that are public DDK headers (if there are any) and make sure they are all in include/ddk grab everything from the current WINE headers MingW is missing. Check that its all correct and stuff and add it to the ReactOS import of w32api. (if anything is found to be wrong in the wine headers, it should be fixed) grab anything from include itself and add to w32api as needed Get permission to relicence the stuff and contribute back to the main w32api tree. grab contents of include/msvcrt on ReactOS plus include/msvcrt on WINE and also mingw-runtime. Create one set of header files from the 3 sets such that it matches the microsoft headers as closely as possible. Merge w32api DDK headers with ROS DDK headers and create one set that, again, matches the MS headers.
For w32api/mingw-runtime, the suggestion is that they look at all the "new stuff" generated by the merging of the 3 sets of msvcrt headers plus the ROS/WINE/w32api merger plus the DDK merger and look at acccepting it.
For WINE, I suggest they start using the new "merged" headers if at all possible.
Basicly, the idea is that mingw-runtime would become the "definitive" set of msvcrt.dll headers out there and that ReactOS, MingW and WINE would start using it for any case where you are talking to msvcrt.dll from the public side. both ROS and WINE would then have their own internal msvcrt headers as necessary to build their msvcrt* builds Then, w32api would become the "definitive" set of win32 api headers and would contain as much of the Microsoft Platform SDK as people have legally cloned. All userland components of ReactOS (as well as kernel-side bits that need the stuff in the userland headers e.g. win32k.sys) would use this. Be nice if WINE were to use this too but because of what WINE is and how it is built/used, there may be reasons for the WINE team not to use w32api as the build headers used to build WINE. And, there would be one "definitive" set of DDK headers which would be good enough for building ReactOS with. And for building any kernel-side stuff WINE decides to add (e.g. that stuff to load the device drivers for vaerious copy protection systems that was being worked on). And for anyone using MingW and MingW GCC to build kernel-mode stuff. Anything private or project specific would go into a set of private headers as needed for the different projects and sub-sections (dlls etc) within them Anything exported by microsoft but undocumented would go into a set of "undocumented" headers (which could then be shared between ReactOS and WINE since I dont think w32api would accept anything not documented in MSDN)
Just suggestions btw, if they are good, say so If they are bad, say so (and say why) If there are issues with my idea, say what they are.
On 2004-11-19 11:18 AM, Jonathan Wilson wrote:
In light of e.g. http://reactos.com:8080/archives/public/ros-dev/2004-November/000658.html I would like to suggest the following header ideas.
Currently MingW has: 1.A set of headers that contain a copy of part of the platform SDK
I'm sure you already understand this, but in light of the aggressive actions some companies have taken to defend copyright, it bears repetition:
I think it's incorrect to say "copy" here. As far as I know, ms copyrights its headers and MinGW never copies them. MinGW provides different headers that are written on the basis of public information only, and that strive to embody the same information to the extent it's been publicly released, but without reference to any copyrighted materials.
[Snip proposal for merging such headers from MinGW and other projects]
Just suggestions btw, if they are good, say so
It seems good to avoid duplication of effort.
If they are bad, say so (and say why)
To the extent that effort has already been duplicated, resolving any differences will be a lot of work. That's a drawback, but it still seems like a good idea. Yet someone would have to do the work.
An incidental benefit of duplicate effort that has produced different expressions of the underlying idea is that this outcome strengthens the demonstration that copyright has not been violated. If the different expressions can be combined without reference to copyrighted materials, then I don't think that's a real obstacle--the historical record would still make the point. I think Earnie was the first to point this out.
If there are issues with my idea, say what they are.
Previous discussions have mentioned licensing issues and the magnitude of the effort required. I find threads beginning with these messages:
Subject: [Mingw-users] Re: [ros-kernel] Proposed ReactOS headers and code sharing policy From: "Eric Kohl" ekohl@rz-online.de Date: Sun, 19 Oct 2003 12:42:43 +0200
Subject: [Mingw-users] a proposal that will affect MingW-Runtime, w32api, ReactOS and WINE From: Jonathan Wilson jonwil@tpgi.com.au Date: Sat, 18 Oct 2003 12:44:53 +0800
Jonathan Wilson wrote:
Basicly, the idea is that mingw-runtime would become the "definitive" set of msvcrt.dll headers out there and that ReactOS, MingW and WINE would start using it for any case where you are talking to msvcrt.dll from the public side.
I don't know what other people's perspective is here, but I think mingw-runtime's primary usefulness is to provide a standard C library for the GNU toolchain on Windows. In the long term, such a project isn't necessarily tied to msvcrt.dll at all, nor is it necessarily just a set of headers for someone elses dynamic runtime.
Is it a good idea for other projects to use mingw-runtime as an interface to msvcrt specifically?
As far as the Windows headers go, with regards to w32api and all of that, as much merging as possible seems excellent. Ideally there would only be a single Windows API codebase.
However, some other projects might also have political aims that may be contrary to the MinGW culture. I do not want to see the w32api turned into anything that might restrict its use, as this was the whole point of re-implementing it in the first place.
Aaron W. LaFramboise