The success of operating system is directly linked to two features or main points. They are "user experience" or how easy the OS is to use and the second feature is development. The rivals of Linux get them mostly right. OSX is (or has been, this seems to be changing recently) easy to use, no one can argue about that. But I think OSX has big problems in development which is focused on Apple's way to do things and make everything else really hard. Windows is the biggest OS, because it has good user experience and also it's very good as a programming platform.
Linux users can argue about those points, but that's all you can do actually. Numbers don't lie. The small amount of "regular" (non-hackers) users are result of GUI versions of Linux that try to implement the user experience part. Casual computer users don't care about compiling stuff from source and updating libraries or whatever. They want to use programs. I've been programming over 25 years and just I want to use programs. I don't want to compile them or figure out what is happening in the OS itself. Another part of the problem is the way open source has failed to give us programs that are on the same level with commercial software, or even better.
Linux programmers seem to live in the same kind of haze than its users. They say how programming is really easy in Linux, but they use technology from 1970's like makefile. Everything changes all the time so you need to compile everything and watch out for library versions, compiler versions etc. Open source itself is an ideology which doesn't work in reality, because most developers want to keep their source code closed and also sell programs which means they need to be compiled into an executable that works in most versions of that OS. The open source ideology is the biggest problem Linux has and it's just as ironic as it sounds.
It's human nature to make everything more complex that it has to be. We can see this in computer technology and in operating systems for sure. They are bigger and spend more resources with every new version, but give us pretty much the same features. Somehow we fail to make things simple from both user experience and development point of view. Maybe we are too smart to create simple things.