I realise I am discussing this with someone thoroughly converted to Linux, but I have to maybe offer my viewpoint at least:
- The shell. A great shell is central for developers and science/engineering types. Windows cmd.exe is absolutely horrible. Microsoft tried to one-up the UNIX shell people with PowerShell, but it sucks and only appeals to the ultra-Microsoft types. Most of the Java ecosystem is designed for shell use. You should be using the shell for your primary build with a tool like Gradle or SBT (Maven is the dominant tool but it is not as good). You should be using the shell for git. You should use the shell for browsing files. Also Matlab/Octave/R/Python/Ruby work all are designed to be run in shells. Macs do have the same high quality shells that Linux does, but Windows is terrible for shell use.
I like the Linux shell, it's pretty nifty indeed, but I'd much rather not need to use it when I'm just monkeying around finding files and moving a few around and so on. I definitely don't ever want to have to touch it to do anything mundane like change any settings for something or install something.
- Repos: A large base of software is available through the repo system which just makes installation much simpler. None of the headaches associated with Mac/Windows installers.
I have not once ever encountered any trouble whatsoever installing Windows software, so I'm not really sure what you mean. I just double click ... click a few "Nexts" and it's done. The rare times it doesn't work are when Windows tries to do something like Linux, ie. Windows update. That frequently barfs with obscure error codes.
- Clean and hyper customizable: None of the crap that Apple/Microsoft and various peripheral vendors want to put on your system. Linux is ideal if you like a lean, clean, elegant system. The GUI is minimal and that's great.
Clean I like; customisable I don't. Why is that? Because I like stuff to be right straight away. My Windows desktop has a single customisation: a magnified mouse. The reason is that I don't like to feel uncomfortable when I use another system; if it's all at defaults, I don't need to adjust anything to feel right at home.
I'm not sure what you mean by "ugly desktops"?
I mean the decoration and widgetry surrounding the window manager really. Two things I detest about Linux desktops:
1. Resizing window borders appear to be 1 pixel thick. The mouse flickers in a terribly ungainly fashion when attempting to hover over a border or corner. It just feels utterly rubbish. I do a vastly better job of it myself just in my game code. Why they aren't able to get this right beggars belief.
2. The systray widget spacing and the widgets themselves; the multiple desktop widget especially. I don't quite know how they manage to uglify this but it seems as if they aren't aware of how to lay out UI elements so they don't just look like a mess.
3. Flickering, mysteriously untactile mouse cursor. Not sure quite how but it always feels like it's lagging and accelerates in just
the wrong way. All desktops I've tried.
4. Don't get me started on Unity.
4a. Actually I'll start on Unity. If anyone ever suggests putting the menu back in the top of the screen again, hang them by the foreskin until they are sorry. Rant over.
4b. Actually resume rant. Scrollbars. WTF. After your foreskin ordeal I will roast what remains of your genitals with a small candle for a number of hours.
5. The Windows start bar with a quick launch section is probably the most useful piece of desktop functionality I've used in all OSes, ever. The one in Win7 is actually brilliant now you can drag the tasks to rearrange, and stack them. Quick preview is useless though, as is pinning.
If you need to resize an image or convert from one format to another, a Windows user would use a point-and-click app. A Linux user would just use a command line utility, which is far simpler and batchable if you can think that way.
Not "a Windows user", just "an ordinary user". Like me. I do commandline and batching... but I prefer not to.
BTW, I'm a fan of Canonical's Unity as it minimizes the point-and-click GUI elements, which are probably the worst part of desktop Linux. I want to use a shell window, IDE, or web browser, and I want the rest of the computer to disappear.
Then for the sake of all things sensible why does the window manager not simply have a widget on the windows that does that instead of forcing everything to??