From Windows development to Linux development

About 6 months ago, I was given the opportunity to start working in Python and Django. I’m always excited to learn new things, so I jumped at the chance.

Since our Python projects are deployed on Linux servers, my choices were to:

– Stay on Windows and use Vagrant
– Dual boot into Linux and do Python development there

I chose the latter, for multiple reasons:

– Gave me a chance to improve my linux-fu
– Closer to what is actually run in a production environment
– No magic. Setting up everything myself gives me a chance to ‘go through the pain’

8 months later, I’m happy to say I made the right choice*.

Some things I first noticed when working in Linux:

Python (and by extension, Linux) doesn’t have the DLL hell that we encounter on Windows. They have their own special hell, and have created software to work around it (virtualenv and its much needed companion, virtualenvwrapper)

Pypi and PyPy are two separate things.

Working in Linux is a whole lot less about polished GUI software and a whole lot more about using the neat little utilities the operating system provides together to produce the same outcome. It’s the difference between having a ready-made lego deathstar, and building your own.

Linux machines are not more stable than Windows machines. They are not less stable than Windows machines. They are differently stable. Windows machines (at least now) have good tooling around errors (Event Viewer) and a standard that says where errors should go (think of it as a hierarchy in your application), whereas with linux machines, it could be in a few places. /var/opt/log or /var/log/ or somewhere else entirely. When a sound device crashes in Windows, it doesn’t normally take down the whole desktop any more; but in Xubuntu 13.04, launching a media player will take down my entire desktop manager (xfce); as will launching Pidgin (but only sometimes).

That having been said, I can easily update Xubuntu without restarting my PC, where any little change on my Windows machine requires 5 reboots.

The year of the Linux desktop isn’t here yet. I’ve run a few Desktop Window managers, and I have yet to find one that is stable enough to withstand day-to-day use.

Things I’ve noticed:

Crossover does not work with Outlook 365. Still. I’m a beta tester for their products under the hopes it may one day work for Ubuntu, but no dice as of yet. It works just fine for ‘normal’ Outlook, but once you include the Cloud, things get crazy.

Vim is mode driven. Depending on whether you’re in Visual mode or Insert mode, stuff works differently, and you have to constantly look down to see what mode you’re in.

Byobu and the mercurial_keyring extension do not always play nicely together. I’ve left a session on, gone home, come back the next day, and tried to pull only to have it not work with a gnomeKeyring.IO error.

The command line isn’t as much of a pain in the ass as I thought it was when I used Windows daily. The tooling around the command line (I use Bash) is such that once you get the hang of it, it enables you to work more quickly. I think Microsoft would do us all a favor if they just adopted cygwin as a replacement for their command shell.

X-Forwarding (the act of working with a graphical window from another PC on your PC) is problematic to set up. I tried for an entire day (when I probably should have been working) to set it up, and never got it to work. I eventually set up a dual boot Windows 8 / Ubuntu setup on my home PC (which I later regretted).

VNC is a terrible alternative to what Windows users have built in (Remote Desktop). If I remote into a computer with VNC, that computer is ‘unlocked’. Anyone can sit down and start using it while I’m remoted into it. That’s a Bad Thing in an office where co-workers like to pants each other.

Printing is hit or miss. Nothing will have changed, it just doesn’t work sometimes. I will say that in the case of the corporate network copier/printers we have in the office, it mostly worked the first time.

Finding answers to problems in a linux system is 80% some ill-begotten forum or mailing list, and 20% AskUbuntu. I wish more results were on Ask Ubuntu.

Playing video or audio is now a struggle. I had to download 3 different programs just to find one that would play a .WAV file from my email. I’m sure there was just some dependency conflict somewhere, but I’ll be damned if I knew how to find it.

To sum it all up: Those things that you’ve expected to ‘just work’ on a Windows box no longer ‘just work’ on a Linux box. In return for this pain, you get (what turns out to be) a very cool platform for software development, as I’ll go into in Part 2.

2 thoughts on “From Windows development to Linux development”

  1. As a long-time Linux user, I can’t say I’ve ever experienced the stability issues you have; I’ve used many Desktop/Window Managers (Gnome2, XFCE, Awesome, E17, even Unity) over a variety of distros, and none of them ever crashed on me. I’ve used Linux on Netbooks, Laptops, Desktops and Servers of all sizes, and they all managed to run it just fine. Maybe your box has some unsupported hardware with flaky drivers?
    In the same way, I’ve never had issues using X-Forwarding – `ssh -X somewhere` and you should be set to go, what exactly did you need to configure?

    With audio, the only thing you’ll normally have to do is install the nonfree codecs, a mp3 codec isn’t installed by default because there’s no FOSS codec availabe. In my case, I have to install additional drivers and software to support my firewire audio interface, but a standard sound card should work out of the box. What can be annoying though is that pulseaudio might set the HDMI audio output as default if you don’t disable it…

    In general, your issues seem very strange to me – I know a lot of Linux users and even encouraged and helped some of my less technologically literate friends to make the switch, so I have experience with different Linux systems on a variety of hardware. None of these people ever experienced a Window Manager Crash as far as I know; the only remotely similar thing I’m aware of was an old Laptop that would sometimes just shut itself down half a minute after resuming from a suspend, probably because of faulty ram. So I think your comment about DWMs not being ready for everyday use may be specific to your machine and configuration – a lot of people (myself included) do use them every day and don’t have any problems with this.

  2. Hey George,
    You should seriouly consider developing using a VM. I’ve used both Vmware Player and Virtual box and they are really good.
    Go with Virtual box since its open source. Setting up Ubuntu on it is really a breeze. I’ve set up both Ubuntu, Lubuntu and elementary OS on it and it works fine.
    I mostly use the Ubuntu for developing but I’m switching to Lubuntu because its speedier/snappy as compared to big brother Ubuntu.

    The good thing about using a VM is that your favourite windows stuff(I like playing my ‘developer-mode’ music on windows) are just a click away.

    Anyway enjoy yourself. I’m new to programming in general, but I kinda of jumped straight to Ubuntu/Python?django without lingering too much on windows.

    you can drop me a line: komuw05 [AT] dont_be_evil’s_email_service [DOT] com

Leave a Reply