[fpc-pascal] Opinion about new target: Windows Native NT
svenmauren at vr-web.de
Sat Apr 25 21:38:44 CEST 2009
I'm working on a port of FreePascal to the Native NT API of
Windows/ReactOS and wanted to ask about your opinion on this idea.
For those who don't know what I'm talking about:
The Win32 API every Windows (NT) developer normally uses is not the API
of its kernel. The kernel itself exposes a more abstract, but also more
powerful API (you can even fork processes!). This is (mostly) exposed
to user space through the ntdll library. Win32 itself is a so called
environment subsystem which exposes its own wrappers for NT's API (this
is the Win32 API) to its processes. The subsystem executables (there are
at least two more: one for POSIX systems and an OS/2 one) and some
executables like autochk are true Native NT binaries (the subsystem
field of their PE-header is "1") which use only the kernel's API.
The purpose of this port is simple: I want to write native NT binaries
in Pascal and I want to write them in a comfortable way (e. g. without
hacking around ^^)!
But I'll also tell you the truth: I don't know how useful this port is
or will become (at least for anyone besides myself).
Basically you can write
- applications for the recovery console of the windows setup
- applications that are started right after the kernel
- your own subsystem
That's it, not more. (I myself prefer the last one :P )
But I see this port as an intermediate and necessary step to a much
greater target: the kernel mode of NT; being able to write device
drivers in a beautiful yet powerful language (not to mention typesafe :P).
Now you might ask: Why do we need the (more or less useless) user mode
part, if all you want are device drivers?
Developing device drivers in Pascal without hacking around in the
compiler itself or the RTL (like some Delphi developers did) will be a
nice and huge achievement for (Object) Pascal, but let me tell you my
reasons why I want the user mode part done at first:
- User mode is easier to implement. There is only ntdll you need to
wrap. For device drivers you have to translate the Driver Development
Kit which is at least a huge task (though you can reuse some of the
usermode stuff). And I'd also need Microsoft's fastcall calling
convention (btw: how can I add a new calling convention?)
- I myself know what I want to do in NT's user mode (I want to play with
the NT architecture)
- I want to show the world (especially the C one) how powerful Pascal
(especially FreePascal) is; I want to endanger their holy grail "system
development"! (although "kernel mode pascal" might suit this task even
Here's a little sum up of the port's status:
- the new target is added to the compiler and its utilities (using the
internal linker only)
- I successfully compiled a program with a stub RTL and executed it
during ReactOS' boot process ("hello world" ;) )
- currently I'm implementing the RTL features step by step (thanks to
HAS_FEATURE_XYZ this is easier then checking which methods of ntdll I
Now I ask you (especially the main developers of FPC): Is there any
chance that this target might be added officially to FreePascal (I'd
even maintain it, if needed)? Or shall I keep it on my own harddrive and
never speak about it again? :)
PS: I might also help to update/complete the "porting FPC"
documentation, as some parts are missing. For example: I needed to add
my target to the coff code-generator and I had to search with grep to
find the right place...
More information about the fpc-pascal