О блоге

Все новые материалы размещаются на Блогосайте alv.me. Старые - в процессе переноса.

17.08.2008

Апология консоли

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

Что было,
или Краткий курс новейшей истории ИТ

Казалось бы, века прошли с того времени, когда на ниве настольных систем сосуществовали, не всегда мирно, но почти на равных, и DOS во всех ее проявлениях, и MacOS, и милая Amiga со своей multimedia, и Windows всякого рода, чина и номера, и OS/2, и почти забытая Geoworks, не говоря уже о сияющем NextStep. А еще туда (почти) всерьез стремились и HP-PA с ее HP-UX, и Sparc со своими SunOS и Solaris, и казавшаяся недосягаемой Alpha с Digital Unix.

Я хорошо помню авторитетные компьютерные издания первой половины 90-х, без тени улыбки обсуждавшие достоинства и недостатки всех этих ОС как платформ для настольных персоналок. Например, сравнительное быстродействие WordPerfect на i386 под DOS и на Sparc под Solaris. Благо, был тогда такой текстовый процессор, реализованный для всех мыслимых и немыслимых систем...

И кому это все мешало? - спросили бы в Одессе. Тем не менее, в одночасье, если смотреть из сегодняшнего далека, все изменилось. Тихо и незаметно, как парторг на пенсии, почила в Бозе DOS. Оставив пару-тройку бичующих отпрысков, хватающихся за любую работу. Канули в небытие Next и GEOS, пошла по рукам, как стареющая красотка, Amiga, мирно дремала, как этнос в гомеостазе (Л.Н.Гумилев), OS/2. Старина Mac впал в абскурацию, дабы потом тихо окопаться в нише издательских систем и высокой полиграфии. А титаны мира рабочих станций оставили надежду выйти на оперативный простор рабочих столов, возводя глубоко эшелонированные линии обороны на своих рубежах.

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

Казалось, история кончилась. Жалкие потуги BeOS оттянуть на себя хотя бы симпатии, если не кошельки, пользователей, - не в счет. Для прочих же, выживших, сохранение status quo на уровне суммарных пяти процентов настольных пользователей казалось пределом мечтаний.

И тут неожиданно оказалось, что параллельно миру коммерческого софта и чистогана, где все покупается и все продается, существует другой мир - свободного софта и открытых исходников. Где программы пишутся для решения своих личных задач, для обучения и поддержания профессиональной формы, для престижа в собственном сообществе, а то и просто из любви к искусству и спортивного азарта.

Мир этот был почти столь же стар, как и мир коммерческий. На его начальной истории останавливаться не буду, она выходит за рамки рассматриваемого периода. Тем более, что долгое время развивался он тихо и неприметно, как млекопитающие эры динозавров. Однако лишь недавно (и также исторически мгновенно) об этом мире узнали широкие круги околокопьютерной общественности. И слова Linux и Open Sources замелькали по страницам не только компьютерных, но и общественно-политических, как сказали бы при социализме, изданий.

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

Что происходит,
или срез текущего момента

Разумеется, Linux не был ни единственной, ни первой, ни даже наиболее развитой системой, распространяемой свободно и открыто. Одновременно и рядом существовали и Free-, и Net-, и OpenBSD, и недавно реанимированный Hurd - это если ограничиться только Unix-подобными системами. К каковым мир свобоных ОС отнюдь не сводится (см. например, сайт FreeOS).

Однако именно Linux, в силу ряда исторических, психологических и просто случайных причин привлек к себе внимание широких масс околокомпьютерных трудящихся. Обсуждение этих причин далеко выходит за рамки сегодняшней темы. Рискну сформулировать только одну, на мой взгляд, главную: если бы Linux не существовал, его следовало бы выдумать.

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

И именно эти категории людей неожиданно для себя видят, что за Окнами существует жизнь, не столь уютная и приглаженная, загадочная и порой опасная (если не жизни - то для "железа"). Но - другая, и уже этим интересная. На мой взгляд, далеко не случайно, что Linux-бум начался именно в тот момент, когда засилье Windows казалось безграничным. Что вселает надежду и веру в род человеческий. Подобно тому, как предпоследнему авантюристу из романа Олега Куваева было бы обидно, если он окажется авантюристом последним...

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

Да и мир коммерческого софта никогда уже не станет прежним. Мир свободного софта и открытых исходников уже повлиял на него и будет влиять самим фактом своего существования и своим кругом пользователей.

Я достаточно скептически отношусь к возможности заработка денег на свободных программах и открытых исходниках в какой бы то ни было форме. По крайней мере, вряд ли кому удастся стать на этой почве вторым Гейтсом или Элиссоном. Однако полагаю, что развитие открытых проектов должно в какой-то форме дотироваться обществом, подобно научным отраслям, относимым к категории фундаментальных.

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

Что следует,
или возвращаясь к теме реазговора

Однако я, как всегда, отвлекся зияющими перспективами и блистающими пропастями. Пора вернуться к текущему моменту. А на текущий момента мы наблюдаем беспрецендентный рост сообщества пользователей Linux. Я подчеркиваю - рост сообщества, а не рост числа пользователей. Количество которых в штучном, так сказать, исчислении, по прежнему мало. Однако если сто увеличить до тысячи - это ведь будет десятикратное увеличение, или возрастание на 900%, не так ли?

По крайней мере, остается фактом: новопользователи Linux (к коим отношу и себя) сейчас количественно резко преобладают над юниксоидами старого закала и энтузиастами Linux первого призыва. И все они пришли из Windows - больше неоткуда. Ведь, как говорил Вилли Старк у Пена Уоррена, "добро можно делать только из зла, потому что больше его просто не из чего делать".

Однако за годы оконного ига выросло поколение пользователей (выросло - как пользователи, не обязательно как организмы), лихо налагающих фильтры в Photoshop'е или вращающих городские кварталы в 3DMax, но не имеющие представления не только о разбиении диска, но даже не заставшие командной строки DOS.

Это я отнюдь не в упрек: способность ряда моих знакомых применять Photoshop для анализа космоснимков или 3DMax - для построения архитектурных ансамблей вызывает у меня просто восхищение. Скорее это комплимент искусству Windows драпировать свои внутренности. Результат чего - естественное стремеление Windows-мигранта и в Linux действовать в привычной среде и привычными методами. Благо, стремление это удовлетворяется интегрированными объектными средами графического режима, такими, как KDE и GNOME. Да и современные т.н. end-user oriented дистрибутивы к тому подталкивают.

Однако довольно быстро (сужу опять же по собственному опыту) выясняется, что, как сказал бы Страшила Мудрый, "река - это не дорога, а дорога это не река". И что приемы работы, заимствованные из Windows, в Linux часто оказываются менее эффективными, чем традиционные инструменты Unix-систем. А среди последних наиглавнейшей является командная среда в текстовом режиме.

Появление главной героини, или что такое текстовая консоль

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

Напротив, в такой Unix-системе, как Solaris (правда, только для Sparc), текстового режима нет по определению. Поскольку он просто не поддерживается видеосистемой этой платформы. Что не мешает эффективному использованию командных сред в режиме эмуляции терминала.

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

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

Должен сказать, что осознание разницы между системой управления консолью и командной средой заняло у меня немало времени. Тем более, что ни в одной из известных мне книг про Linux (каюсь, и в моей собственной - тоже) внимания на этом не акцентируется. Окончательное понимание вопроса пришло во многом благодаря замечательному мемуару Ивана Паскаля. Который, хотя и посвящен описанию (причем - очень подробному) только консольного драйвера FreeBSD, исключительно способствует пониманию консоли любой классово близкой ОС.

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

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

  • с одной стороны, возможность пролистывания экрана с помощью клавишной комбинации Shift+PageUp/PageDown;
  • с другой - возможность просмотра истории введенных в командной строке директив последовательно, с помощью клавиш управления курсором Up и Dowm.

Психологически (вероятно, по аналогии с текстовыми редакторами и процессорами) особенности эти кажутся тесно связанными, едва ли не неотъемлемыми для системы. Однако за пролистывание экрана отвечает система управления консолью. И, скажем, в стандартной консоли FreeBSD осуществляется иначе - просто клавишами PageUp и PageDown при включенном ScrollLock.

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

Другой пример - использование многозадачности. Как это выглядит в графическом режиме - все знают по опыту Windows. Которая, как известно, тоже становится многозадачной, едва только дискету доформатируешь. А вот в режиме текстовом (в Linux иже с ним) это осуществляется разными способами:

  • временной приостановкой текущей задачи;
  • запуском программы в фоновом режиме;
  • переключением на другую виртуальную консоль.

Первые два способа обеспечиваются командной средой, хотя в большинстве известных мне сред реализуются одинаково - Control+Z в первом случае и имя_команды & - во втором. Виртуальные консоли же входят в компетенцию системы управления консолью. И, скажем, в Linux (и во FreeBSD по умолчанию) между ними можно переключаться с помощью комбинации Alt+F#. Тогда как в OpenBSD это требует уже трех клавиш - Alt+Control+F# (хотя между парой зарезервированных консолей можно переходить по Shift+F1/F2). Замечу, что для выхода из графической консоли (то есть той, где запущена система X Window) в любом случае потребуется нажать Alt+Control+F# (Alt+F# X'ах предназначено для внутреннего употребления).

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

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