The simplest windows programming environment for a linux programmer is of course GNU C, which you have already mentioned. Cygwin is more full functioned than MinGW but more complex and has a few quirks that I really do not like, for example it's installation process is bizarre and annoying, the way it maps windows directories to unix naming is weird, the options for file types can be confusing, and I found that sometimes its impossible to remove all of cygwin. It creates some files that just cannot be deleted, I hate software that does that. On the other hand it's an impressive environment, you can almost have it look exactly like a linux machine.I have used Cygwin and MinGW and I have to say that MinGW was simple in the way I like it. I do not like complex development environments. I don't want to spend a week just to figure out how to do hello world. MinGW is faster to get actually programming with, and although limited in comparison, was just right for my needs. It has the win32 API: http://www.mingw.org/docs.shtml#win32api I did some win32 with this and I loved it because it's GNU and very straightforward. The Win32 API however is extremely complex and very annoying. Surprised? <g> Your battle will be more one of understanding the win32 API that one of tools. It can take quite a while to do the simplest of things with win32. I would recommend looking for some small tutorials, that's what I did and found a few that got me started. Find a getting started tutorial for MinGW and look for really simple win32 examples. I didn't do any win32 serial code but you can most likely find some examples on the net. I don't know anything about SAPI. -- Doug