I have always thought that MacOS rules. However, this opinion was solely based on what I had heard about it, rather than from using it. My main source of information was a friend who is a Mac fan and always described to me how great of a system it is, especially compared to Windows.
In the last several months I have had to actually use a Mac for long periods of time because of my work. I have had to change my opinion a bit.
Now, a GUI-based OS can be, roughly speaking, divided into two distinct parts in this context: The core OS (in other words, what features and system apps the OS provides) and the user interface. I don't have too many complaints about the core features and apps (so far) because it's basically a unix system with fancy Apple software However, the user interface is a completely different matter.
As I said, I always believed MacOS to be an easy-to-use system for both beginners and pros, based on what I had heard. However, after having to actually use the system for months, it has many irritating features. And this doesn't simply mean that "it's different from Windows or KDE, thus it sucks". It really does have, IMO, usability problems.
Ok, maybe it's not entirely true that it's not about "it's different, thus it sucks". However, this one thing I think can be justified: The apple keyboard works in many ways very differently from a standard PC keyboard. This can be really irritating for a person who has used the PC keyboard for well over a decade. This is especially true for the Finnish keyboard (and I'm sure it's the same for many others as well). It's not only that some keys are bound differently, but these key combinations are much more complicated than on the standard PC keyboard layout. Just as an example, in the Finnish keyboard, to get the characters { and } you press altgr+7 and altgr+0. In the Mac you have to press alt+shift+8 and alt+shift+9 (and the alt key is in a different place than the altgr key on a PC keyboard). This becomes quite irritating when programming in a {}-based language. There are also many other characters which are equally awkward to type.
I personally also find the complete lack of the insert key to be irritating. (It's not because I use the insert feature, but because I am accustomed from more than 15 years of using text editors for programming to use shift+insert and ctrl+insert, and not having an insert key is irritating.) There's no way known to man to configure the Apple keyboard to have an insert key (or any other key for that matter) in the same place as the PC keyboard has. It has a "function" key in its place which does not work like a regular key, and cannot be configured to work like one.
Naturally in the few instances where you really need the overwrite feature which the insert key normally provides, it can be irritating when you just can't. (I actually don't know if it's possible at all to switch to overwrite mode in MacOS text editors).
The "home", "end", "page up" and "page down" behaviors work differently than in the PC, and can be irritating.
But that's just the keyboard. The GUI has its problems as well.
One of the major problems with the GUI is that applications and application windows are treated completely differently. To switch between applications you press command-tab, which works very similarly to how alt-tab works in Windows and KDE/Gnome (at least by default). In other words, applications are put onto a "stack" when switching between them, which means that you can eg. switch between two applications by single command+tab presses, even if there are more than two apps running.
However, unlike Windows or KDE/Gnome, if an application has several windows open, you can't switch between them with command+tab. This can be really irritating if you have, for example, two terminals open: You just can't switch between them with command+tab, like you can switch between different apps. The same feature is really irritating also with X-Code. X-Code likes to open separate windows for almost everything (rather than keeping everything neatly inside one window like eg. Visual Studio does). Ok, the separate windows wouldn't be such a bother if it wasn't so damn difficult to switch between them. If, for example, one window completely covers another, there's no way to switch to that window with the mouse or command+tab. You have to move the window on top to uncover the hidden window (or you have to navigate through menus, or use other features, all of which are more cumbersome than it would be if you could simply command-tab to the other window, especially if you were typing and not using the mouse at the moment).
Ok, you can switch between windows of the same app with a key combination. However, this key combination is so cumbersome to press in the Finnish keyboard layout, that I never even remember what it is. The way the Finnish keyboard is laid out, it's way more cumbersome than eg. in the US keyboard layout.
Not only that, but switching between app windows with the key combination works differently than switching between apps with command+tab. In the former, no stack is used, and instead the key combination traverses the different app windows in linear order, without remembering which one was the last to have focus. Even if you somehow got used to using two alternative key combinations (for basically the same thing), the fact that they behave differently can be really confusing.
I really think this kind of inconsistent behavior in window switching is a serious user interface flaw.
As a "pro" user (well, rather literally, as I use the Mac for my payjob) I also find the lack of configurability irritating. You can't easily eg. configure the keyboard to work differently. For example, if I wanted to change what key combination produces a '{', there's no easy way in MacOS X to do that. Or if I want to configure what key or mouse button combinations switch between desktops ("spaces"), there's only a very limited amount of combinations offered. Or if I wanted to configure how the command+tab switcher behaves (eg. if I want it to switch only between apps in the current desktop), there doesn't seem to be any way of doing that (at least that I have found). And the list could go on and on.