In my experience, Linux would be absolutely stable if it weren't for X—it's the only thing that's crashed any Linux installations of mine, and has done so with every single one, right back to Slackware when almost nobody had heard of Linux.
I find the assertion that Linux is
absolutely more stable than, say, Windows 2000 to be rubbish. I think that the truth of this just depends on the particular situation. After all, there are people who've had no problems whatsoever with Windows Me, yet can't get Windows 2000 to stay up for even 5 minutes. And that just defies all logic.
Overall , based upon my experience, the two (Windows 2000/XP and Linux) are equally stable; a faulty video driver took down my Windows 2000 box a few times, and X has played devil with all of my Linux installations. Everyone's mileage varies. Incidentally, the only modern operating systems I haven't had problems with is Mac OS X, except for the very first release which kernel panicked on me while starting up the Classic environment. Other than that, it's been flawless. But, of course, I doubt that it's significantly more or less bullet-proof than Windows 2000 or Linux.
So, even though your lecturer makes Linux sound absolutely better, everyone must always form their own opinions based upon
experience , and not succumb to indoctrination or hype (as seems to happen in schools all around these days, not that I'm saying that this happens to you).
As far as pleasantness for development goes, this will depend upon personal preference. Just about every platform has sufficient development tools—GCC, for instance is practically everywhere, including Windows. The only significant differences beyond just basic usage of the system are: 1) tools for aiding the programming process, such as IDEs, and 2) the APIs available for creating software for that platform.
I believe that Visual Studio .NET is the easiest and most advanced IDE in existence, so that's a point for Windows. While its expensive, I feel that its overall quality and completeness are worth it—admittedly, this is helped by my being elligable for a significant adademic discount. I find that Project Builder (and, the upcoming XCode, to a greater extent) is rather good as well, so Mac OS X gets a 3/4 of a point in my book, especially since it's free. Linux/Unix have things like KDevelop, but I find them to be too shaky and undeveloped, and their documentation is usually of rather poor quality. Like Project Builder, these are free, so that wins at least 1/2 of a point. As much as I might like to support free software, I feel that this is just one of those cases where commercial software will invariably beat free software in overall quality because the development teams associated with commercial software have so many more resources at their disposal.
As far as APIs go, this is probably more influenced on what you're used to than anything else. On Windows, the players are the raw Win32 API, MFC, and WinForms (from the .NET Framework). Linux/Unix have raw Xlib, and a wide range of Xlib wrappers, including those for KDE and Gnome. Mac OS X has Carbon and Cocoa, the latter of which is unlike anything else (except for NeXTSTEP, which is its parent). Win32, Xlib, and Carbon are largely procedural, and require the most work to get things done. MFC, in my opinion, is so poorly designed that it doesn't even deserve consideration.
![](wink.gif)
WinForms, the KDE API and Gnome API, are very object-oriented in that they wrap the underlying system's controls in a rich class heirarchy. They also have editors for visual development of interfaces. Cocoa stands alone because it's native language is Objective-C, which is quite rare (there's also a Java binding), and because it's so conceptually different than the others. It's been claimed that Cocoa leads to signifant productivity boosts, but even if that's true, it takes some time to master it because it's so different. Project Builder provides tools for graphically designing interfaces with it. Oh, hell, and I didn't even think to mention things like Swing; I won't discuss it because I think it's visually ugly, and dislike the mechanisms used to get around Java's design choices (or "omissions," if you prefer). Worse, it conforms to no particular platform's interface standards, so Java interfaces stick out badly.
My advice is to develop on the platform of your target audience. Although cross-compiling can be useful, good interface design relative to the target platform seems to come more naturally when actually immersed in that platform. Then my suggestions are the following:
Windows: WinForms is probably the easiest overall, though some advanced things will require the use of the Win32 API intermixed. Although WinForms isn't strictly tied to Windows, it's heavily biased toward it. Luckily, the Mono project seems to be getting steadily closer to the goal or porting WinForms to Unix platforms.
Linux/Unix: Choose Xlib if you're masochistic.
![](wink.gif)
Beyond that, I'd suggest either the KDE or Gnome APIs. Which one you choose barely matters because most Linux distributions, by default, install KDE and Gnome anyway. Glance at both and decide which you like better. I like KDE better, but many swear by Gnome. There are APIs that are neutral to the desktop environment, but I find it important to conform to established user interface standards (which KDE has developed most thorougly, I believe).
Mac OS X: This one's easy. Choose Cocoa. I'd suggest staying away from the Java binding because Java is always so very slow. Objective-C is very easy to learn, and building simple interfaces is arguably intuitive, once you get the hang of the way things are done and let go of concepts you may have learned with other APIs.
Anyway, don't forget that most of what I've said are opinions. I hope to have exposed some issues that are important to think about when considering platforms, but always remember to try everything at least a little bit so you can make a fair, educated decision. It will pay off in the forms of productivity and enjoyment.
I know I said things that weren't ever even really asked, but I suppose I just felt like talking.
[edited by - merlin9x9 on September 23, 2003 12:18:00 AM]