When comparing GNU/Linux vs None/All, the Slant community recommends GNU/Linux for most people. In the question“What is the most versatile operating system to learn how to program?” GNU/Linux is ranked 1st while None/All is ranked 3rd.
Ranked in these QuestionsQuestion Ranking
Pro Access to really powerful terminals
Pro Most software is open source
Pro Lots of development tools available
Pro Most likely also your deployment target
Makes testing while developing easier. According to a September 2014 study by W3 Techs, *nix based servers are used on over 2/3 of websites.
Pro Package managers
You can install any library or package that you need (gcc, php, node) with just a couple of commands in the terminal.
Pro Most Linux distributions are free
Pro Large percentage of Linux users are developers
Pro A wide variety of distributions available
With a lot of variety, one can use the distribution that fits the type of work best because of the many choices that are given, instead of just one.
Pro Follows the UNIX philosophy
The UNIX philosophy: 'Write programs that do one thing and do it well'. Since Linux itself follows this philosophy then it's very easy to start creating scripts and programs.
Pro Familiarity with Linux is often required from a developer
Nice, developer-friendly environment.
GNU/Linux handles desktop sessions differently than Windows. Users may customize their own sessions; in fact, a single user may use different desktop environments for different login sessions.
Pro Choose any type of desktop environment (or none)
Most Linux distributions support a range of desktop environments, be it plain old X, a tiling window manager or a fully fledged mammoth desktop like GNOME or KDE.
Pro Hardly ever crashes
Pro Works great on older hardware
7-10-year-old Dell laptops can run Unix or Unix-like OSes very well, where Windows would grind/drag/vomit.
Pro No telemetry, unlike Windows
Pro Lower chance of data loss
Linux has very few viruses. So there's almost no chance of getting infected by a virus. That's why you don't have to worry about getting infected by a virus and thus losing your data including your important programming files.
Pro Potentially larger user base
You are not constrained to a subset of the market, thereby the opportunities to get help should be greater when only constrained by language rather than language & OS
Pro Can give you experience across OSes
Developing in a language that supports many OSes gives you potentially more room to grow, by giving you an excuse to try other OSes once you become comfortable in the basics of a language.
Pro There are lots of popular languages available that are pretty much OS independent
Pro Online tools
If you are keen on just diving right into coding, there are many tools that run in your browser that allow you to get going without needing to setup anything locally. For example, codepen and coding.
Pro You can focus on learning
Developing at this higher level allows you to focus on solving problems and learning the language rather than learning an unfamiliar OS.
Con Issues with drivers if your hardware is not officially supported
Con Steep learning curve
Con Maintenance is time-consuming
Con Too much customization
To get features on par with OS X, you need to research packages, install them and configure them. Even then, it may not be as good as OS X.
Con A wide variety of distributions available
With a lot of variety, one cannot deploy to a single system and has to prepare for a bundle of distributions, instead of just one.
Con Less and worse professional software is developed, due to the low user base
Depending on what type of work you are doing, you may find Linux software lacking compared to their Win/Mac counterparts.
For example in game development, tools, like Unreal Engine or Unity, usually lack in quality or novelty compared with Windows. Having crashes or bugs that aren't fixed for a while.
Con Low user base to develop to
Con UI look and feel may be non native.
If your goal is to develop something that looks like it fits in, this can be tricky with some cross platform languages (Java being a notable example, though there are libraries that can help this).
Con You may still need to deal with idiosyncrasies
Most cross platform environments can't abstract away all the OS specific idiosyncrasies. For example, starting Java applications as a service is something Java cannot do out of the box. So you are left to come up with your own solution for that. NPM's scripts are not inherently cross platform, so if you use them while developing with Node.js, you may need to find your own ways to make them cross platform.
Con Write once - test everywhere
The idea behind cross-platform languages looks nice at the first glance, but in reality in the very best case boils down to an infamous "write once - test everywhere" pattern.
Con Very limited language options
Con Learning how to test can be costly
Learning how to test one's code can be more complicated, depending upon the language because you may need to test certain aspects of your application on different OSes. This means more setup time as well.