Linux has been around for a long time and for some time thought that it would take the computing world over. Other than in the server and supercomputer world, Linux has barely grown at all. In fact it is barely above the 2% mark as of February 2020.
The thing is, Linux will never become a mainstream OS in the desktop market for a variety of reasons. Before I go further in, I want to say I have no problems with Linux. If you are a user of it, that's good for you.
Assume you are a Windows user and are thinking about switching over to Linux, if you do research on Linux, here is what you'll find:
I know that malware is rare for Linux, but that doesn't change the fact it still exists People are always worried about malware corrupting files, ransomware locking their files, or some other kind of virus. AVs have been created with linux in mind but they have issues. They can cost more than getting a Windows 10 key and an AV combined. They may be free to use but the 'free' part gives a bad impression, as free AVs for Windows are often garbage. They may be terminal based only, though I will get into the issue of the terminal later on. With all of these factors, it would drive a paranoid person away from Linux as the lack of choice in AVs could cause a virus could get in without detection.
Let's say you want to run Word to type up an essay for school, then in the evening you go play the MMO Black Desert Online. On Windows this is easy, as almost all applications created for PC are made with Windows in mind. However on Linux this is not as easy. Unless you have Wine running, your options for something like Word are something like LibreOffice or something online like Google Docs. For something like gaming it is more troublesome. If the game you want to play does not have native Linux support. You either have to use Wine and hope it runs without issue, or use something like Proton but you need to hope that the game you want to play is supported. Not everyone wants to spend time trying to get an application working though Wine, or use an alternative to something they either love or have to use. If only a small handful of applications are made with Linux support while most do not, why switch to an OS with less overall choice in applications? Not to mention online modes for games without Linux support often do not work due to anti-cheat or DRM and may even get you banned, so if you want to play an MMO like I listed at the start of this section, you have to use Windows.
You want to pick what distro to use for your system and you go onto DistroWatch to see what types there are. However you soon discover that there are ~600 distros, some active, some no longer being developed for. "~600 distros? How is that a bad thing? There is so much choice!" you may be asking. Each of those distros use various exclusive file formats. Debian, Ubuntu, and the forks of them uses the .deb format, Slackware and the forks of it uses the .tgz format, and several other formats also exist. None of them are able to work in another distro that does not use the same file type, a .tgz won't run in Debian for example. If a file does not exist for your distro, you either have to compile from source, or convert the file type to what you want and hope nothing breaks. Documentation depends on how big the distro you picked is. If you use Ubuntu then that is great given it has a library of documentation with how big it is. But if you something that is barely used or is no longer worked on you have to hope documentation was written for it, on top of that for all distros you have to hope the documentation is well written.
You go online to a tech forum, subreddit, or anything you feel is useful. You look around for people who use linux and what do you see? People showing off terminal set ups that seem confusing. People showing off their E-dick with "oh btw I use Arch" or some other complex distro. Linux has several public images from what I have seen. Some include:
It is only used by neckbeards who live in 4chan, It is used by people with no life, It is used by hackers or tech masters, etc.
I personally know people who use Linux who act like normal people. But if all you are seeing are people showing off their E-dick on what complex terminal task they can do, doesn't that make you seam all Linux users are making up for something? As long as the most vocal part of Linux is the part that is stereotyped, people will stay away from it.
These are what I think are the four major reasons why people will not use Linux for their PC. I have other reasons, though they are smaller and shorter than the ones above.
No error feedback: You have to run an app through the terminal app to see what error it has, and that's assuming the message can be read.
No GUIs for basic things: Want to change keymaps? VPN settings? Got to use the terminal for that.
GNU/Linux confusion: I could go into an article for this, but there's a whole Wikipedia article on the issue you can look at if you really want to know about it.
Lack of knowledge of Linux: If you ask someone "What OS does your computer run?" You can get various answers. Some may be smart and say what Windows they are running, some may just say Windows and not what version. Some might not even know what an OS is and just say the brand of PC they own like HP or Dell. Many people do not know that Linux is a thing, and the few that do only really know Ubuntu and nothing else.
Could Linux become a mainstream OS for desktops in the future? Maybe. If solutions to the major problems can be found and more people learn about it, then there could be a chance. But for now Windows will be the mainstream OS however it have been going on a downwards trend, and Apple's OSX is slowly getting more users.