Interview 2: Alex Ionescu

Alex Ionescu

This is the second in a series of interviews with ReactOS developers. In a few weeks we will have a nice collection showcasing the talent of the people behind ReactOS.

Alex Ionescu was born in Bucharest, Romania (Europe) in 1986. He currently lives in Montreal, Canada and is a student at Concordia University in Software Engineering. He's been involved with ReactOS since 2004 and contributed to many different parts. Lately much of the work has been kernel and HAL (hardware abstraction later) related.

Start

How did you get involved with ReactOS?

I got involved with ReactOS while I was very interested in writing my own operating system, and was also discovering how well-designed and rich the NT kernel and its services were. I didn’t have much hope for ReactOS until I saw the 0.2.0 release, which had finally added a GUI. I joined by 0.2.2 and started submitting small patches. At the time I didn’t know any C at all.

So up until that point you'd been programming for Windows?

Yeah, I was working in assembly, doing virus research, as well as writing VB programs exposing certain features of the NT kernel and services.

Do you remember the first patch you submitted?

Yeah, it was a very simple patch to save the thread’s exit time when a thread was being killed by the Process Manager (Ps) in the kernel.

Do you remember the first work you did on ReactOS?

My first real work was adding about 1400 stubs to the kernel. Until then the idea was that the only functions exported would be the ones that were implemented. This was bad because drivers wouldn’t load at all if a function was not present. It’s much better to have the function present and just stub it. At least the driver will load and you can see if the other APIs work well, and you might even get it to work without that API.

Fun with ReactOS

What's your favorite area of ReactOS to work on?

I love working on the HAL the most, because it’s as low-level as the kernel, but a lot more separate and independent. You can easily make it work even on Windows NT with a bit of work. And of course, I love working on the kernel, but the compatibility and breakage issues can be a bit of a pain and ruin the fun.

What's been the most challenging work you've done?

Probably work involving FreeLDR and the way the kernel and other images are loaded, as well as re-writing the Object and Process Managers, because they’re heavy components. But the most chanllenging I would have to say is the low-level microkernel work in Ke, such as the system call handler, system traps, interrupts, exceptions and thread dispatching + context/switching. And the IRQ/interrupt work in the HAL.

If there is one thing you'd like to see ReactOS do, what would it be? Or has it already been done?

I’d really like us to have a new explorer shell, like Windows, instead of the current one we have, which frankly most of us find very unappealing and broken.

You've worked a lot on ReactOS's kernel. What parts do you really like?

My favorite parts are the Process and Object Managers, as well as the Executive, because they’re big yet pretty easy components, and you learn a lot on how to deal with the whole object-oriented nature of NT and how it takes care of user-mode.

Meetings

You've been to a lot of conferences and given quite a few talks on ReactOS, do you find it helpful to meet other developers?

It usually is, because reaching out to other members of the community often gives you new ideas and insights, and also gives you an impartial view of the progress and changes you’re making in the industry as a whole. Of course, sometimes there’s the negative views, but those help you better prepare on how to counter them.

What's been the favorite place you've visited?

I like Boston a lot, but I go there often, so the coolest place that ReactOS brought me to was Mountain View, California since I got to visit the GooglePlex.

Work

You've been involved with ReactOS for a while, but recently you been extremely active (and that's probably putting it mildly). Any particular reason why?

There’s a certain rush you feel as you’re getting to the end, and that’s right, I can start seeing the light at the end of the tunnel. There’s very few things left in the Kernel and HAL to do before I would call us 60-70% complete. Perhaps about 8-12 more months of work, and that’s including stuff like kernel32, ntdll, csrss, smss and other low-level components that communicate with it. I think once those components work, and with Wine’s libraries that seem to be pretty well done since they can run a lot of applications under Linux, it’ll be up to GUI subsystem (win32k.sys) to support user-mode applications. After that work is done I’ll most probably work on user-mode and kernel-mode networking, and then we’ll see what the future holds. Definitely not sound support though, I don’t feel ready to do that.

Before this recent activity, what was the most significant contribution you made to ReactOS?

I’d like to think that every contribution I make is significant; it’s hard to say which was more so than the other. I’ve written almost every kernel module and worked on “trivial” stuff like MSVC compatibility, but I think that’s just as important.

Are there any areas of ReactOS you haven't worked on?

Plenty. All the Wine DLLs, all the applications, stuff like the PnP Manager and Security Subsystem in the kernel, etc.

What was the most interesting addition you've made to ReactOS?

I think the ability to be booted by NTLDR, even though it only partially works. In the future I hope I can continue working on this during my spare time to increase our compatibility.

Are you working on any major ReactOS projects right now?

Yes, I’m trying to get the HAL compatible with Windows.

In addition to everything else, you're pretty active on the irc channels. Does that consume a lot of your time?

I tend to stay away from the forums because IRC is where I spend most of my time. I’m the channel owner so I’m always online there answering questions, and talking to other developers. I’d say it takes up a good 6-8 hours of my time daily, but I do other stuff meanwhile.

Could you briefly describe the Process Manager?

Sure. The Process Manager (Ps) is what’s basically responsible for all the processes, threads and job objects on the NT system. So every single application you start, and its threads, as well as the system process in which the kernel is located is managed by that component. Although there’s a heavy user-mode part of it too, especially when starting a process, the kernel is what manages the relationship to other components such as the executive, memory manager, security subsystem, etc.

What kind of development environment do you use?

I use Microsoft Visual Studio 2005 SP1 and the WDK.

So, beside ReactOS is there any other projects you're involved in?

Yeah, I work on TinyKRNL, which is a re-implementation of the NT Kernel and Drivers, as well as the native subsystem, for educational purposes. It’s expected that it will share a lot of its kernel and HAL code with ReactOS, while the drivers are done from scratch, since ReactOS doesn’t yet support those features.

How do you go about developing this stuff?

I read documentation, use symbols, dump strings from the file, and use a special program that I’ve written which creates call chains and global variable accesses from a given function. That way I can know what it’s trying to do. It also prints out ASSERTs and other strings.

You brought up some terms people might not be familiar with. Could you explain some of them?

An ASSERT is a special check that’s present in the debug binary of Windows components, which shows a line of actual source-code that verifies the value of a variable of a member of a structure. It can give some insight into what the code is doing and what structures/constants are being used and their meaning. Symbols are special files that Microsoft releases which contain information about the internal APIs, variable names and structures used inside the associated executable.

Future

What do you see as the biggest stumbling block preventing ReactOS from reaching a "1.0" release?

Lack of sufficiently trained developers working on kernel-mode stuff, and user-mode developers not being fully aware of the necessary compatibility hacks and kernel-communication in their user-mode components.

Are there any major tasks you're planning on taking on?

Yeah. Making the HAL/Kernel compatible to 70% or more by 2007’s end.

What areas of ReactOS would you like to see worked on?

Sound support, done properly using the Windows 2003 stack.

What area of ReactOS development do you see as needing the most work?

Win32k, the Win32 GUI Subsystem.

Does ReactOS need more masochistic developers working on undocumented stuff?

No, I think one guy doing this (myself) is enough. Two would create confusion and duplication.

Is there anything that could be easily done to improve ReactOS's usability?

Yeah, replace Explorer with a better rewrite of the shell!

Do you ever wish there were just more developers?

Every day, as long as they are smart and don’t end up breaking even more components or colliding with my (or other’s) work.

Are there any other things you think ReactOS needs to concentrate on?

Yeah, the website still needs more work to become a portal for users, and we definitely need to increase awareness for the project in universities and other educational places.

Compatibility

Do you think .Net will render ReactOS obsolete?

No, I think it will help us a lot. Once we support the framework, then automatically almost any .NET app will also work.

Do you think .Net will render WinAPI obsolete?

No, .NET is built on top of WinAPI and it will probably continue to be that way for a long time.

Do you think there's any applications ReactOS needs to focus on supporting?

Microsoft Office 2003/2007, IE 6/7, Microsoft Visual Studio 2003/2005, MSN Messenger 6/7/8, AOL Instant Messenger, ICQ, Yahoo Messenger, WinAmp, Quicken, Photoshop. I think these are some of the biggest apps that will show people our progress. Once we get those apps running and usable, I think we should call the thing 1.0.

Interaction with companies

How hard was it to convince your boss to let you contribute to free software?

I’m working as a Microsoft Student Partner so I’ll let you guess about that one.

End

Final thoughts?

Yes, please donate money!

Well, it definitely seems like you have your work cut out for you! Congratulations on all the accomplishments so far and thanks for the interview.