Alex Ionescu was born on April 26th, 1986, in the city of Bucharest, RomaniaSon of a doctor and an engineer, he took up a passion with computers at the age of six, when he first hacked DOS 4.00's command line parser unsucesfully until the age of seven, when he discovered hex editing. At that time, he was already fluent in QBASIC and was working on password protection programs and graphical shells.
First Programming Experience
At the age of eight, he emmigrated to Canada with his family and has been living in Montreal, Quebec, Canada ever since. Near that time, he learnt his second programming language, Visual Basic and worked for over four years on a project called WinAlOS, a replacement shell for Windows. It was during this time that he developped a passion for operating system design, and the fact that Visual Basic could only create shells frustrated him. With the advent of V2OS, a hobby Operating System, and after lecturing himself with John Fine's famous OS Design documents, Ionescu made his first contribution in an Operating System Kernel. His work on VB continued however, and by the age of 16, WinAlOS grew into an Office Suite, Programming IDE supporting over 10 scripting languages, and a full featured shell that rivaled Explorer, which included over 50 applets from games to system utilities and multimedia applications.
Beginnings of Public Appearances
After a catastrophic hard-disk failure due to a failed Linux installation which cost Ionescu all his work, he decided to work on a security suite for charity and small-business organizations, which also offered internet cafe management. Baptized Internet Control and Configuration (ICC), it was the first product of his startup company, Relsoft Technologies. The final product was submitted as a school project for the coveted International Baccaulerate Diploma, and was submited to academic judges in Cambridge. Bored with the limitations of Visual Basic, Ionescu got to work on advanced plugins which expanded the features of the suite, as well as posting software on Planet Source Code. He made three submissions, all of which won the "Best Code of the Month" award, as well as wrote numerous articles about NT Architecture, which he had become obsessed with. He did some research on NTFS, and published a private document outlining the entire format of the on-disk structures, after which he started to work on non-malicious virus software, which eventually led him to advanced rootkit development, which hooked parts of the NT Kernel in order to hide information, or modify kernel data to fool the system itself. This work got him even deeper into the Kernel/OS Programming world, and he often thought about re-writing entire parts of the kernel in a rootkit.
Thanks to Rent A Coder, an online outsourcing site, Ionescu was able to find a more stable job for SPAMfighter ApS, a Danish company specializing in Anti-Spam products, where he was the Lead Developper of the Outlook Express plugin. This work was the culmination of his previous Visual Basic experience, as he had to develop plugins which made Visual Basic able to create standard C DLLs, as well as use Assembly code in Visual Basic. Apart from this job, he also took on over 20 other projects on Rent A Coder, where he received 10, the highest possible rating, on all of them. Additionally, he transformed one of the Visual Basic plugins into a retail product, which became Relsoft's first official public product. Over 50 copies have been sold to date.
Beginnings at ReactOS
Around this time, ReactOS reached 0.2 stage, which now included a much more stable codebase for developpment, as well as a GUI and some basic applications. This immediately piqued Ionescu's interest, and he joined the project during Summer 2004. His first patch added Callback support to the Kernel, which would become needed by later NT5 Drivers. He then spent the next 2 months stubbing every kernel function that was in XP but not yet exported by ReactOS. This task added about 700 new stubs to ReactOS, out of which he personally coded around 150. While his work has focused mainly on Kernel Development, he has been monumental in the creation of the Ancilliary Function Driver DLL (msafd.dll/mswsock.dll) and accelerated the implementation of ReactOS's first working networking system.
His other most important contributions include the SYSENTER patch, which singlehandedly improved ReactOS System Call execution speed by 70-80%, and the FreeLoader Patch, which added dynamic loading of the Kernel using the Portable Executable (PE) format. He has also re-written the ReactOS APC and DPC implementations, making them similar to NT's.
As of November 2005, a large number of other large kernel patches can be attributed to him, including implementing Guarded Mutexes, Kernel Gates, making the Object Manager more NT compatible, rewriting parts of the Process Manager for Thread/Process Create/Kill and reviewing and fixing hundreds of bugs in the Ex and Ke modules of the kernel. He has finally also been responsible for major changes in the I/O Manager related to event sychronizations of I/O operations, as well as the IRP implementation.
As of November 2006, his work on the kernel has accelerated even further, and he is now responsible for large rewrites of the Thread Scheduler, Executive support for Objects, IRQ Handling and HAL, and hundreds of bug fixes or compatibility changes. He is singlehandledly responsible for almost the entire implementations of the Process and Object Managers, as well as LPC support and User-Mode Debugging, and is planning on implementing KD-Comaptible Kernel Debugging.
Alex Ionescu currently does a variety of work in ReactOS which splits up into many directions, usually yielding results only months later. Ionescu is currently working on the ReactOS Kernel and HAL, and sometimes does work on system libraries such as ntdll and kernel32. Sometimes, he enjoys taking up smaller projects as well to clean up the air, and he has sometimes documents his plans on his blog (link available below). Some of these projects include a new Loader (rewrite of Ldr in NTDLL to match XP's new features) and a new Subsystem Manager (SMSS). Due to his unpredictable nature, Ionescu is known to stop work on a long-term project and quickly implement a completely unrelated feature. He also participates in bug bashes every once in a while, where he spends his time only doing bug fixing. Ionescu's work current work touches the Ke, Io, Lpc, Dbgk and Kd subsystems of the NT Kernel.
Alex Ionescu has currently been applying his experience in NT Kernel Design in the IT/Computer Security market, posting various articles on websites such as OpenRCE and giving talks at computer security conferences (Such as REcon 2006). He is also avaialable to do private, hands-on training of employees and other members of security companies, and is planning on doing a public training course at REcon 2007. His resume is available on the site below.
Alex Ionescu will be appearing at a number of events in 2007, below is the schedule of confirmed events for 2007:
- Canadian Undergraduate Technology Conference (CUTC '2007) - Concordia University Delegate/AMD Tech Team Competitor. Toronto, Canada, Jan 11th to Jan 13th.
- Canadian University Software Engineering Conference (CUSEC '2007) - Concordia University Delegate/ReactOS Demo Speaker. Montreal, Canada, Jan 18th to Jan 20th.
- Southern California Linux Expo (SOCAL '2007) - ReactOS Exhibitor and Conference Speaker. Los Angeles, USA, Feb 11th to Feb 13th.
- 8th International Free Software Forum - Forum Lecturer. Porto Alegre, Brazil, April 12th to April 14th.
Other confirmed events will be added as they appear.
Alex Ionescu can be reached at firstname.lastname@example.org. His blog is at: Alex Ionescu
Interview with Alex Ionescu by Klemens Friedl
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.
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.
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.
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.
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.
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.
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.