Skip to content
Print

Is Windows Really the Best Development OS?

8
Oct
2007

I realize that the stated topic is a classic example of flame-bait, but it’s still a question which deserves some serious consideration.  Is Windows really the best OS for a developer to use?  And when I say developer, I mean someone like me who does a nice assortment of Java, Ruby, C++, etc.  Obviously, someone who does .NET is probably using Windows (see my previous post), and someone writing Objective-C applications will nine-times-out-of-ten use MacOS X.

Java’s a bet less OS specific though.  By it’s very nature, it’s cross-platform.  Not only the language itself (like C++ is cross-platform), but the compiled binaries.  I don’t have to worry about having a Mac handy to compile a snapshot of an application for my boss, I can just send him a JAR I assembled on my laptop running Vista.  In this respect, I can consider myself completely liberated from OS-level concerns.

Tools are also not really an issue.  After all, the three best Java development tools (Eclipse, NetBeans and IntelliJ, in that order) are all based on Java.  I don’t have to worry about learning a new application to do development, or concern myself with rebuilding all my settings in an unfamiliar environment.  I can setup a fresh machine running any OS with Eclipse and my favorite formatting and syntax highlighting configuration in under an hour (download time included).  In fact, I’ve availed myself of this fact many times.

So if tools and language aren’t a concern, what is?  Well, it turns out that tools really are worth examining, and I mean deeper than face-value IDE.  For example, MacOS X supports the fantastic editor TextMate.  jEdit is a worthy substitute which runs on any platform, but it’s just not as polished as TextMate.  Also worthy of consideration, and indeed a far larger issue for me, is the non-existence of a decent shell on Windows.  PowerShell isn’t bad, but I’m sorry, it’s no bash.  I had to make some (reasonably) generic changes to a set of config files on my server the other day.  Since I was on Linux, all it took was a simple for loop, a couple greps piped to sed and then back into the files, and I was home free.  If I was on Windows, it would have taken me at least ten minutes of tedious open-file, copy/paste/reshuffle, save, close, open next file, etc.  In short, Linux saved me quite a bit of time out of my day, just by having a superior shell.  Mac offers the same advantage, though its version of the GNU utils isn’t as up-to-date as my Gentoo Linux server.

Another thing to consider is space-efficiency.  I have a reasonably high-resolution screen, but even with such a dazzlingly large workspace, I hate to waste even a single 1px line.  This includes things like fonts and how legibly they render at low sizes.  I save literally inches of space in Eclipse by setting the editor font size to 10pt, and that’s just a single application.  Scaling the issue up to an entire WS just compounds both the benefits and the consequences.  In both of these areas, Windows (especially Vista) seems to excel beyond the competition.  I hate to say it, but I think Windows got something right on which Mac and Gnome (Linux) are missing the mark.  Just consider the following screenshots:

vista

gnome

Notice how even though the Vista window title bars are a bit larger, the fonts are a shade smaller.  In Gnome, I have to leave the font-size that high, because the window titles become unreadable and ugly at any lower level.  Also notice how the menu height on Gnome is significantly larger than Vista.  Even more importantly, the tab size within Eclipse is almost a third larger than the corresponding tab in Windows (due to the larger font size).  The toolbar is taller, and the fonts are just a shade larger for the same size and DPI (Consolas vs Monospace).  All in all, there are almost 20-30 pixels of height wasted in Gnome vs Windows.  Granted, Mac doesn’t waste quite as much space, but in my experience, most things are just a shade less compact than on Windows.

The larger issue I have with Mac is extreme mouse-oriented nature.  This makes it great for beginners, but even with Quicksilver, I still find myself reaching for the mouse more often than I’d like.  Gnome isn’t bad for this, having most of the same keyboard features as Windows (especially with Deskbar), but it’s just not as slick as Vista with the QuickSearch.  And yes, I do know the shortcuts for both Mac and Linux as well as I do for Windows, as I’ve been using both platforms for years.  In fact, my first computer was a Mac, and that was all I used for a long time.

So all in all, the question is: how do the pros and cons match up?  I would love to have the real shell, real gcc and real permissions system that Linux offers, but I would hate to give up the font renderer and slick power-user features of Windows.  I could go with a Mac, but the keyboard is important.  And on top of that, so many cross-platform applications just aren’t up to snuff on Mac, failing to do things “the Mac way”.

So with great disappointment, I’m afraid I’ll have to stick with Windows for the time being.  However, as my friend Lowell points out, I can just as easily build myself a second machine which runs Linux primarily.  This way, I can get all of the benefits of Linux as a primary machine, but still retaining the power and application support of Windows.  Maybe this is the best way to go.  Hopefully this will work out as the best balance overall.

Comments

  1. I’ve been asking myself this over and over again lately. I’ve used Macs on and off since the Fat Mac came out, but my home PC happened to always run Windows. The current PC is getting a little long in the tooth; meanwhile I’m now on a MacBook Pro for work, and getting much more proficient in the niceties of OS X and QuickSilver. My main development environment is Eclipse, my main language is Ruby, my main framework is Rails.

    I *do* have bash on Windows; in fact, I have a whole Cygwin setup, and that’s actually my main Ruby installation (Eclipse lets you set your interpreter path). Ruby, OTOH, is significantly slower on Windows than on Mac, for reasons nobody fully understands, which makes TDD a pain. And Cygwin, while incredibly useful, has some basic, deep-seated flaws in its DLL loading which guarantee that, every so often, you will have to rebuild your Cygwin environment.

    This is also my home computer, so I have a handful of PC-only apps that I’ve grown to rely on - MyLifeOrganized, 40tude Dialog, FeedDemon, and, yes, Outlook - which have no Mac equivalents that leave me satisfied.

    While ClearType vs. OS X sub-pixel rendering vs. Java 6 Swing is a whole mini-flame-war unto itself (pixel grid! Designer’s intent! Pixel grid! Designer’s intent!) I happen to prefer ClearType; pure or not, I like it for *me*, especially in an IDE. Mixed bold, italic and plaintext fonts look significantly better in ClearType (or thus SWT) than they do in Swing.

    My planned solution: Use the money from my latest contract to buy myself a Mac Pro 8-core. Nobody needs eight cores, so it’s perfect. Throw in a boatload of memory. Load up Parallels or VM Fusion and sticky them to a few cores for my can’t-do-without Windows XP apps, maybe Ubuntu in another virtual machine, sticky the JVM over there, and still have a few cores for native Mac stuff at full speed - and, with Leopard, resolution independence, thus solving your font problem and possibly giving nicer sub-pixel rendering.

    (Yeah, I know, stickying an application to a CPU isn’t the most efficient use of resources. And I probably won’t *actually* do it. Think of it as mental CPU allocation.)

    If you are going to stick with Windows, though, check out Launchy (http://www.launchy.net/); it’s a QuickSilver-style launcher app that’s far better than any other Windows one I’ve seen. Not nearly as powerful as QS, of course, but it does the basics.

    As for Gnome, isn’t it skinnable? You could probably spend a little time learning how to skin apps, and make some more compact default toolbars, etc.

    Jay Levitt Monday, October 8, 2007 at 4:04 am
  2. Let me see if I understood this correctly; the *nix based OSs have better shells, better tools for working with text and files, and the exact same GUI development environment (for Java, at least). They let you work efficiently, and let you give the work to the machine to do instead of manually (and tediously) doing it yourself. You’ve given an unqualified shout-out to the “slick power-user features” of Windows in the same paragraph as acknowledging that it doesn’t have the powerful features that Linux offers.

    And yet, after all that, you’re sticking with Windows because you like the fonts better? I think I might be missing something, here …

    C Monday, October 8, 2007 at 6:45 am
  3. System fonts are configured to be huge by default on Ubuntu; the GNOME default is tiny but readable (bitmap?) fonts. Every time I see the tiny fonts think “old Linux,” not new friendly Linux. (I guess that’s the idea.) I’ve set my system font size somewhere in between, and also turned on the freetype auto-hinter instead of the frozen “native” hinter that tries to look like Windows rendering (but it screws up half the alphabet in Georgia, etc.). Yeah fonts are still a mess on Linux.

    As for keyboard shortcuts, I say they are far better in Mac OS X than anywhere else. Do you really find the Ctrl key to be convenient? My pinkies are about to break after two years of all-day Ubuntu, but I’m going to be on a Mac all day soon enough. Oh my Leopard is almost here and then we will have Java 6. Golly.

    n8han Monday, October 8, 2007 at 8:01 am
  4. @ C:

    Ok, I’ll admit I have a hard time explaining it. I usually find myself more productive on Windows than Linux or Mac. There are the (surprisingly numerous) occasions when I find myself in need of a decent shell, but those aren’t enough to outweigh the general drag in my productivity. I’ve put it down as a font issue since that’s biggest difference I can think of, but it could very well be something else. As I said, I doubt that it’s just familiarity since I use all three operating systems on a regular basis and in fact did all my development on Linux for a very long time.

    @n8han

    Yeah, for most things the Ctrl key is a pain. However, think about things like word selection (Ctrl+Shift SELECT on Windows/Linux). This isn’t particularly well supported on Mac, though a lot of applications (like Eclipse) emulate it with an unnatural and ultimately useless key sequence (I forget, I think it’s something like Cmd+Opt+Shift SELECT). Also, let’s not forget that Mac has a lack of global “Finder key” (ala Meta+E). Granted, Linux lacks this too and it’s a feature of dubious usefulness to most people, but I require it’s services constantly.

    There are pros and cons on both sides (way too many cons for my tastes). I just wish one of them would really step forward and be the OS I need it to be.

    Daniel Spiewak Monday, October 8, 2007 at 10:05 am
  5. Swap your control and capslock keys.

    Will Monday, October 8, 2007 at 7:38 pm
  6. > PowerShell isn’t bad, but I’m sorry, it’s no bash

    Nope, its much more powerful. If you really think it would take siginificantly longer in PowerShell then you should perhaps learn PowerShell.

    Paul Tuesday, October 9, 2007 at 1:56 am
  7. I can’t use Windows because I’m always in the need of a good terminal plus that I’m cheap and don’t like to pay the Microsoft tax.

    I own a few macs, my development machine is a MacBook Pro (for Java) and it’s all nice and dandy except I have to wait forever to get Java 6.

    So, I think the best development machine is one with Linux on it. SUN supports Linux from the beginning and you have a nice terminal and all the IDEs you need.

    The only drawback of Linux is the hardware support (especially display) and fonts. There’s no comparison between the Windows or OSX fonts and font quality and the Linux fonts. And since we do sit all day long writing and reading stuff, that’s why I bought a Mac for example (and I assume that’s why the author selected Windows).

    Once Linux gets its act together and starts using better fonts I’ll switch forever.

    Regarding software, it’s a non-issue for me as everything I use exists under some form or another on any platform (the IDEs are crossplatform, and you have browsers and mail clients anywhere…).

    Emilian Bold Tuesday, October 9, 2007 at 4:15 am
  8. I’ve actually noticed what you’ve written about myself. For the last three releases of Ubuntu, I’ve tried to make it my primary dev box; it already serves as my primary for everything else. I’m a Java developer who’s most familiar with Eclipse but not remiss to using Netbeans either. Anyway, even in the Gutsy betas, I just find the Java development experience better under WinXP. One, the font rendering in Linux is still a turnoff (but much better than it was a scant two years ago…it’s getting there (using mlind’s (et al) patches)). The spacing is too big under gtk which to me feels ‘romper room-ish’. I’ll agree it seems very odd to swear off an OS for something as ‘insignificant’ as look-n-feel issues, but I guess I’m just one of the odd ones which desire a functional+aesthetically pleasing (to me) dev environment.

    Ubuntu also seems slower than XP on my particular machine, an AMD 64 3400 with 2GB RAM. Fedora feels faster than XP, but getting my wireless to work has been an adventure on Fedora in the past. I’ve tweaked it using the standard guides, but there is still a definite lag compared to XP on the same machine. Anyway, good article.

    Ron Tuesday, October 9, 2007 at 6:25 am
  9. I have to say, you don’t pose a very compelling argument. I can understand the font issue, which is by all means legitimate. However, you seem to not understand the capabilities of Quicksilver when it comes to defining System wide hotkeys. They are called triggers.

    For example, here is a screenshot of the global finder key you claimed was lacking (note that I use Pathfinder, although finder works exactly the same). It’s really quite customizable.

    http://myskitch.com/scott/triggers-20071009-065353/

    Scott Fleckenstein Tuesday, October 9, 2007 at 6:58 am
  10. You should check out Active State’s Komodo Edit, it’s free, runs on Mac, Linux, and Windows. Supports a ton of languages, and all of the typical IDE features, and you can optimize the layout however you’d like -> http://www.activestate.com/Products/komodo_edit/

    Matthew Minix Tuesday, October 9, 2007 at 7:20 am
  11. @Paul

    Yeah, PowerShell is pretty powerful (hence the name). I’ve seen some amazing stuff done with it. Part of its problem though is it’s less of a shell and more of an interactive programming environment (sort of like IRB and company). That’s not exactly what I want when I do shell-level operations.

    Oh, did I mention it’s also inanely slow?

    @Scott

    Yeah, I don’t think it’s a compelling argument either, that’s why every so often I talk myself into switching full-time to Linux again. Every time, I end up back on Windows for my own sanity. I hate it, but it’s the way it is. As for Mac… I don’t have too much experience with QuickSilver, which is probably why I missed the triggers function. I’ll have to look into this more closely when choosing my next platform.

    Daniel Spiewak Tuesday, October 9, 2007 at 10:40 am
  12. I suppose it depends on what you are coding for. My code is meant for large (> 16 processor) machines that don’t run Windows at all, so there is little value in me learning how to accomplish tasks in a Windows-only environment like PowerShell when the same bash script will run everywhere — or at worst require minor changes to make it run on Kornshell or Bourne shell. Also, it is much easier to write in *nix and port to Windows than the other way around, even in “platform-neutral” environments like Java. Here is my list of why I *don’t* do Windows:

    1) No virtual desktops makes organizing things very painful and encourages the use of gigantic all-in-one MDI apps like Eclipse and (shudder) VS.Net. I can just as quickly get it done with multiple CLI and Emacs windows.

    2) The Windows filesystem does nothing like the *nix filesystems. It breaks case-sensitivity (which means Java code tested only on Windows will break on *nix). You can’t easily tell who can read or write to a file from the command line. You can’t delete a file that is “in use” and replace it with another (the main reason most Windows updates require reboots).

    3) The system itself is hostile to the user in so many ways. Stealth updates, updates that break things, the seemingly arbitrary decisions about what requires Administrator rights and what doesn’t (e.g. deleting Temporary Internet Files from Explorer on XP Home requires Admin!?), WGA, UCE on Vista, random popup notifications from the taskbar, crappy 3rd-party anti-virus stuff. I just want a computer that does what I ask and no more.

    4) Most of the things *I* use everyday are a bear to use in Windows unless you have committed to Cygwin, in which case you may as well use Linux: LaTeX, bash, ksh, rsync, ssh, gcc/g++/g77, Emacs, Perl, awk, sed, grep, gnuplot, Lisp.

    5) LF vs CRLF. It would be nice if every file transfer application by default transferred in binary and Windows applications just figured out the line terminators on their own.

    Perhaps if I was being paid serious money to write for desktop boxes I would have more reason to return to the Windows platform.

    KL Tuesday, October 9, 2007 at 12:16 pm
  13. Just a sidebar, Mac’s filesystem (HFS+) also breaks case sensitivity, though it is claimed in places that it doesn’t (since it is *nix). What’s worse, is it actually breaks case sensitivity in ways which catch you off guard and can totally ruin your day (think SVN). As far as filesystems go, Linux is really the only OS I would consider. This is even further enhanced by the sheer elegance of Linux’s filesystem…er, system. Big point in favor of Linux there.

    Daniel Spiewak Tuesday, October 9, 2007 at 12:35 pm
  14. If you use Windows Server 2003 R2 or Vista, you have UNIX Services for Windows, which gives you bash. Also, JPSoft’s 4NT is a great shell.

    mp Tuesday, October 9, 2007 at 2:33 pm
  15. If you install the free SUA for Windows (which is better than cygwin), it gives you the option to activate Windows NTFS support case-sensitive filenames. I wish people researched things before they say Windows doesn’t support case-sensitive files or doesn’t support bash+GNU utilities.

    There are TONS of virtual desktop addons for Windows, such as ObjectSpace. Check out http://www.shellcity.net/ sometime.

    You can disable all the “stealth” update services. There are utilties floating around (do a google search) to perminately disable WUA etc.

    There are tons of text editors, like UltraEdit or Notepad++, which support LF, CR, CRLF formats.

    When people say they don’t like something about Windows wrt lacking features, it typically means they haven’t looked for the utilities or addons — Windows has more utilities and addons than any other OS (heck, I still use some of the NT 4.0 resource kit utilties in Vista). This is also why it is hack-prone, but for dev, it is still the best OS.

    SUA Tuesday, October 9, 2007 at 2:53 pm
  16. @SUA:

    Does the case-sensitive filename support in NTFS allow two files of different case to both exist, e.g. both “File1″ and “file1″ in the same directory? If the directory contains “file1″, will fopen(”File1″, “r”) fail? If the answer to either is no, then NTFS (and also HFS+ as noted above) does not behave as *nix filesystems do and Java code tested only on Windows/Mac can break on *nix. (Similarly, Java code tested only on *nix will break on Windows since it allows filenames containing :, ?, , *, etc.)

    Are the virtual desktop applications free, and if so do they actually work? (MS’s VDM powertoy breaks many apps including Office 97.)

    If the stealth update is easily preventable, why did it make news all over the Net last week when people who had explicitly selected no updates got updated anyway?

    Most importantly though: why should anyone who already uses particular features from *nix that work very well out of the box switch to Windows where they will have to find and/or purchase a bunch of different utilities to get the same work done?

    KL Tuesday, October 9, 2007 at 3:24 pm
  17. None of my apps have toolbars anymore. The primary UI design goal of a toolbar is to provide quicker mouse-type access to things available in the menu, so I memorize the keyboard shortcuts instead. (Whether that be like Alt+R-H-U for unsharp-mask in the Gimp, or a Ctrl+X style shortcut. And I swap Ctrl/Caps-lock, because it’s very silly down in the corner.)

    I actually think that if you have to have a toolbar to make mice fast, it means that your mouse-based menu system is broken. I am apparently in a very small minority….

    sapphirecat Friday, October 12, 2007 at 9:53 am
  18. I actually think that if you have to have a toolbar to make mice fast, it means that your mouse-based menu system is broken. I am apparently in a very small minority….

    Eh, I don’t know about that. The new Office 2007 design is entirely toolbar based, without menus of any kind. Most people (myself included) find it a vast improvement. Of course, the keyboard shortcuts still work, but you no longer have to go hunting through dozens of menus to find that one function you can’t remember how to use. Menus are inherently list-based, whereas toolbars can be much more logically organized (as the ribbon shows).

    Of course, I would never do something like the ribbon in an IDE. Thinking about it, removing the toolbars is probably a good idea and something I might do. I’ll have to play around with my Eclipse command configuration (thinks like annotations can’t be created by default with a keyboard shortcut), but it shouldn’t be too bad.

    Daniel Spiewak Friday, October 12, 2007 at 11:32 am
  19. boy, nothing about setting cursor focus to mouse or setting window behavior to not raise on a click so you can overlap windows in type in a lower window without it raising.

    also nothing about Debian based ‘apt-get’ to install/update software.

    I couldn’t live without those things.

    - greg strockbine

    Greg Strockbine Friday, October 12, 2007 at 2:40 pm
  20. The experience I made is that sometimes not the OS, but the tools it provides are important. Also, the customer is an important player in the question: Which OS to use? (escpecially if you need to do the help desk stuff beside development)

    I have to work with Windows, having the GNU Unix Utilities installed. The development happens within Eclipse as well as UltraEdit (and its damn fast performance on “Searching in Files …”).

    Some pople I’m in touch swear on virtualization. Of course, this can be an alternative if you got a state of the art machine with enough processing, a bunch of memory and a monitor big enough to handle the running VMs in paralell. Now put this into a notebook and you’re happy.

    Alex Haselsberger Sunday, March 2, 2008 at 1:41 pm
  21. I’ve only been able to be productive on Windows when I customized the hell out of my context menus and using a bunch of 3rd party apps for shortcuts and such (Launchy, etc).

    In defending Windows, XP and lower were just plain garbage to develop on. The one workspace limit really got to me and was a major pain to deal with. Thankfully, Deskwin exists which lets you use multiple workspaces on XP. Vista probably doesn’t have this problem, but I haven’t tried.

    In regards to fonts, I think OS X takes the cake, and Vista comes in second. Linux’ font support has never really been its winning card, but if you hack around, you *can* get your fonts the way you want. For example, you can install msttcorefonts which will let you use ‘real’ Windows fonts on Linux, instead of the (crappy) alternatives. Fonts are nearly 10x smoother and more sleek with this on.

    Actually on an LCD w/ anti-aliasing turned up, I’d say Linux fonts are no longer much of an issue.

    I prefer Linux for developing because I feel that’s what it’s made for. All the tools are there, and if not, I can get them in 2 minutes (literally) using apt-get. I’m no longer searching Google or installing apps from CDs, and I don’t rely on 100 third party apps for productivity. Memory is handled better in Linux so I can have 8 desktops with a game running in one, my chat/music stuff running in another, countless Firefox windows open and 2-3 workspaces just for my development tools and editors.

    Integration between the tools and the ability to piece-together applications to create a “new app” is a necessity to me. I know you can use Windows’ terrible Batch script, but commandline on Windows is worthless. The whole “every app can do 100 things” idea in Windows sucks. In Linux, 1 app can only the thing it’s meant to do, and it does it particularly well. (The only exception is probably Aptitude, which lets you play Minesweeper :)

    Due to the nature of open source, there are _countless_ productivity and development tools, plugins and patches written by different people, for different people. There are Compiz plugins that help you concentrate, for instance, and desktop plugins that will smartly organize your windows, group them, tab them, start them on their own layer, etc. Not to mention apps like Devilspie which gives you complete control over your desktop.

    There, that was the word. Control! On Linux I feel in control. I did too in Windows, but it wasn’t the same. Windows is like a horse. You can control it fairly well and it’s predictable, but not as much as, say, a manual transmission car (Linux), which is more work, but doesn’t offer any surprises.

    It’s a deep sense of control. The small things I guess.. the fact that I can resize individual icons on my desktop, no worries about spyware/viruses/etc, the fact that if I can’t do something one way, Linux offers 100 other ways to do it, the fact that I can use the commandline to do some VERY powerful processing (sed and awk for instance). Working remotely is also superior on Linux, and so is having multiple users on the same machine, and the system is secure by nature.

    Jake Lewis Wednesday, July 9, 2008 at 6:10 am
  22. If you want BASH on windows, just install Cygwin!

    SteveHiggins Monday, July 14, 2008 at 9:26 am
  23. yes, okay, you can get Bash by installing Cygwin,
    Now what about ‘apt-get’? That’s the killer Debian
    Linux command that makes Linux the best platform
    for software development.

    Greg Strockbine Monday, July 14, 2008 at 9:51 am
  24. I very rarely use apt-get, since a lot of the stuff I do either doesn’t install properly through apt (think: Eclipse, Tomcat, Ant, Maven2, etc) or doesn’t have all of the nice version options (think: Java 6uN). On the flip side, installing apps and systems by hand on Linux is far easier and more reliable than on Windows.

    Daniel Spiewak Monday, July 14, 2008 at 10:04 am
  25. Alternatively you can also solve this problem the way I did… look at the third screenshot down: some of my changes work on all platforms, others are specific to Mac OS, but all of them are isolated inside a plugin.

    http://blog.laurentm.com/2008/07/making-swt-look-more-native-on-mac-os/

    Laurent Mihalkovic Sunday, July 20, 2008 at 12:42 pm

Post a Comment

Comments are automatically formatted. Markup are either stripped or will cause large blocks of text to be eaten, depending on the phase of the moon. Code snippets are allowed, but formatting will be normalized (so don't bother indenting).

Please note that first-time commenters are moderated, so don't panic if your comment doesn't appear immediately.

*
*