[ros-dev] Reactos and MinWin

Timo Kreuzer timo.kreuzer at web.de
Tue Nov 3 14:53:05 CET 2009


Love Nystrom wrote:
> It may be a superfluous remark, but in all of this, I hope You don't
> loose sight of that the goal is to loose any up-layer calls in the
> architecture itself, so a subsystem change don't cause a core
>   
The source / sdk separation is a different task, but a neccessary step
in that direction.

> incompatibility. F.ex Win32 is by design a subsystem layer,
> and should have a stable interface to the native core of the OS,
> and the core should *not* call subsystem functions. Due to this
> we will (probably) need a 'glue' dll besides ntdll, where we put
> primitives for the core to use wherever it was calling subsystems.
> I don't really think we *have* to draw the core lines where MS did.
> Our ntoskrnl seems a prime candidate as it stands.
> Perhaps a superfluous remark?
>   
We do this already. The nt-core includes ntdll in usermode. And of cause
ntdll doesn't call win32 functions. And ntoskrnl doesn't call win32k
functions. (Except callbacks)

>> I would suggest a configurable [SDK] path. So that multiple reactos
>> checkouts could use one SDK checkout. Each of the main checkouts
>> contains a config file with the sdk path.
>>     
>
> Should it not be the other way around also ?
> That the SDK would have a configurable path to the OS subversion
> you're working with if you're f.ex trying to regress an app malfunction,
> so your binaries end up in the right place.
>   
The binaries are always placed in the appropriate folders beneath your
toplevel checkout folder. If you use multiple checkouts of the same
source (branches), you wouldn't want to reconfigure your SDK each time
you want to compile the other branch. It also doesn't make sense, as the
SDK stays the same, no matter what you use it for. Or are you talking
about the target OS version defines? These are managed in the source
checkout, too.


>   
>> Sources\
>>     \reactos-trunk\...
>>     \reactos-amd64\...
>>     \reactos-arwinss\...
>>     \reactos-sdk\
>>        \include\
>>        \lib\       <- static libs (crt, nt, ...) here
>>        \import\  <- spec files here
>>     \rosapps\
>>     \rostests\
>>     
>
> IMHO the current source tree structure is not too bad as it is.
> I don't think any *major* reshuffling under 'trunk' is required.
>   
To claryfy, the above was thought as local folders on your harddisk, not
the repository.

Regarding the repository, IMO the current structure is complete crap. It
mixes core and subsystem, win32 and NT, audio and network, 3rd party and
reactos all under the same folder because the modules happen to have the
same extension. Bigger commits usually spread through multiple top level
folders, though they only affect one functionality.

> Making an 'sdk' directory as a sibling of 'trunk', 'tags', et. al.
> Separating all 'public' headers and libs (including 3rdparty) and
> putting them under 'sdk' (I think this is the most daunting task),
> so that 'reactos\include' and 'reactos\lib' will contain only
> 'os internal' headers and libs.
>   
Moving the stuff is the smaller part. Getting the stuff right beforehand
(complete and compatible) is the bigger task. Getting everyone fix their
checkouts is probably the biggest part ;-P

> It occurs to me that the public headers would be more or less a
> drop-in replacement for the ones in the MS SDK, with anonymous
>   
Thats the point, yes.
> stub declarations for internal data structs and so on. It might
> be an interesting test to try an app build with their headers
> instead of our own, but maybe someone tried that already ?
>   
Most of our apps should build fine with ms headers. I never did it
myself, but afaik other people are doing that regularly.

> Under 'trunk' I think only some minor shuffling could be good.
> Moving prog source like f.ex 'mode' and 'sort' which are fundamental 
> parts of a full ReactOS to 'base\applications' instead of 'rosapps'.
>   
LOL, mode and sort are fundamental? I think you didn't quite get the
idea of MinWin / MinRos. This is everything but not fundamental. I think
I never even executed one of them on reactos. Or windows. We could as
well delete them and noone would care.

>> It would probably be a good idea to sync our headers / libs with
>> mingw-w64 as much as possible
>>     
>
> Probably.. but I hope You don't mean to use them verbatim.
> I think MinGW's headers are rather hideous with their dense
> format and total lack of comments, so I'm no huge fan of them.
> I don't know about You, but to me the headers are usually
> the main documentation!
>   
Maybe. We could try to make sure our headers are minimum as complete and
correct as mingw headers and with more documentation, then maybe
mingw-w64 people would be interested in using them.

For DDK headers we could use an autocreate way like MS does. Create a
set of *complete* headers and autocreate wdm, ntddk, ntifs, etc from them.

> Frankly, I think the current code structure could stand in this regard.
> One may already checkout only f.ex 'ntoskrnl' to work on the core
> and 'subsystems' already has it's separate directory etc.
>   
And it's all wrong.
user32 and gdi32 are parts of the win32 core subsystem. they are in
dlls/win32 mixed with all the wine stuff.
ntdll is part of the nt-core and it's also in dlls, just next to
keyboard layouts and control panel applets.
freeldr is part of the ntcore and in the boot folder
kdcom is part of the ntcore and in drivers/base.
etc etc
Show me how to checkout ntoskrnl only and build that. You need the whole
tree to build anything.

> Good point. Sounds reasonable to me too.
> Then 'clean all' can do what 'clean' does today ?
>   
"clean" currently cleans the folder you specified when you installed
rosbe. The current folder stays untouched.

Regards,
Timo




More information about the Ros-dev mailing list