Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am a long time .NET developer and I have worked with Mono but I now want to start programming for Linux, what would be a good source to start native Linux development?

share|improve this question

migrated from May 18 '11 at 19:52

This question came from our site for professional and enthusiast programmers.

native Linux development => C/C++ – Darin Dimitrov May 18 '11 at 19:47
User space or kernel? – Oded May 18 '11 at 19:47
user space to start with, after I have built a few useless tools I will move on =) – Rikal May 18 '11 at 19:48
What do you expect to gain (besides pain ;-) ) by switching to native development? – Bas Bossink May 18 '11 at 19:54
What do you mean "native Linux development"? Are you talking about C++ programs that run on Linux, programs that directly interface with the OS rather than going through language-specific libraries, device drivers, ...? – David Thornley May 18 '11 at 20:10
up vote 12 down vote accepted

You can continue to use Mono on Linux, of course.

If you want to write good performing programs for the KDE environment then you use C++ and the Qt tools.

To write C for Gnome I'd recommend using Vala.

If you want to write your software faster but have it perform slower then use Python or Ruby. Both have libraries for GUI programming in Gnome or KDE. Both are very good, although personally I dislike untyped languages. If I accidentally pass a string instead of an integer I want to know about it right away.

Java on Linux is very mature and Eclipse is a wonderful IDE for Java.

share|improve this answer

I'm a big fan of Stevens' Advanced Programming in the UNIX Environment as an introduction to the Unix C APIs at all levels. The original was a true classic, and Addison Wesley has put a lot of work into releasing a new second edition after Stevens' death, co-authored by Stephen Rago, and updated to deal with more recent changes in both the standards and the implementations out there.

If you need help getting started in C itself, there are a lot of questions here that have looked for advice in that area, though Kernighan's and Ritchie's The C Programming Language remains a great, if not quite up-to-date introduction to the language.

Once you have the basic Unix programming idioms down, you can move on to Stevens' two volumes on Unix Network Programming, or look into one of the fine Unix GUI toolkits, or go in a different direction, depending on your tastes/needs.

share|improve this answer

The specifics are going to depend on the types of applications that you are interested in writing, but for getting up to speed on Linux programming in general I'd suggest looking at The Linux Programming Interface and Linux Systems Programming, both are excellent books that cover POSIX in general, as well as features specific to Linux or glibc.

There are a lot of language choices under Linux, and sticking with Mono and C# is certainly possible, but if you plan to get deep into Linux programming you should get familiar with C. Depending on your domain you might not need it all that often, but it's definitely the lingua franca of the Linux world.

share|improve this answer

You can use Mono on Linux as you're a .NET developer if you want something quick.

You can also use Gtk# to make GUIs, it's very mature, and being used in real applications, like Banshee.

You can also use C and Gtk+ or C++ and Gtkmm to make GUIs for GNOME.

And if you're developing for KDE, you can make GUIs using C++ and Qt.

And of course there's Java with SWT or Swing, and Python that can be used with a variety of widget toolkits like tk, wxWidgets, Gtk+, and Qt.

share|improve this answer

As previous posts mention, there are several ways to program in linux, and depending what do you want to achieve, its the tools you need.

Maybe you should mention, what kind of programming did you do before getting into linux (windowze, maybe ? ) Desktop, Web, ?

Then, you could start working in a equivalent tool in Linux.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.