gatoazul (gatoazul) wrote,
gatoazul
gatoazul

Category:

Линукс: впечатления

Я решил недавно проверить, есть ли жизнь под Линуксом. Я как раз сменил работу и поставил на рабочую машину (которую предполагалось использовать чисто как офисную) клон Линукса под именем Fedora Core 4, очень быстро смененный на 6. Попутно я портировал под Линукс свою любимую Форт-систему SP-FORTH.

В общем, жизнь есть, но ничего сверхестественного я не вижу. Слово "свобода" меня греет, но меньше, чем американца, вынужденного выкладывать за Винды кровные доллары. Недоделок и глюков хватает, а общее впечатление - архаика. Линукс застряла где-то в 70-х годах, в эпоху перфораторов и терминалов. Никакие проблемы интерфейса "человек - машина" в ней по-новому не решены.

К Линуксу я с самого начала относился с подозрением. Все, исходящее из мира Юникса, носит на себе очень характерный и подозрительный отпечаток. Не то, чтобы плохой, а какой-то нечеловеческий. Кажется, что интерфейс этой системы проектировали роботы под свои нужды.

Линукс - это всего лишь еще одно ядро а ля Юникс (Посикс, если быть точным). Ничего плохого про само ядро не скажу - свои функции оно выполняет. Вызывает, правда, удивление его постоянное разбухание - каждый драйвер самой поганой железки вписывается в само ядро и пребывает там перманентно. Возможно, для этого были какие-то причины. Но я и про ядро Windows NT ничего плохого не скажу. Хорошее ядро.

Установка

Дальше начинается спектакль под названием "Тысяча дистрибутивов, или Анархия - мать порядка". Никакого Линукса per se не существует. Есть так называемые дистрибутивы, то есть на базе готового ядра сочиняется конкретный набор программ, которые будут на нем работать. Большинство программ берется, естественно, готовыми, иногда (редко) разработчики занимаются собственным творчеством. Результат - полный бедлам. Дистрибутивы в массе несовместимы друг с другом и даже со своими же предыщими версиями. Ситуация примерно напоминает описанное Паркинсоном издание научных журналов (ученый Б, не согласный с политикой редактора А, создает свой журнал, в котором печатает себя и своих друзей, а несогласные основывают журнал В и т.п.)

Сам процесс установки сейчас более-менее гладкий, хотя в нем постоянно встречаются сомнительные ситуации. Например, если на диске не хватает места, то узнаете вы об этом только после полного копирования на винчестер 5 или 6 дисков. Особенно радует, когда предлагают список программ на выбор - что вы, дескать, хотите поставить. Все было бы ничего, да только в списке этих программ сотни. Сделана попытка объединить их как-то в группы, но представление о том, что должно быть объединено в группы, у пользователя и автора дистрибутива совпадает редко.

После установки начинается выматывающий кишки процесс доводки, очень напоминающий старый анекдот, когда американские шпионы, укравшие чертежи истребителя, в результате собрали паровоз и только тогда заметили слова, напечатанные мелким шрифтом: "После сборки дошлифовать напильником".

Круг вещей, требующих дошлифовывания немал. Обычно сразу после установки не работает переключение раскладки шрифтов (казалось бы, ерунда, не стоящая внимания. Разработчики тоже, наверное, так думают). Или работает, но по какой-нибудь дикой комбинации вроде левого Ctrl. Принтер не печатает, сетевой принтер под Винды не виден и тоже не печатает, сетевые ресурсы имеют имена, сплошь состоящие из вопросительных знаков, сиди-диски автоматически не монтируются и т.д.

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

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

Система установки программ (они разные под разными дистрибутивами, но работают примерно одинаково) работает неплохо (хотя и жутко медленно), если есть неограниченный доступ в Интернет. Если доступа нет, а есть диски - все становится гораздо хуже. Каждая программа как правило тянет за собой штук по пять-десять рабочих библиотек, которые или негде взять, или они несовместимы с какими-нибудь другими библиотеками.

Нередко уже готовых двоичных программ или библиотек нет вообще и их приходится компилировать из исходников. Тогда сложность возрастает на порядок - кроме работы админа приходится выполнять еще и работу программиста.

В совокупности, все это недалеко ушло от пресловутого DLL Hell, с которым лично я в Виндах никогда не сталкивался. А вот SO Hell наблюдаю регулярно.

Интерфейс

Основной интерфейс Линукса - командная строка. Фанаты системы носятся с ней, как будто это бог весть какое открытие. Я прекрасно помню командную строку RT-11 (благословенная молодость - зеленые терминалы, гудящие блоки, ассемблер и последний автобус в двенадцать ночи). Да, там командная строка была очень удобной. Про Юникс (а это его наследие) этого не скажешь. Ну, добавилось автодополнение, удобно. С другой стороны, если набрать длинную команду в две строчки, то редактировать ее толком невозможно. Разработчики терминала не догадывались, что бывают такие длинные команды. Что касается собственно эргономики, то это полный швах. Все команды носят односложные загадочные имена типа cp, df, mkiso и прочее нрбзр. Счет их идет на сотни. Ключи, которые они понимают, сделаны по тому же принципу "кто во что горазд" и никак не согласованы друг с другом. Большей частью это однобуквенные сокращения -a или -q, ни о чем не говорящие. В новых программах другая крайность: ключи крайне многословные ---include-ll-directories. У некоторых особенно популярных счет ключей идет на десятки, они обрастали ключами, как ржавый корабль на приколе - всякими мидиями. В целом, на фоне этого бедлама простой и логичный интерфейс RT-11 вспоминается с ностальгией.

Поверх интерфейса командной строки прикручен GUI. GUI как GUI, в общем-то ничего особенного. Собственно, к Линуксу и многократно воспетому командному интерфейсу он имеет слабое отношение, система X Window писалась как универсальная и никакой инфраструктурой нижнего уровня (всеми этими конвейерами и мелкими утилитками) не пользуется. Однако ее стандарты почему-то останавливатся на графических примитивах. За все, что сверх того, отвечают так называемые оконные менеджеры. В этом не было бы ничего плохого, если бы не тот пошлый факт, что оконных менеджеров много и стандартного нет. Результат все тот же - бедлам. И если бы только в виде заголовков окон - это даже забавно. Но в разных программах рисуются совершенно разные кнопки и прочие контролы. Это уже раздражает. Даже кнопка ОК все время шастает по экрану - в одних программах она слева, в других - справа.

Кстати, если вы услышите, как замечательно Линукс работает с памятью, как мало ее нужно - не верьте. Это вранье. Памяти графический интерфейс отжирает ничуть не меньше, чем Винда. Быстрый процессор тоже не помешает. У меня довольно слабая машина, на 256 Мб памяти работать было вообще невозможно. На 512 - более-менее нормально, если не запускать сразу много задач.

Поверх GUI и окон можно поставить оболочку. Выбор есть и здесь: Gnome или KDE. Из того, и из другого можно соорудить некое подобие интерфейса Виндов и этим ограничиться. Не то, чтобы Эксплорер был шедевром, но наработанные за десять лет навыки тоже на дороге не валяются. Оболочки в целом стандартны, никаких особых выдумок там нет, и свою роль они выполняют нормально. Впрочем, гордиться там тоже нечем.

Впрочем, под Виндами я всегда работал в ФАРе. Я готов петь целые гимны этой неказистой на вид программе. Под Линуксами, увы, есть только ее жалкое подобие под названием MC. Не в том даже дело, что в ней не хватает много полезных функций, а в том, что она попадает под классическое определение "тупой". Тупая программа - та, которая делает все назло и неправильно. Как там сделана консоль - это что-то. Две разных командных строки, и если в одной набрана хоть одна буква, то вторая вообще не работает, выдавая дикую диагностику "Интерпретатор уже занят выполнением команды". Про раскладку клавиатуры можно и не упоминать. Она сделана так, чтобы любая операция занимала как можно больше времени и была максимально неудобной. А почему в одних окнах работает Ctrl+Enter, а в других нет - это я уже понять отказываюсь.

Программы

Пестрый зоопарк. Еще более пестрый, чем под Виндой. Качество программ весьма и весьма разное. От серверных, написанных 20 лет и тщательно вылизанных, через довольно глючные до откровенных ученических поделок. Проблема в том, что многие нужные функции можно выполнить только поделками и ничем больше. Особенно раздражают ошибки в тех программах, которые все время на виду. Периодически падает aMule - причем вместе с очередью. Xneur (для автоматического переключения раскладки) вставляет от себя по 10 лишних знаков и т.п. Поэтому я обычно пользуюсь старыми и хорошо мне знакомыми программами, нормально работающими под все системы: OpenOffice, Opera, Thunderbird. Ничего специфически линуксового в них нету.

Архаика

Юникс в 70-е годы выглядел выпендрежной и оригинальной, хотя и крайне тормозной системой. Новомодные выдумки вроде дерева каталогов шли на ура. За 30 лет ничего нового там не появилось, но некоторые вещи стали выглядеть откровенным приветом из прошлого.

Например, под Линуксом, как некогда под Юниксами, имеется суперпользователь, почему-то называемый "корнем". Раньше это был некий хакер-гуру, в функции которого входило обслуживание многопользовательского сервера. Он мог делать с машиной все, что угодно, а простые пользователи - работать со своими собственными файлами. Для того времени это было по-своему логично.

Однако сейчас все это выглядит примерно также, как в анекдоте "Что я со своей курчавой головой делаю здесь, в Рязани". Машина одна, пользователь на ней один, но под администратором работать нельзя, потому что у администратора слишком много прав и любая серьезная ошибка закончится переустановкой. А под простым пользователем невозможно выполнить элементарные действия вроде установки или снесения программ. Поэтому приходится постоянно держать открытым терминал администратора - так, на всякий случай.

Из 70-х же система монтирования дисков. Тогда оператор при необходимости тащил огромный магнитный барабан и ставил его в устройство чтения. Барабан монтировался в общее дерево каталогов. Выполнялась эта операция нечасто. Прошло 30 лет, а под Линуксом дискетки и сидиромы по-прежнему считаются внешними магнитными томами. Их монтирование/размонтирование - серьезная операция, требующая достаточно затрат времени, в процессе размонтирования выполняется отложенная запись. Поэтому там, где под Виндами нужна секунда, чтобы выдернуть дискетку, под Линуксом нужна минута дождаться окончания серьезного процесса. Писать на дискету сразу же, мелкими порциями, у системы не хватает ума. Еще смехотворнее ситуация с дисками. Пока они смонтированы, достать их из дисковода нельзя - уж не знаю, каким методом ядро запрещает срабатывание кнопочки выброса. Это тем смехотворнее, что сиди - устройства только для чтения и на них ничего не пишется.

Есть система автомонтировки для дисков, которую еще надо настроить (см.раздел "Инсталляция"). Но системы авторазмонтировки все равно нету. Учитывая, что менюшки KDE нередко виснут при попытке размонтировать диск, а кнопка гадски не срабатывает, чтобы вытащить банально сидиром, нужно переключаться на терминал, лезть в командную строку и набирать там команду размонтирования. Простой пользователь это сделать не может, нужны права администратора.

До самого последнего времени русской кодировкой под Линукс была дикая КОИ-8 - сохранившаяся от времен мезозоя. Единственным ее преимуществом было, что ЕСЛИ некоторые (забытые много лет назад) программы выкинут вдруг восьмой бит, то русский tekst eqe movno budet pro^itat. Очень востребованная функция, особенно учитывая, что никакого алфавитного порядка в этом уродстве не выдерживалось. Слава богу, что в Федоре глобально перешли на Уникод и КОИ-8 можно навсегда забыть как страшный сон.

А терминальная система - это вообще песня. Обнаружить, что под Линуксом до сих пор страдают от проблем, решенных двадцать лет назад... Еще на первых PC разделили поток данных и поток команд от клавиатуры (с помощью расширенного скан-кода). Но Линукс до сих пор существует в мире терминалов VT100 (которые в железе можно найти только в музее компьютерной техники). Терминалы эти управляются escape-кодами, поэтому вывод на экран какого-нибудь двоичного файла приводит к катастрофе. Функциональные клавиши, как много лет назад, тоже возвращают escape-коды, поэтому отличить настоящую кнопку Escape от F1 можно только через некоторое заднее место. Постоянно видеть на экране всякие [17;5 вместо вызванной функции - удовольствие сомнительное. Что поделать - нормальная клавиатура/экран современного PC сводятся к какому-то убогому терминалу образца 1977 года с соответствующими последствиями. В качестве оправдания приводится совместимость с некой экзотикой, которая вообще неизвестно, существует на самом деле или нет. Ради совместимости с какой-то железкой, собранной на коленях в американском гараже приносится в жертву удобство работы.

Программирование

В книжках пишут, что Юникс - операционная система, написанная программистами для программистов. Вранье. Это система, написанная программистами на С для программистов на С по моде 70-х годов. О существовании других языков здесь и не догадываются.

Системных сервисов очень мало. 80 неудобных ассемблерных вызовов с передачей параметров в регистрах - неужели под Линукс пишут до сих пор программы на ассемблере? Все остальное запихано в динамическую библиотеку под названием libc. То есть, это библиотека не системная, а всего лишь среда исполнения языка С. Не нравится бороться с фокусами не самого ясного языка - пишите свою среду сами.

Да и в этой библиотеке нету много чего нужного, например, локальных куч. Начисто отсутствует структурированная обработка исключений (SEH). Вместо нее - архаичная обработка сигналов с кое-какими введенными постфактум расширениями, затребованными стандартом POSIX. Самое больное место этого механизма - отсутствие повторной входимости в самой библиотеке. Из-за этого самое большое, что можно сделать при обработке некоторых важных сигналов, - закончить работу программы. О продолжении после GPF можно и не мечтать. Это живо напоминает все ту же RT-11, в которой при обработке прерывания можно было вызывать только кое-какие системные сервисы. Но это все-таки был 1972 год.

К этому добавляется просто аристократическое пренебрежение всеми языками, кроме С. Многие функции определены не в двоичной библиотеке, а в заголовочных файлах С. Если у вас нет препроцессора С и его компилятора, вам вовек не догадаться, что функции stat(a,b) описанной во всех учебниках, на самом деле не существует, а есть вызов __xstat(3,a,b), который его заменяет. Ну это хоть догадаться можно. Но когда вызываешь системную библиотеку libpthread и получаешь ответ "Неправильный формат", потому что на самом деле это не библиотека, а какой-то скрипт для линкера, указывающий на какой-то левый каталог, то это уже слишком.

Поэтому под Линуксом пишут только на С или на языках, трансляторы которых написаны на том же С. Уже С++ реализуется кучей каких-то отвратительных хаков линкера. Сам линкер написан без всякой защиты от сбоев и при обнаружении каких-то ошибок в двоичном файле просто валится.
Да, есть еще шелл, вернее, по доброй традиции, три разных несовместимых шелла. Язык их столь же приятен, как Визуал Бейсик, хотя и по другой причине. В целом, заставляет вспомнить о знаменитых //DD SYSIN=UNIT1.

Создать рабочий двоичный файл самому практически невозможно. Сам формат ELF очень простой и логичный, но его расширения для подключения динамических библиотек - это нечто. Можно преодолеть и их, но тогда встают еще одни джунгли - хаки с инициализацией/выгрузкой все той же библиотеки С. Заплатка на заплатке, хак на хаке, и еще с каждой новой версией библиотеки свеженькие изменения.

О двоичной совместимости не стоит и говорить. Программа, скомпилированная под одним дистрибутивом, не будет работать под другим и даже под тем же самым, но другой версии. Потому линуксоиды и носятся с открытыми текстами, налагая на пользователя еще и функции программиста, что просто положить скомпилированную программу для закачки невозможно

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

Мораль достаточно банальна и озвучивалась различными лицами уже не раз. Очень хорошая серверная система, если у вас есть квалифицированный сисадмин. Можно сделать неплохое специализированное рабочее место, если требования к работе не меняются очень часто. И средненькое офисное место, если рядом есть квалифицированый сисадмин, который выполнит настройку за вас. Среда для программирования посредственная. В плане познания новых идей - увы, совершенно пустое место.
Tags: линукс
Subscribe

  • О выгодности дракона

    Сколько там балаболили о новой российско-украинской войне? Весь апрель точно и еще, кажется, пол-марта? И вот что забавно. В Донецке на эту тему…

  • Ответ на загадку "Путешествия слов - 2"

    Признаюсь честно, загадка не удалась, в чем виноват я сам. Я был свято уверен, что казаками турки называют высокие сапоги, позаимствованные из…

  • Ответ на загадку "Путешествия слов"

    Изба - догадаться несложно. Когда выпал полугласный ъ, из "истбы" "изба" получается весьма естественно. А вот заранее…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 1 comment