Because a develper can keep GUI code or whatever out of the way. Because a developer can get tools for free, without having to justify the purchase to managers, directors, etc etc. Because a huge range of any given tool is available, from compilers to interpreters to text editors to testing frameworks. Because Linux distros aren't full of bad design decisions, like carriage return/linefeed end-of-line markers, drive letters, and magic device names that can shoot you in the foot very easily. Because developers can generally look at the source code of everything to figure out if the developer made a mistake or the underlying code has a mistake. Because Linux distros, unlike Microsoft, generally don't believe that they know what developers want to do/need to do, and don't prevent certain actions. Because developing on Windows puts you one patch Tuesday from your product being a DLL in Windows. Because freedom. Because good taste. Because Windwos isn't very customizable. Because Microsoft does not document the real Windows system call interface/ABI.
Apple and Microsoft have opinions about what I should be doing with my computer that are based on their desire to make a profit from my activity. The developer cultures which have grown up around Mac OS and Windows have generally followed this profit motive. I often find myself blocked when I'm trying to do something out of the ordinary, or being nickeled-and-dimed over trivial bits of additional software which shouldn't be such a big deal.<p>Linux has its rough edges, but it never intentionally gets in my way, and the free-software culture which supports it is full of so many generous people offering bits of knowledge and utility that my biggest problem is usually that of wading through the sea of resources trying to understand which ones are most applicable to my situation. I can always get the job done, and if I don't like the way things work I can always change them, straight down to the kernel if I ever cared that much.