Если вы играете с ядром, вы должны использовать C. Есть несколько книг, таких как Essential Linux Device Drivers, которые дают вам основы структур, где запускать ваш код и т. Д.
В общем, многие серверы написаны на C, а иногда и на C ++. Популярные библиотеки включают Glib, libevent, boost (для C ++).
Вы можете делать все из командной строки в любом редакторе - здесь нет явного выигрыша, выбирайте то, что вам нравится.
Чтобы по-настоящему вникнуть в системное программирование linux, я советую C и x86 assembly.
Для приложений Linux поддерживает огромное количество языков, python, C++, fortran, perl и т.д., так что выбирайте, какой из них вы хотите использовать.
Ваш вопрос довольно широкий. «Нативные приложения, которых нет в Linux» охватывает такие вещи, как офисные пакеты, которые я не считаю системным программированием. Я бы сосредоточился на чем-то одном (скажем, на драйверах устройств) за раз. По этому поводу существует множество существующих вопросов, в том числе Книга по программированию Linux , Какая среда IDE подойдет для разработки драйверов ядра Linux , Существуют ли рекомендуемые руководства по написанию драйверов для Gnu / Linux? и Ubuntu Linux, какие языки программирования мне следует изучать? .
Чтобы изучить C89, я бы определенно углубился в Язык программирования C (2-е издание) .
Nano, безусловно, мой любимый редактор. Ви тоже мила. Я не нашел времени, чтобы изучить его, но они оба могут помочь вам в программировании. Как только дело доходит до сложных ошибок в коде, монтируйте диск SSH, а затем открывайте файлы удаленно с помощью любимой вами программы с графическим интерфейсом.