I'd say I had worse wifi issues with Windows than Linux.
Yes, I'm fully aware how broken Windows' wifi implementation is. NetworkManager, however, tends to make the Windows equivalent look wonderful in comparison.
And yes, every operating system has problems. That's not my point. My point is that we (the free-software-loving community) can do better than the current state of NetworkManager. It's the one pain point that seems to be pervasive across GNU/Linux distributions, and pretending that "oh, every operating system's wireless stack is broken, so we shouldn't be worried" is delusional. Even if NetworkManager is "just as bad" as the others, why shouldn't we be striving to make something better?
Whatever the case, I know it's not the hardware; wpa_supplicant (the underlying software that allows NetworkManager to function) has (in my experience) generally worked much better than NetworkManager, and OpenBSD's networking stack is also pretty flawless in my experience. So it's something about NetworkManager specifically that needs to be fixed or replaced.
And note that my criticisms about networking are not about Linux as a whole; on the contrary. My criticisms are strictly about NetworkManager. You probably understand this already, but your comment seems to be phrased in defense of GNU/Linux as a whole as if I consider the failings of NetworkManager I've experienced to be the fault of the kernel or somesuch - which is very much not the case - so I figure it's worth clarifying just in case.
In essence the developers involved are attempting to encode every use case they can think of into the program logic, and anything outside of that gets met with a "why would you want to do that?!".
Have a new Cent7 install on a laptop at home.
I spent over an hour trying to get the wifi to simply connect to the network. Much of this was me trying to learn how to use the networkmanager syntax which is neigh-on-impossible to decipher. The help is useless, and apparently the syntax made a huge change from 0.9 to 1.0, and not knowing either means that 90% of the hits I found on Google were utterly and completely wrong and used deprecated flags.
I finally broke down and tried to use nmtui to solve my nmcli woes, but it only made things worse.
The installer was nice enough to create an ifcfg-<myssid>, but when I try to ifup that interface, the system complains there is no DEVICE for it. So I added a DEVICE= line corresponding to my wireless adapter (which nmcli sees), but then the system complains that my wireless device (WHICH NMCLI SEES!) does not exist.
I believe I have traced the problem to a bug report I found on RedHat's bug tracker -- I needed NetworkManager-Wireless installed in order for it to use my wireless adapter. Why lspci sees my adapter, the OS names it, the firmware is installed and up to date, and nmcli even sees the adapter as a wifi adapter, but then can't use it, is beyond me. nmcli wireless scans constantly failed (which is what led me to the bug report).. the bug report says it's fixed and provides better guidance that you need NetworkManager-Wireless installed as of <some version> but that's probably wrong, since I have the latest Cent7.1 (unless the bug report is REALLY recent).
Regardless, after adding the EPEL repo and installing the wireless-utils package which provides the iwlist, I was able to scan for wireless networks.
NetworkManager still was unable to scan, so I did a network restart hoping I could solve the issue without rebooting the whole box. Sadly, I lost my wired connection to the system at that point, so I'll have to wait until I get home to play with it some more.
Oh, and by the way -- even though my wired i/f is set to "ONBOOT=true", it did not, in fact, come up on boot because the cable was disconnected. After I connected the cable it took me 5+ mins to realize I had to restart the network service to get the connection to function, which is not the way it works pre-NetworkManager.
Suffice it to say, the software is massively, massively, massively, massively sub-par, and far less user-friendly than the good 'ol "editing text files" way. I suspect I am soon to have many more similar headaches as I delve into the world of systemd head first (another thing I've been avoiding).
Fortunately, we get to do really exciting things now that NetworkManager has taken over. I can CD to things, and set properties and methods, and all kinds of shit that makes me feel like I'm using Fujitsu's deplorable ALOM:
nmcli> goto ipv4
nmcli ipv4> describe
Available properties: method, dns, dns-search, addresses, routes, ignore-auto-routes, ignore-auto-dns, dhcp-client-id, dhcp-send-hostname, dhcp-hostname, never-default, may-fail
Property name? method
nmcli ipv4> set method auto
nmcli> back
see how fun and intuitive it is?
If someone figures out a way to port Android's network management system (I'm not sure exactly what it is off the top of my head, but I know it uses wpa_supplicant and that it's not NetworkManager) to general-purpose GNU/Linux distros, that would be a godsend.
The more common issue with passwords is that it incessantly prompts for the user's password or for the wireless network passphrase due to some strange inability to talk to whatever keyring daemon is in use (and thus an inability to retrieve network passwords). I usually work around that by disabling the keyring (either globally or simply preventing NetworkManager from using it).
EDIT Also it doesn't actually need the password seeing as I never type it in and my wifi works fine (with multiple networks every day).
1. Makes fixed wireless connections less reliable. I plugged an LTE modem into a server for a backup link, and network mangler set it as a default route and munged up resolv.conf. My mistake for not removing it when I installed the machine, but that's hardly an endorsement.
2. Makes complex config out of reach. On my laptop, I'd like wlan0/eth0 to be bridged by default so that I can easily switch existing connections to a wired connection by plugging in. But I'm not going to fight network mangler just to get this feature.
3. Furthermore lots of times I'll want to setup an ad-hoc config on the wired interface (say, configuring a new router). For which it's easier to kill -9 the mangler and setup manually, especially if I want to keep my Internet connection.
4. GUI is the preferred way to config/interact with it, which is completely un-unix. It's one of the few things I have to do manually when reinstalling a machine.
I played with Arch a while back, and wicd felt much simpler and more straightforward. Network Mangler feels like a hack someone came up with to setup a simple wifi connection, which then got adopted into a bigger role than it can handle.