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.