Расскажите Программисту C++ Все О Linux

Некоторое время назад я работал с Red Hat Linux. И вот, после долгого перерыва, мне нужно снова вернуться в мир пингвинов, но столько воды утекло! Может быть, можно собрать все это здесь, как FAQ для программиста на C++, но новичка в Linux? Идти? Общие вопросы.

1. Каковы различия между основными популярными дистрибутивами Linux? > Основное отличие — система пакетов.

(deb, rpm и т. д.) А также для каких архитектур выпущен дистрибутив.

(sl_bug) > Основные отличия: Менеджер пакетов, набор ПО, настройки по умолчанию.

(Евгений_Ширяев) > (помимо Евгения_Ширяева) они иногда отличаются еще и способом настройки служб, запускающихся при загрузке.

Примером является /etc/conf.d/net в Gentoo и /etc/network/interfaces в Ubuntu. Также в каждом дистрибутиве есть свой способ указания списка служб, запускаемых при загрузке.

Иногда они отличаются тем, как организованы сами файлы конфигурации (один файл или группа файлов и макрос, который их собирает).

(экстремальный) > В пакетной системе, в установщике, в системных скриптах.

В версиях ПО и наборе ПО по умолчанию.

(Арсени) 2. Почему системы BSD предпочтительнее систем Linux? > Кто тебе это сказал? Вам нужно выбирать в соответствии с вашими потребностями.

(sl_bug) > Лично я не вижу существенных преимуществ систем BSD перед системами Linux. (Евгений_Ширяев) > Святой вопрос.

Выбор системы зависит от поставленной задачи.

Однако в BSD сетевой стек более продуман и есть такие полезные функции, как accf_http и accf_data. В Linux я пока не встречал замены, кроме TCP_DEFER, которая работает немного по-другому.

(экстремальный) 3. Существуют ли полностью бесплатные дистрибутивы Linux? > Да (sl_bug) > Да и их большинство.

(Евгений_Ширяев) > Я бы сказал, что абсолютное большинство свободно распространяемых дистрибутивов есть.

(экстремальный) > Да, большинство.

Дебиан или Убунту.

Или Федора.

Или Генту.

(Арсени) 4. Почему дистрибутив Linux вообще платный, ведь он построен на основе открытого ПО и бесплатного ядра Linux? > Обычно платна поддержка, а не раздача (sl_bug) > Оплата идет не за сам дистрибутив, а за его поддержку (обновления, техподдержку и т.д.).

(Евгений_Ширяев) > Очень важный момент для разработчика: В платном дистрибутиве SUSE SLES пакеты с исходными кодами также недоступны без подписки (src.rpm = основные исходники + обновления дистрибутива, патчи, спецификации, конфиги).

Пересобрать пакет можно только из оригинального (основного) tar.gz (в лучшем случае из src.rpm opensuse, с перерисовкой зависимостей и прочими прелестями).

В этом случае, естественно, рушится вся система обновлений.

И, возможно, совместимость с другими пакетами системы, в том числе с этим же пакетом, поставленным из бинарников.

Скорее всего, аналогичная ситуация с RedHat и другими платными дистрибутивами.

(qмакс) > (опять же в дополнение к Евгению_Ширяеву) Тут надо помнить, что «открытый код» и «бесплатность» — это все-таки разные понятия.

Обычно лицензии OpenSource не запрещают продажу продуктов, выпущенных под ними, или их использование.

(экстремальный) > Техническая поддержка, коробка, печать.

Или включены фирменные компоненты, удалив которые мы получаем полностью лицензионную версию.

(Арсени) > У вас есть возможность заплатить за поддержку.

Если вам нужен RHEL без поддержки, используйте CentOS. В остальном есть Ubuntu (которая бесплатна, но поддержка стала возможной), OpenSUSE, Fedora (тут вообще только бесплатный вариант)).

(kost_bebix) 5. Если мне нужно установить Linux на множество машин, существует ли лицензия, которая позволит мне один раз купить дистрибутив и установить его на столько машин, сколько я захочу? Или опять же, существует ли полностью бесплатный Linux? > GNU/GPL (sl_bug) > Да.

(Евгений_Ширяев) > Его даже не обязательно покупать, а скачать бесплатно и установить на любое количество машин.

Но если вас интересует поддержка, то действительно лучше купить.

(экстремальный) > По условиям лицензий Debian и Ubuntu вы можете установить их на неограниченное количество ПК.

А вот в России придется покупать коробочную версию.

Теоретически достаточно одной коробки на компанию.

(inkvisitor68sl) > Да, все они (среди популярных): Fedora, Ubuntu, Linux Mint, OpenSUSE, Mandriva, CentOS, Debian, Slackware, Arch, Gentoo бесплатны.

(kost_bebix) 6. Есть ли достойные дистрибутивы «от отечественного производителя»? > Возможен ALT Linux (sl_bug) > На этот вопрос нельзя ответить объективно.

Лично на мой взгляд нет. Однако если вы посмотрите на «наши» дистрибутивы, обратите внимание на ALT Linux. (Евгений_Ширяев) > да.

ИнфраЛинукс, например.

Но в большинстве случаев они платные.

(точно достойно) (inkvizitor68sl) 7. Совместимы ли дистрибутивы Linux на уровне двоичных исполняемых файлов? Можно ли взять файл из Ubuntu и запустить его на Fedora, на FreeBSD? > возможно с 32-битной Ubuntu на 32-битную Fedora (sl_bug) > Дистрибутивы Linux да.

Бинарные файлы Linux можно запускать на FreeBSD, но не напрямую.

(Евгений_Ширяев) > Обычно да.

Трудности возникают, когда бинарник использует какие-то подключаемые библиотеки, а исходная система (из которой находится бинарник) и целевая система (где запускается бинарник) имеют разные версии этих библиотек, в которых могут, например, разные функции называться по-другому или вообще отсутствовать.

Но статически собранные двоичные файлы вполне переносимы.

Примеры: Opera, плагин Adobe Flash для браузеров, Skype и т. д. Во FreeBSD совместимость с бинарниками Linux достигается за счет эмуляции для них среды Linux, для чего, насколько я помню, используются обычные библиотеки Linux из Fedora плюс специальный модуль в ядре, позволяющий это сделать.

(экстремальный) > Linux - да, если у вас есть необходимые Shared-библиотеки.

Linux > > существует двоичная совместимость с BSD. Но в большинстве случаев просто взять пакет и запустить его не получится, подробностей я не знаю.

(Арсени) > большинство двоичных файлов будут работать на любом дистрибутиве.

Некоторые программы распространяются в таком виде (фаерфокс с сайта, например).

Или корзина.

(inkvisitor68sl) > Редко.

Это смотря какой файл.

Есть утилита Alien, которая делает .

rpm из .

deb-пакетов, но это костыль.

Если вы пишете на C++, почитайте про «Opensuse Build Service» — это своего рода место, где вы можете удобно собрать свой проект сразу для всех нужных вам систем.

(kost_bebix) 8. Как обеспечить максимальную совместимость между дистрибутивами Linux на уровне исходного кода при написании программ на C++? Какие библиотеки мне следует использовать? > Широко используется, например Qt. Открытый источник.

Включено в основные репозитории.

(Арсени) > Qt (ГуРу) > Практически любой, но лично я тепло отношусь к Qt, который есть и в Windows, и в MacOS. А так — Гугл всегда найдет что-то абстрактное из раздачи для каждой конкретной задачи.

(kost_bebix) > О да.

И, собственно, о главном — об отличиях написания для Windows. Все просто — вы написали программу для Windows, которая использовала какие-то библиотеки — вы запихнули эти библиотеки прямо в сборку программы и собрали один большой кусок.

В Linux делается иначе — пишешь программу, а потом создаешь .

deb/.

rpm, в котором описываются библиотеки и их версии.

Выгода: — в Linux, если у меня уже установлена эта библиотека, мне ничего скачивать не нужно - если в библиотеках есть уязвимости, они обновляются и все, кто ими пользовался, защищены Проблемы: - если дистрибутив решит использовать новую версию (ветку) библиотеки, все может сломаться.

Поэтому нужно резать (если нужна максимальная кросс-раздача) (kost_bebix) 9. Допустим, требуется какое-то нестандартное решение, например какой-то специальный вызов ядра.

Как узнать, поддерживает ли данная система этот вызов? > Ээкспериментально или спросив в списках рассылки, на форумах, у разработчиков, _читая документацию_. (Арсени) > Если есть ядро, значит есть и функция.

Дальше нужно смотреть на конкретику.

(kost_bebix) 10. Есть ли хорошие альтернативы gcc для разработчика C++? Всегда ли gcc включен в дистрибутив? > 10. icc, всегда (sl_bug) > Нет, не всегда.

Я не знаю бесплатных альтернатив.

(Арсени) 11. Какую IDE и какой оконный менеджер (или как он называется?) вы используете для программирования на C++? Какой отладчик? > vim, gdb (sl_bug) > IDE — Eclipse, похоже, популярен (по словам друга, программиста на C++ и Java, он не претендует на истину в последней инстанции); отладчик — gdb. (экстремальный) > gdb — это отладчик.

для него есть много разных оберток.

Например, для программирования с использованием инструментария GUI Qt я использую QtCreator. В общем, существует много разных IDE. Google. (Арсени) > Если человек задаст вопрос про IDE отдельно про отладчик, то вряд ли он получит что-то кроме vim+gdb. Под IDE мы обычно подразумеваем среду, в которой уже настроена трассировка с помощью горячих клавиш, просмотр отладочной информации и т.п.

В этом случае я бы порекомендовал Qt Creator, KDevelop, Code::Blocks, Eclipse или NetBeans. (Местный) > Eclipse не очень удобен для отладки и тормозит. NetBeans работает медленно.

KDevelop - это мусор.

Qt Creator более-менее (можно использовать).

Достойной альтернативы VS для Linux не существует :( Особенно, когда дело касается простоты отладки.

(GooRoo) > KDE4.3.1 + QtCreator — хорошее решение.

Я использую Emacs и редко пишу на C++.

(kost_bebix) 12. Какие еще инструменты C++ используются? Я слышал о valgrind как о хорошем детекторе утечек памяти.

> IDE — KDevelop, Eclipse, есть отладчик gdb. Дальше тоже нужно смотреть конкретно на то, «что нужно».

(kost_bebix) 13. Какая русская кодировка используется по умолчанию в системах Linux? Поддерживает ли ядро Linux UNICODE? На каком уровне? > utf-8 (sl_bug) > UTF-8 сегодня используется по умолчанию.

Вы можете почти легко сделать любую кодировку по умолчанию, даже CP866. (экстремальный) 14. Какое самое доступное решение для запуска Linux на машине с Windows? А как насчет портативной Ubuntu? Кто-нибудь им пользуется, возможно ли провести полноценную разработку? > вмваре? (sl_bug) > Лучшее решение — запустить Linux на виртуальной машине.

Я рекомендую использовать для этого VirtualBox. > Вам уже рекомендовали VMWare и VirtualBox. Последний бесплатный (экстремальный) > LiveCD) и вообще - виртуалбокс.

Wubi\portable Портативная версия Ubuntu — не лучший вариант. (inkvisitor68sl) > Что значит запустить Linux? Самое простое решение — удалить Windows и установить Ubuntu (kost_bebix) :-) Вопросы для пользователей-программистов C++.

а1. Какой дистрибутив используете лично вы и почему выбрали именно его? > Дебиан, привычка.

Я начал им пользоваться очень давно и не хочу его менять.

Пробовал gentoo (круто, но все из исходников занимает много времени), centos/fedora (не люблю rpm) (sl_bug) > Убунту.

Меньше проблем с настройкой дистрибутива, хороший менеджер пакетов, часто обновляется.

Fedora, OpenSUSE и большинство производных Ubuntu также хороши (для пользователя).

(Евгений_Ширяев) > Дебиан, Убунту.

Последний работает из коробки практически со всем железом, первый — это просто хороший, незагруженный дистрибутив, который я устанавливаю на сервера и на котором разворачиваю только необходимый набор пакетов.

(Арсени) > Мандрива Линукс.

Так сложилось исторически :) Некоторые считают это раздачей для домохозяек и в чем-то они правы :) (GooRoo) > Убунту.

Просто из-за его популярности всё разрабатывается (и так должно быть) и пилится в первую очередь для него.

(kost_bebix) а2. Какие инструменты вы используете для разработки (если используете)? > vim, gcc, gdb (sl_bug) > Qt + Qt Creator, потому что лучше ничего нет, а до vim с emacs я еще не дорос.

(ГуРу) > Я бы, наверное, запустил его с помощью QtCreator, если бы не подсел на Emax. (kost_bebix) а3. Что вам нравится и что не нравится в Linux как программисту на C++? > Не нравится: модель межпроцедурной оптимизации в gcc (не ускоряет), стандартные оптимизации -О2 (приходится добавлять свои, или -О3), каскадные сообщения об ошибках в boost и подобных библиотеках.

(Местный) > Linux — лучшая операционная система, над которой я работал, но она совершенно не подходит для разработки на C++ по сравнению с Windows. Хотя если хотите.

;) (GooRoo) Если не сложно, перед ответом поставьте номер вопроса, на который отвечаете.

И не пережаривайте (я знаю, что хочу невозможного :).

Теги: #linux #BSD #C++ #Разработка сайтов

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.