Interview 6: Art Yerkes

by frik85 | December 29, 2006

Art Yerkes

Interview with Art Yerkes by Klemens Friedl

This is the sixth 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.

Art, born in Philadelphia, PA, USA in 1974. He's been involved with ReactOS since 2002 and contributed primarily to the keyboard code in win32k and the network code. Lately much of the work has been networing related, as well as slowly giving birth to a PowerPC architecture port.

Start

How did you get involved with ReactOS?

I heard about it online after seeing the first pictures of reactos running GDI (graphical, but not windowed) test programs and started watching. I was hoping to get involved and got the chance after writing some patches for loadros and kernel32.

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

I'd been a huge unix head since being put off of windows programming by 16-bit windows and by the rather fragile environment of windows 95 and 98. I really hadn't known much about the connection between the native API and the win32 API before working on reactos, but I learned a lot which made my future jobs writing windows apps much easier. I don't know how anyone managed to write stable commericial software on windows before being able to search and compare against the wine and reactos code.

I like the unix model and the unix philosophy of software development. Unix application tend not to overreach and are frequently built with reliability as their primary goal. This is in deep contrast to what I percieved as a very uncaring developer community surrounding windows. It turns out that there are complex reasons for why windows
applications went through a period of very poor reliability in the 90s, but windows software as a whole has improved by an order of magnitude in stability terms since then.

That having been said, I've become totally comfortable in both environments.

Did you have any Windows experience? Or did you just learn it as you needed to?

I had some, enough to be dangerous but not enough to know about the native API. I was very disillusioned with the way win32 seemed to be a bad match to most of the good practices I had learned while doing my own engineering work. What I learned was that win32 was always fitted on top of the elegant and fairly slim windows kernel. Once the effects of the antitrust lawsuits in the US became evident, documentation of the native API (which had been the province of certain people with either time to snoop around or some priveleged access), became widely available documented by microsoft itself. This facilitated my ability to see more keenly how windows was put
together and become a more successful windows programmer, as well as helping to write reactos.

Do you remember the first patch you submitted?

It was in the now defunct loadros dos program. I was annoyed that the dos command line length limit was short and all drivers and registry hives were specified there. When I tried to add a driver, I ran out of room, so I extended loadros to read the list from a file instead.

Do you remember the first work you did on ReactOS?

The first big work I did on reactos was the keyboard code in win32k, including loading windows style keyboard dlls. That was fun and I learned a lot about multiple language support.

Fun with ReactOS

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

I don't really have a favorite area, but I'm experienced with network code so working on tcpip was a good thing for me to do.

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

The powerpc port. To do it, I needed to revive a way to produce little endian, pe-coff executables for powerpc, as well as learn a lot about powerpc architecture and various flavors of powerpc hardware. As things stand, I've got tools that are very stable and work well and a freeldr that can run against openfirmware on a G3 mac. I've just started going through Windows Internals and implementing the Ke parts for PPC.

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

I was happy the first time GvG got firefox to load a page. Hpoussin pleased me greatly by taking my stub of an insane idea (green.sys) and turning it into something nice.

You've worked a lot on ReactOS's network (architecture). What parts do you really like?

If there's one piece of advice I'd give it's to make everything you can into a library that can be linked into a usermode application. Royce Mitchell and I did this for the tcp import from oskit and it helped by giving us a very sane environment for debugging. I don't think I'd ever write new kernel code without using this method.

What areas of ReactOS do you like to work on?

I'm pretty deep into porting right now, but it'll help me get into two things that bother me, but that I haven't had the ability to get into yet. ReactOS' mm and cc are not as compatible as they should be with real windows (especially cc), and I'd really like to see an ext2 driver running under ReactOS. I participated in a branch with Hartmut (PBUH) and Filip to try it, but in the end I didn't contribute much. When I learn more about these areas I hope to make a more significant contribution.

What else do you do for reactos?

I see myself as a sort of curmudgeon and oral historian for reactos as well as a programmer. Perhaps I'm unwanted in this capacity but it's one that I think has a benefit and comes pretty naturally.

I try to be a decent +o when I'm in the channel and keep the channel from getting too angry or too personal.

I try to provide some balance when things are hotly contested and hopefully provide a moderating force. Not sure how successful I am at that.

I speak the virtues of 1978 and substantiate my claim that it was the apex of western civilization.

1978? Now way.

Way.

Meetings

Speaking of Wineconf, was that the first time you've met anyone else involved? Who was the most interesting person you met?

Yes. It was fun to meet everyone during that cold january in Minnesota. I've really been disappointed that our relationship with wine folks hasn't been better. From my perspective, we're competing, but we're competing like people who lift furniture into a second floor apartment; in the end we have similar goals even if we go about it differently.

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?

Yes. Meeting other people who work on reactos has been great and I recommend everyone with the means to do it at least once.

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

Definately Minnesota. I even considered living there at one time.

Work

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

I haven't worked on USB, PnP, ACPI, or HAL in kernel land. In userland I've never touched shell32, comctl32 and their ilk.

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

Our AFD is pretty well designed and accomplishes the required functionality in some nice compact code. I'm pretty proud of it.

Are you working on any major ReactOS projects right now?

Although it's been over 2 years (with about 1 year taken off for the most part), I've been making very slow but fairly steady progress toward making ReactOS on PowerPC a reality.

Why? Because it's a project that I've always wanted to undertake and ReactOS is a unique opportunity for it. I want to run ReactOS on PowerPC macs and PReP boxen like my thinkpad 860. Since otheros booter is available for Playstation 3, we might be able to explore 64-bit porting issues on cell processor using PowerPC 32-bit as a starting point, even before the 64-bit mingw toolchain is available for intel.

Mostly, it keeps participating in the ReactOS project fun and keeps me connected. When I first got the Smiley face boot logo on the real hardware VGA in my mac, I was ecstatic.

Have you worked on any other parts of ReactOS?

I wrote our little DnsAPI implementation on top of GNU adns, which is really cool.

What kind of development environment do you use?

I use a 64-bit gentoo box for x86 and both a mac G3 and a thinkpad 860 for various aspects of ppc porting.

Of course, the obvious question people ask about ReactOS is: why would someone ever want to run a clone of Windows? Why not just run the real thing?

Actually, most people I talk to (probably because I've been fairly deep in high tech communities) really get the idea of an unencumbered operating system that provides a fair playing field for application software to run on without worrying about whether making one more socket or allowing one more user would somehow break a license agreement and leave them legally vulnerable. If it sounds far fetched to say that the EULA for microsoft operating systems has recently been fairly draconian then you haven't been reading closely. There are disturbing aspects to the availability and use of information collected by operating system software. ReactOS and free/open source software provide a needed reality check that keeps commercial software vendors from acting as an oligarchy with regard to limiting user freedom and taking more liberties
with users' private information.

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

I'm a somewhat dormant maintainer of the SWIG Ocaml module, and I also wrote pycaml, which I'm proud of to some degree.

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

AFD is the Ancillary Functions Driver. In other words, it's the place where the *other* stuff goes. Seriously though, it's the driver that provides the kernel part of the nice happy BSD sockets interface on top of the cold, unfeeling TDI.

How do you go about developing this stuff?

I try to get a block of time, usually at night, when I can sit down, flood the room with music and try to concentrate as well as possible. It's harder to do in my present situation and so my productivity hasn't been what it once was.

Future

If you could add 'one' feature to ReactOS, what would it be?

I'd like to add samba fs, but I think we should let cache manager shake out first. It'd be prudent to wait in this case, because we're seriously incompatible.

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

The cache manager is a problem that won't go away until somebody solves it 100%. It's a big job and it's difficult to divide. Audio is a big hairly ball of coexisting and sometime competing APIs, each of which presented a different performance model for some application class or another. Silverblade has done a great job by just deciding on a starting point and getting its affairs in order.

Is there anything you wish ReactOS could do, but can't?

Every once in a while I start debugging on cygwin again to see if I can make some progress. We're very close to getting cygwin apps to run and have been for a while, but cygwin's API coverage is so extensive that it may take a while for reactos to be enough. It's sad because we could really benefit from it.

Needs ReactOS more masochistic developers working on undocumented stuff?

We could use good engineers blocking out documented functionality. I don't agree that everything in reactos has to be implemented so that internals agree the first time. We've regressed in user visible functionality recently while busy making the internals agree, and I think that's a shame.

Do you have any particular ideas about what ReactOS should be integrating with that it isn't? Is ReactOS too much of a moving target to work on that right now?

To some degree I do think that reactos is too volatile for me to be of use right now. It's not any one person's fault but of necessity I can't be as dedicated as I used to be for now.

Do you ever wish there were just more developers?

Sure. I miss royce and gvg a lot.

Do you ever wish there were ReactOS Distributions?

Yes, and it'll happen. The only thing stopping it is that reactos isn't ready enough yet for somebody to get angry about having to reinstall abiword every time they upgrade ROS. Once we have some audience, the 'poweruser' crowd will likely exploit the ease with which reactos livecds can be built to make little reactos rescue disks of various kinds.

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

We need to concentrate on remembering why we're doing this. I think that we've been very rigid recently and lost sight of the things that made reactos fun to work on before. None of us are getting paid so fun is really the only thing motivating any of us to work on it.

If working on reactos ceases to be rewarding because it's too structured or too hostile an environment, then developers will leave. I think we've seen this happen and we'll see more unfortunately until the situation improves.

Compatibility

Do you think .Net will render ReactOS obsolete?

No.

Do you think .Net will render WinAPI obsolete?

No.

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

Office, games, flash and legacy. If we can run most apps from each of these categories then we win.

What about dotNet support? The two that comes to mind are Mono and dotGNU.

It's a non-issue for us. We take an existing free implementation and put together an mscore replacement. As those implementations become more solid, our .net support improves too.

Interact with companies.

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

I've actually worked on open source software a couple of times for pay. My latest one was recent work on SWIG's C# module for my employer.

End

Final thoughts?

I've recently had more time to devote to working on reactos, which has allowed me to gain significantly in my subprojects. Hopefully I can make some interesting and more useful contributions soon. I have ever been present even if there were times when my 60+ hour weeks at the office kept me from contributing much. I hope to continue on as reactos' best curmudgeon, stalwart friend and oral historian.

Congratulations on all the accomplishments so far and thanks for taking the time for this interview.