Because macs offer UNIX environment which is great for Devs, but also a full-featured UI with lots of high-end commercial apps (and good audio engineering) which is not as easy to get in a Linux laptop. And, the support and ease of using the system is appealing compared to the more hands-on approach of maintaining a Linux distribution.
Plus they are quite dependable hardware overall, and lots of easy OS updates.
I have several Thinkpads running *BSD and they are great and all, but at the end of the day I gotta use Skype and the Office suite for communicating with clients so I default to working with macOS most of the time.
UNIX + great desktop support and apps + pkgsrc offers an unmatched experience depending on what you work on.
I spend 90% of my work hours developing on a Mac. I have reverse engineered dozens of Cocoa libraries to get my apps working, because of insufficient documentation. I have dug into the XNU source code to find out why things are happening.
Say what you will about Windows, but I don't have to spend hours debugging random out of memory reads causing kernel panics in the OpenGL drivers on that OS. (For example, calling texture2DMS in a vertex shader on anything other than the first row of a texture reads from random memory; still not fixed as far as I am aware.)
I do live in the terminal, and I couldn't be happier with Bash on Windows. I use the XFCE terminal connected to a local X server and it's the same experience I get on Linux.
Nowhere near the same. Last I checked, Microsoft kinda put it over in the corner, where it can be it's own little thing, but not a first class citizen of the system like UNIX is on macOS.
That isn't what the parent's claim was about though -- the claim was "first-class" citizen.
I'm well aware of homebrew and the like having used it myself; I still think the current situation is now better on Windows than macOS, which is bizarre.
Except that so many platforms just don't work well under Windows, and if you use languages like OCaml with OPAM, or other incredible tools like Elixir or Erlang, you can expect hiccups. You can get them working, but you have to do more heavy lifting [0]. In some cases it took the maintainers of major packages years to get them working properly on Windows because of its strange environment compared to most of the rest of the industry, and these tools are often still unstable. Which is why so many developers who choose to use Windows usually have a duel boot or VM into Linux, which is an extra layer of inconvenience a lot of the time.
I used to work on Windows only and had a VM, for 2 years this was my daily workflow. When I finally just switched to Mac, it was amazing how much more time I felt like I had during the day to spend on my real work, how fewer VM issues I had to deal with, and just enjoy working on the native OS.
Except we weren't talking about Windows -- we were talking about *NIX stuff, which implies the Windows Subsystem for Linux.
I won't claim it's fully there yet, but given how macOS is these days, it will be more stable very soon.
Ask the Go language team how they feel about all of the little breakages in various syscalls/apis that Apple introduced.
Ask graphics programmers how they feel about the lack of modern OpenGL.
Pretty soon Windows will be a far more compelling development platform than macOS (unless you have to do Apple development of course, but then there's always Visual Studio for remote development for some Mac/iOS things :-P).
> Except that so many platforms just don't work well under Windows, and if you use languages like OCaml with OPAM, or other incredible tools like Elixir or Erlang, you can expect hiccups.
I disagree. I listed several issues with XNU's implementation of POSIX above.
A large portion of the WSL complaints are around the lack of inotify. You know what other system doesn't have inotify either?
Another example is ptrace(): on XNU, it doesn't work; you have to use Mach instead. On the other hand, Microsoft went to the effort of actually making ptrace() work properly. This has actual user-visible ramifications: gdb works great in WSL, while it works not-so-great in current versions of macOS. strace works fine in WSL, while on Darwin you have to use the heavily underdocumented dtruss.
Syscalls are underdocumented in macOS, so Valgrind doesn't work well; it constantly breaks on OS updates. On the other hand, Valgrind works great on WSL as long as you compile from source. A lot of this is because Linux has a stable and documented syscall interface, unlike Darwin.
Well, I don't use Windows any more so I cannot speak from personal experience on the matter. But in my free time I experiment heavily with new platforms and languages, and as I'm working through support forums, freenode, blogs, there is a tremendous amount of noise from fellow experimenters trying to get something going on Windows [0]. Perhaps the really smart folks out there don't have this problem, but for the average joe blow developer who just wants to have some fun exploring technology, it is very obvious that things just go a lot more smoothly when installing and compiling and running various platforms on OSX compared to Windows. There is rarely any difference between the OSX and Linux steps to get all setup, while the Windows steps are often a non-trivial obstacle for the average developer. And many environments carry disclaimers about known issues on Windows that can affect operation. Even WSL often needs to be patched just to support a platform that works fine on OSX. Or we hear, "you can do this better in the next version of WSL..." sigh, that's not what most people want to deal with.
You are perhaps well above average and so these issues don't affect you. But that doesn't help everyone else who struggles in the Windows environment for things that prioritise Linux/OSX.
[0] Heck, even one of the principal Clojurescript developers doesn't even support Windows, he just asks for patches from Windows users who managed to figure out how to get something working. That is not an isolated attitude.
I cannot disagree with you enough. Last I saw, you cannot interact with the rest of the system from Windows bash. I can install Sublime Text on my Mac, and launch it from the terminal, for example. I can't do that with the Windows system.
It's actually entirely similar to the way BSD is grafted onto Mach in Darwin.
lxss.sys is a much better implementation of POSIX, honestly. In WSL I've never had to deal with incredibly broken stuff like ptrace(PT_CONTINUE) panicking the kernel from untrusted userspace with "TODO" messages (I wish I were making this up) or having the kernel close file descriptors sent via sendmsg() in flight if the sending end of the Unix socket is closed in blatant violation of POSIX.
Plus they are quite dependable hardware overall, and lots of easy OS updates.