CentOS happens to be the Linux distribution I prefer to use (probably because I got used to it in the workplace). However, I find it has a number of flaws (which probably apply to most linux distros).
The first I will address is the X Window System. This is an antique system which is only still useful today because of the extraordinary care that went into its design. It has many nice features, and is highly customizable. But it is absolutely awful for use by the ordinary user. Configuring it initially is and always had been a klunky process involving editing text files.
Linux has, I'll admit, made some advances in making this simpler, but every time I install it, I find myself having to pull up tcsh and fix it. I could not imagine recommending it to anyone who does not have a knowledgeable person available to them on an ongoing basis due to this issue alone.
The system configuration utilities are not up to snuff; an example of this is the Samba configuration utility that ships with CentOS (maybe this is fixed now, I haven't booted my ibm x345 in a month or so) does not allow you to configure the access control properly (it just 'forgets' the input) and thus doesn't let you set up Samba graphically. Once again, I'm using vi to edit text files to make it work. Obviously, this is a major p.i.t.a. to me, but not such a big deal - but to someone who has other computers that they wish to have interact with the Linux system, it is a show stopper.
A great feature of Linux is the ability to build your own kernel so as to eliminate unneeded functionality and enable that which is called for. Perhaps you would like Linux to use more than one CPU because that's what you have? Well, the kernel that ships with CentOS doesn't have SMP enabled, so start installing development tools! I think this affects multi-core use as well, because I have a dual P4 xeon box (four cores on two chips) and only one core was seen by the stock kernel. Maybe you could get lucky and find an SMP kernel on the net that will be compatible with your system, maybe...
Multi-tasking under Linux is great, of course, and memory protection is pretty good as well. Until you run an application that wants to use an amount of ram equal to more than your physical ram... in that case, you had better not try to run a screensaver! Why? Because the screensaver will swap in and out to run, and so will your application, and neither will get any CPU time because the PC is stupidly too busy swapping them at a higher priority than any user-land program can ever have.
I have encountered this myself while running perl scripts and attempting to process too much data. So turn the screensaver off, you say? Well, that's not the only thing that tries to run periodically. You _could_ sit there and trim your system down by editing the rc scripts for an hour, but again, I'm stuck using vi to fix the problem. This is not a viable solution for end users, at all - only for programmers and other technologically inclined types.
I could go on like this for pages; but I think I have already bored some of you to tears. It's a simple fact that Linux is fundamentally a vintage operating system that has been maintained well enough to still perform alright - but just alright. It can be considered one of the best operating systems for PCs (alongside of Free/Net/OpenBSD, which are sadly ignored by most people despite being more stable and, imho, easier to understand than Linux) but that does not make it a good desktop OS, just a viable one.
I would really like to see a new operating system (preferably based on an object-oriented paradigm) that can be used on intel systems. It would be nice if it was simple enough for an end user and powerful enough that developers would produce apps for it. But I know why it's pretty much unlikely: the PC is so poorly designed (it's a hatchet job for the sake of backwards compatibility that is no longer needed) that it has become a daunting task to be able to do hardware level programming.
15 years ago, everyone I knew who programmed at all messed about with the hardware directly at least once in a while, if only to better their understanding of it. These days, I don't know any developers who give a rat's a** about hardware programming unless they are paid to develop that type of code.
I applaud the linux developers for anteing up and developing an OS for the PC at all; I just wish it had been designed to be usable by everyone.