Linux Development, is it ready for mainstream?

Linux has made leaps and bounds when it comes to end user interface over the last 5 years. There are tens ( hundreds? ) of thousands of developers dedicating free time to writing fantastic software for Linux, and there is no doubt in my mind that the popularity of the Linux desktop is rapidly increasing. But what is the state of Linux for the average modern developer? Are the tools decent and easy to use? Can the average UI developer just pick up something and write an app that anyone can use? In short, my experiences would have me say no, and this is why.

Historically, Linux package management has been a nightmare, possibly even the main reason why it has not been desktop ready until 4 or 5 years ago. End users don't like to compile from source, and even intelligent users get baffled by build dependency issues. Over the last few years, this has slowly changed, with amazing software systems(?) like zypper, yum and apt, and some really great abstraction layers like packagekit which may allow every Linux OS to share a single package manager ( if the user so wishes ). New services like Launchpad and SUSE Build Service allow developers to get their projects onto those platforms, in the available repositories, and while these tools are necessities, the step before getting your applications onto these services is still a fierce battle.

Having been a commercial developer for several years ( first at a large vehicle simulation company in South Africa, and now at a game studio in the Netherlands ), i am somewhat used to different tool chains, platforms, build systems and source control. So far i am yet to come across a Linux tool chain that is simple. The horrors of Objective-C and XCode for iPhone development are relatively tame by comparison to cmake, qmake, automoc, makefiles, and actually getting any IDE to work for the task at hand. Being still relatively young, i have always used an IDE where i can, and it seems that in the Linux world, this is a huge disadvantage. I don't know the ins and outs of VI or Emacs, and don't particularly want to ( since this is Free Software, and that's my choice ). But having to spend hours searching online and posting to forums just to contribute to a project or get your application building is ridiculous. Core stuff like building a project shouldn't be a struggle. I'm willing to accept bugs in code that i can run, but how can i, or any other free software enthusiast who hasn't been a Linux dev for 5 years, contribute if the tool chains are so complicated. For a while i thought i was alone in this, but it seems there are a large number of people who have only managed to get stuff building with personal assistance from an experienced developer.

Some real world examples might be necessary. 

With development for Windows or XBox 360 ( as a community game developer or a licensed developer ), one could just fire up a free copy of Visual C# 2008, and build an application in a few minutes. While .NET seems to be hated in the open source world, it's pretty decent technology and a real breeze to develop with. While i really dislike C# as a language, it's fantastic for a quick GUI app or an XNA Game Studio ( also free ) prototype or even an XBox Live Arcade Community game. There have been many occasions where i have wanted to see some code of how something was done, and this was just a matter of downloading their source, open it up in Visual Studio and building. No fighting with dependencies or tool chains.

On the Apple front, if i were to develop an iPhone application, i would be able to download the SDK which contains XCode and all the libraries. While the tool chain and XCode are far less user friendly than Microsoft's, it is still relatively simple to have a GUI or 3D application up and running in a matter of minutes. All of the available examples and open source applications provided just work, again like with Windows, opening and building in XCode.

When it comes down to end developer, the Linux tool chains are horrible by comparison, and i might hazard a guess as to why. If most of the developers working on it have had more than 2 years experience on it and more than half of them don't actually use an IDE, but rather text based tools, it is easy to see why the tool chain doesn't improve rapidly. While i have an amazing amount of respect for people who do this development, it's still very important to allow new younger developers to have easy access to the tool chain. While some IDE's have their strengths - KDevelop being pretty decent for KDE apps and ( imho ) not much else, CodeBlocks being great C++ with really poor UI support, and Monodevelop being fantastic for C# although it cashes way too often - none of them match the simplicity that you find in commercial products.

I feel that more needs to be done to make development more accessible, so that more applications can be produced by new developers and so that companies who want to build cross platform software don't fear the Linux tool chains. I would suggest this to be the next hurdle to getting Linux as a globally accepted OS. Since the interfaces are looking amazing these days ( KDE 4.2 RC is really pretty and functional!!! ), this might be one of the last things holding it back.


  1. Well, I must agree with almost everything you just blogged. I'm not new to Linux, but since I bought my eeePC I started to play thinking seriously on a future migration from Windows as my main development platform.
    Sadly, even while my main IDE is Eclipse-based (and clossplatform) it was difficult to find good replacements for other critical tools, specially on the graphic area -if Gimp does not suits you-.
    Does not matters how mad FLOSS fans could get reading this: the lack of commercial software is becoming a real problem for a professional looking to make the jump.

    I totally absolutely agree that a free powerful and modern OS is a crucial need on this era, but still nobody could convince me why the commercial aspect of its applications must be avoided like the pest.

    As Michael Mace wrote: A platform that is technically flawed but has a good business model will always beat a platform that is elegant but has a poor business model.

  2. I'm interested in how you feel about Gimp... does it not suit you? My relationship with gimp had a very rocky start, and initially i wouldn't relinquish photoshop for my digital art. My wife started doing some minor web dev and art on gimp and got used to it very quickly to the point where she didn't miss photoshop at all. After a few months i got used to it and really love it now ( even though i still hate the multi window thing ). The only way in which i feel it underperforms against photoshop is in the path tool, although i use that for the speech bubbles in my comic and once i was used to it, i grew to love it.

  3. Well, is *still* not my case, because I only have it on my eeePC, which is not a good test platform for this kind of app. But I see the problem to come, because I'm not a Photoshop user and Gimp feels too much like it.

    I work with objects instead of layers, that is: any geometry or text or graph you draw is automatically converted to an object that can be freely manipulated. Even masks can be moved, resized, rotated, etc.

    The first time I fired up Gimp I get perplex because I was unable to find the selection tool and every time I created a layer it asked me about the size. Since I draw sketches directly on the photocomposition software, I'm on risk to loose productivity this way.

    There are other tools, like Pixel or Krita, even there is Photopaint 9 for Linux, but again, if you seek to become a pro on any of those tools you face a problem:

    Pixel is shareware, no problem paying for it, but its maintained for only one dev, and since Linux community didn't like shareware, there is no certainty of continuity.
    Krita could be acceptable, but I don't know if its mature enough, I still must check it.
    Photopaint 9, is a dead software, unmaintained and already outdated.

    The problem as I see it is the fact that even when there are a lot of software projects out there, for a pro the choices are really small (one or two, most of the time), because you are not going to expend time and money training on a software that could be dead tomorrow.

  4. Would Inkscape suit your purposes? I find Inkscape pretty incredible but it does have heavy processor requirements. My eee never handled it that well. And its FOSS.

  5. Yes, I have Inkspace on my Windows installation and its awesome how well it manages PDF files. Also, there is a project (I don't remember the name) to port CorelDraw to Linux, but I marginally work on vectors, I'm an image-manipulation guy and what I seek is something similar to Fireworks/Photopaint, that uses objects instead of layers :)

  6. i can't say i'm familiar with those apps or even an image editor concept that lies outside of gimp/ps or inkscape/illustrator. you've peaked my interest, i should look into this.

  7. I've tested Krita and I'm impressed on how fast this project is developing. But again, looks like a Photoshop clone.