С чего начать изучать разработку приложений под Linux?
Здравствуйте! Интересует изучение Linux (Arch), любой доступной литературы по теме устройства Unix/Linux, api, ядра; разработка приложений под данную систему. Решил осуществить побег с окон, ибо в этой ОС чувствовать себя свободным невозможно; устал от этой системы. Мой уровень знаний на данный момент: могу установить чистый arch и накатить на него KDE, собственно сейчас на нем и сижу. Понимание, зачем нужны некоторые файлы/конфиги есть, но в целом чувствую себя здесь не очень уверенно. Владею C,C++,js. Хочу научиться разрабатывать приложения под Linux, разобраться нормально в системе. Планирую создать аудио редактор и заниматься программированием микроконтроллеров, чем до этого занимался в окнах.
Поддержу предложение qt. Популярный фремйворк, и знания js для использования qml пригодятся. Для написания графического интерфейса всё равно нужно будет что-то изучать.
Заодно изучать системы сборки (например, cmake) и пакетирования (rpm/deb), получать знания по работе с аудиоустройствами (в идеале нужно будет уметь alsa/jack/pulseaudio/pipewire и позволять пользователю выбирать из них) и многое другое. И постепенно привыкать к особенностям системы и написания приложения под неё.
Everything_is_not_so_bad, А почему бы и нет. Аудиоредактор с функциями автоматизации, midi интерфейсом. На мк, например, можно сделать простой контроллер с потенциометрами/кнопками, или если прям запарится, запилить АЦП и тд и тп - аля микшер. А дальше общение по миди и контроль интерфейса с мк. Хоть и мк для меня просто отдельное хобби.
Если ты хочешь программировать под Linux то тебе нужно знать функции ядра Linux.
Это так называемые syscalls. Системные вызовы. Работа с файлами. С сокетами.
С объектами мультизадачности (mutex). Языки могут быть любые но принципы
будут примерно одинаковые.
+Надо определиться с доменной областью. Вряд-ли вы будете писать системный софт.
Системщиков вообще мало и пишут они очень узко. Скорее всего это будет что-то прикладное
поэтому надо искать прикладные задачи и искать типичный профиль такой прикладной задачи.
FastCGI приложение например там или ETL процесс или какие-то сетевые штуки. Ищите
практические задачи. Иначе сам по себе вопрос потеряет смысл.
знать функции ядра Linux.
Это так называемые syscalls.
?
Я сам написал десяток кроссплатформенных программ, в основном работающих под Линукс, ни в какие системные вызовы не погружаясь. Один-единственный раз пришлось выйти за рамки готового фреймворка - чтобы принудительно переключать язык ввода на русский при запуске программы. И все...
mayton2019, автор - малек, ершится и не понимает, что сам вопрос криво задан.
Ибо просто не дорос до понимания хотя бы половины ответа.
При этом чувствует, что "пропустил небесный инструктаж" - но наивно надеется, что тут можно просто почитать какую-нибудь методичку и сразу начать разбираться, что к чему.
А вы ему предлагаете лезть в глубины системы, до которых прикладнику вполне можно за всю жизнь ни разу не добраться. Слишком сложно и ненужно одновременно.
Adamos, О, вот такого человека я и ожидал здесь увидеть. Я прекрасно знаю во что я лезу и что мне надо, ни за какой волшебной методичкой сюда не шел. Хотя с кривизной вопроса согласен, вообще задал его из чистого любопытства, что хабр из себя представляет на практике. К слову, если считаете себя умнее всех, тогда чего же вы тут дискутируете под таким вопросом?
gpdefine, так не каждый же малек тупо демонстрирует обидку. Примерно каждый второй. А каждый другой таки читает внимательнее, что ему написали, и чему-то, да учится.
Adamos, А зачем мне обижаться, вы ж меня не знаете. Просто не приятно, что вы написали. А то что здесь люди отвечали действительно полезно в плане выбора направления развития, в том числе и в будущем. Покопаться глубоко в системе на каком-то этапе изучения мне будет действительно интересно. А пока я это все записываю и откладываю до момента, пока не придет время.
Нужно определиться зачем вы планируете изучить детально систему - вы собираетесь заняться системным программированием?
ИЛи прикладным? Если прикладным, то для GUI приложений просто осваиваете любой фреймворк, типа qt, который работает в Линукс и пишете.
Библиотеки для С++ есть и там и там.
Собственно сейчас рассматриваю вариант с qt, изучаю, делаю редактор. В дальнейшем и системным программированием тоже хочу заняться, оболочку мб свою сделаю. Я вообще из таких типов людей - пока не разберешься, зачем каждый файл нужен, как каждый модуль работает, не успокоишься (как шило в одном месте - вот надо и все). В первый раз устанавливал xubuntu - все лагало, были проблемы с драйверами; сейчас уже практически ничего из этого нет, разбираться в этом и делать успехи приносит удовольствие.
Своя оболочка в линуксе дело неблагодарное. Сколько их уже есть, куча народу их пишет и дописывает, и все равно нет более-менее fitmany
Плюс в отличие от винды, в линуксе нет единой графической подсистемы, чтобы отрисовывать все. Поэтому разработка своей графической оболочки это гораздо более сложный и длинный путь чем в Windows