Grabduck

Почему гику стоит переходить на Linux

:

Вот уже четвертый год я являюсь счастливым пользователем ОС Linux. Должен сказать, что до этого, начиная примерно с 1996 года, я был сначала просто пользователем, а потом и убежденным сторонником продуктов Microsoft. Я очень долгое время работал с их ОС, от DOS 6.22 до Windows XP/2003 Server. В сторону Linux я тогда смотрел со стойким недоверием. Но, признаюсь, вникать не хотел, а поверхностно Windows выглядела сильнее. Как говорил мой начальник, «не любил я все эти оккультные вещи с демонами и прочим». В силу специфики работы через мои руки прошли десятки, а то и сотни Windows-машин. Так что все, что я буду хаять тут, выстрадано на опыте :) Скажу также, что стандартные аргументы о безопасности и стабильности в моем случае не особо срабатывали. Умеючи администрировать Windows, можно добиться вполне приемлемой стабильности и безопасности. Windows падала у меня за 10 лет считанные разы. Да, конечно бывали BSODы, но тоже не сильно часто (kernel panic — линкусового аналога BSOD — на своих машинах, правда, не видел ни разу). Заражений вирусами на домашней машине я вспомнить вообще не могу. На работе, как и все, попали под Blaster. Но в целом, все было не так плохо, как об этом говорили.

На закате моей эпохи Windows я работал .Net программистом. Тогда я уже прочитал «Running Linux» и еще какую-то книгу по общей архитектуре Unix-систем. Они потрясли мое мировоззрение :) Я увидел на сколько стройнее и правильнее можно делать вещи. Увидел на сколько корявыми и костылистыми являются некоторые решения Microsoft. В общем, морально я уже был готов. Но в 2005 году Mono все еще было неработоспособной штукой. Помнится, я даже качал с сайта проекта LiveCD с Mono Develop. Но среда рухнула с грохотом при попытке изменить размер какого-то фрейма. Такое средство разработки меня не устраивало. С Linux пришлось отложить до лучших времен. А времена настали, когда я поменял работу, предав .Net в пользу Java. Уж тут то привязок к операционной системе было по минимуму. Так что сам Бог велел. К тому же у меня дома появился отдельный ноутбук, на котором я мог безболезненно для остального человечества экспериментировать. За месяц я настроил до устраивающего меня состояния Kubuntu 6.10. С тех пор я все сильнее раздражался с каждым разом, когда мне приходилось общаться с Windows XP на компьютере жены.

Итак, не холивара ради, а пользы для, посмотрим, что же получает IT-специалист от использования Linux?

Управление установленными программами

На Windows у меня была 30-гигабайтная папка «D:\Distribs». Софт в ней устаревал с пугающей скоростью. И большая часть оттуда вообще никогда не запускалась, а лежала на всякий случай. После перехода, я смело ее грохнул, а про проблему поиска и обновления софта забыл напрочь. Практически в каждом дистрибутиве вы найдете какой-нибудь менеджер пакетов. В моем случае это был apt. Система репозиториев с ПО просто великолепна. Вам достаточно узнать имя пакета, который нужен, и, скорее всего, он уже есть в репозитории вашего дистрибутива. После выполнения одной команды все, что необходимо, будет установлено и сконфигурированно. С подтягиванием всех зависимостей, справочными файлами и настройками GUI при необходимости. Вам не придется общаться с многошаговым инсталлятором, в котором все равно подавляющее большинство людей просто давят «Дальше». Установленное таким образом приложение автоматически обновится, когда нужно. А удалить программу можно также просто, одной командой, без всего этого ужаса со специальными деинсталляторами, мусором в реестре и куче других мест по системе. Windows, конечно, тоже позволяет обновлять саму себя. В случае критических уязвимостей она даже делает это довольно шустро. На сколько я знаю, есть даже способ обновлять кое-какой сторонний софт, но этим пользуются уже доли процентов пользователей. Здесь же вы получаете обновления не только системы, но и всего, что установлено у вас на машине. Если в каком-нибудь приложении вдруг найдется серьезная уязвимость, в течении дней или даже часов, вам предложат его обновить. В случае же с Windows, вам придется самостоятельно обновлять какой-нибудь Acrobat Reader, через дырку в котором работают десятки червей. В лучшем случае, программа сама умеет проситься в интернет на предмет обновиться.

Структура файловой системы

В Windows меня бесили диски. C:\ D:\ и прочие смайлики в начале пути, кажущиеся такими естественными для привычного Windows пользователя, на взгляд человека, видевшего альтернативу, являются настоящим бредом! В Linux вы получаете «единую» файловую систему с одним корнем. Вы вольны подключать ваши разделы куда вам угодно. Разложить информацию с дисков в нужном вам виде. Да, я помню, что в Windows была возможность «подключить раздел как папку». Я ей никогда не пользовался. Для меня тогда это казалось слишком непрозрачно. Так же много раз у меня происходила интересная вещь — буквы дисков менялись местами. Например, после подключения еще одного устройства на шлейф или запуска монстра, типа Acronis Partition Expert. Переназначить буквы, если был «затронут» системный раздел, было невозможно. Система, вместе с программами и пользователем сходила с ума. Я до сих пор не понимаю, как в чью-то светлую голову могла прийти идея с буквами.

Дальше — больше. Linux имеет некоторые рекомендации по поводу того, где программы должны хранить свои файлы. В сруктуре файловой системы есть некоторые стандартные пути, которые имеют заранее известное предназначение. Это сильно упрощает поиски нужного тебе файла и вообще администрирование системы. Я знаю где искать настройки, логи, бинарные файлы. В Windows же было полнейшее разнообразие. Некоторые приложения норовили нагадить прямо под себя в Program Files, некоторые — и того хуже — в C:\Windows! Часть файлов хранилась по ужасному пути «C:\Documents and settings\User\Application data», часть — на уровень выше. Некоторые программы вообще использовали, прости Господи, реестр. При этом, переустановка системы, которая проводилась обычно с очисткой системного раздела, приводила к потере всех этих настроек и данных, если не знать где они живут и как их спасти. В Linux же мы имеем стройную и безусловно работающую концепцию домашних каталогов, где программа хранит все, что ей важно. Для каждого пользователя каталог свой. У каждого пользователя программа будет вести себя так, как хотел этот пользователь. Более того, даже после переустановки Linux (что мне приходилось делать несколько раз, после каких-нибудь неудачных апдейтов на альфы :) ) Достаточно установить пакет приложения, и оно будет вести себя точно так же, как до этого, если /home вынесен на отдельный раздел. Я знаю, что в Windows это, в принципе, тоже реализовано. Но на момент моего предательства, только кросс-платформенные открытые приложения правильно использовали в Windows эту концепцию.

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

Настоящая консоль

В силу профессиональных нужд, сначала будучи админом, потом разработчиком, мне время от времени приходилось делать что-то в консоли Windows. Это было ужасно :) Наверное именно негуманноидность консоли Windows привела к гиперразвитию графических средств. Даже для простых операций с файлами пользватели вынуждены были ставить какой-нибудь менеджер. В моем случае это сначала был Windows(Total) Commander, потом Far. Хотя я видел даже людей, пользующихся проводником. Моя мама, например. В Linux же, мы получаем настоящую, крайне функциональную коммандную оболочку. Практически сразу я начал выполнять подавляющую долю операций с файлами из консоли. Ведь гораздо эффективней сказать системе что ты хочешь, чтобы она сделала, в виде команды, чем делать это собственными руками, прыгая по панелям и окнам, выделя и перетаскивая файлы и нажимая лишние кнопки. «Множество мелких, суетливых движений» — прекрасная характеристика метода работы, которым мне сейчас вспоминается Windows-период. Для примера, создайте в Проводнике или Far стандартную структуру maven-проекта:

project/
`-- src
    |-- main
    |   |-- java
    |   `-- resources
    `-- test
        |-- java
        `-- resources

Наверняка для этого есть средства, может даже встроенные. Но я, в свое время, с такими простыми вещами мучился. А в консоли Linux это будет одна команда:
mkdir -p project/src/{main,test}/{java,resources}

Практически все задачи администрирования выполнимы из консоли. Да что и говорить, некоторые выполнимы только из нее. Многие вещи, делаются из консоли гораздо быстрее, чем через GUI. От использования консоли в Windows также отталкивает совершенно непрозрачная работа переменных окружения. Мне редко удавалось добиться того, чтобы $PATH работала так, как должна. Часто, чтобы запустить команду из консоли, приходилось писать полный путь до бинарника. В Linux с этим все замечательно.

Также Linux представляет широчайшие возможности по автоматизации, с использованием shell-скриптов, или любого удобного вам языка. Тем не менее во всех дистрибутивах, ориентированных на «обычного» пользователя, есть очень богатый GUI, по возможностям не отстающий (по слухам) от Windows 7. И уж точно превосходящий интерфейс XP.

Планировщик

В Windows есть Запланированные задания. Я однажды даже пытался ими воспользоваться. У меня не получилось :) Оно просто не нашло бинарника, который надо запустить. С тех пор я использовал какую-то стороннюю программу, которая имитировала Linux планировщик cron. Вот что работало безотказно! И, конечно, работать с оригиналом этой замечательной программы еще приятней. cron — очень простая и предсказуемая программа. Никаких сбоев или неожиданностей. Работает как часы :)

Удаленная работа

Помню, как я радовался в Windows возможности работать через RDP. 2 конкурентных сессии, забудешь выйти — перегружай машину. На XP того хуже. На толстом канале, иначе лаги. С глитчами многих приложений.
В Linux вы получите ssh — безопасный shell на удаленной машине, с возможностью прокинуть порты в любую сторону или даже графическое приложение, передавать файлы, монтировать удаленные файловые системы, запускать любые другие команды. Последние несколько лет — это незаменимый и неотъемлимый инструмент в моей работе. С помощью него можно управлять как огромными фермами, так и мобильными телефонами. Я не представляю, как можно без этого жить :) Но никто не отменял и VNC, который в исключительных случаях может быть полезен и Linux-пользователю.

Поддержка устройств

Этот контраргумент поклонников Windows в моем случае возымел обратное действие. В последнее время, поддержка устройств в Linux не вызывает никаких нареканий. Даже наоборот. Например, noname веб-камера, которая в Windows заводилась только с драйверами с диска из коробки, который я уже давно потерял, прекрасно распозналась и заработала в Linux. Ядро просто знает, как работать с чипом в этой камере, что, подозреваю, дает ему возможность работать с любыми камерами, построенными на этом чипе. Я сейчас не помню устройства, для которого мне приходилось бы искать драйверы. Максимум, поискать в интернете, как заставить работать устройство. Система или сама предлагает мне скачать какой-нибудь проприетарный модуль, или все работает и так… или не работает никак :) Но это относится к совсем экзотическим и, обычно, очень «китайским» устройствам. Популярные устройства известных, надеждых, производителей, способных и желающих написать поддержку своего устройства для Linux, работают не хуже, чем в Windows. В общем, про поддержку устройств я практически забыл. Мой старый ноутбук, новый нетбук и неттоп работают из коробки.

Документация

Справочная система Windows была, мягко говоря, бесполезной. Единственный нормальный источник информации был тогда — MSDN. И тот затрагивал только произведения самой Microsoft. Не в пример этому, встроенная система документации Linux — крайне полезная штука, достаточная для решения большинства задач. Вы получите исчерпывающую информацию об использовании команды, возможно даже с примерами, а иногда и на русском.

Кроме того, огромного количество решений различных проблем нагенерированно самим сообществом. Всевозможные форумы, wiki, блоги. Для человека, умеющим пользоваться поисковиком, доступна практически любая документация. В крайнем случае, есть огромное количество мест, где можно задать вопрос, и, что важно, получить ответ.

Что делать, когда решитесь

Перед тем, как бросаться в омут, я бы посоветовал сделать несколько вещей. Пересмотрите еще раз все (или хотя бы основные) задачи, которые вы решаете на Windows. Какие программы для этого применяются? Будут ли эти задачи стоять перед вами в другой ОС? Есть для этого инструменты? Рекомендую поискать решения заранее. Для более мягкого перехода, лучше уже на Windows перейти на кросс-платформенные аналоги часто используемых программ.

Особые сложности, говорят, возникают с играми и CAD-подобными программами. А таже какой-нибудь экзотикой. Для этого придется или пробовать wine, или держать Windows в виртуальной машине.

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

Учите английский :) Возможно, придется много читать. Читать хорошую, полезную документацию на английском.

В целом, приведенные выше преимущества — это то, что сделало для меня, как IT-специалиста, работу приятней и, главное, эффективней, чем это было в Windows. Наверняка есть еще ряд преимуществ, которые я не упоминал. Если перед вами часто стоят технические задачи и среда позволяет, очень рекомендую попробовать Linux. Также рекомендую его простым домашним и офисным пользователям, в задачи которых входятит работа с интернетом, документами, мультимедиа. Все это прекрасно можно делать в Linux.

В моей нынешней компании больше половины разработчиков использует на машинах Linux (C++ и Java разработка). В прошлой компании весь отдел разработки успешно смигрировал на Linux с Windows.

Надеюсь, я не задел ни чьих религиозных или иных чуств.