Философия Linux и Windows

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

Самым главным различием между Linux и Windows я вижу Универсальность первого и Неуниверсальность второго. Каждый подход имеет свои преимущества и недостатки. Я постараюсь раскрыть эту мысль, потому что она будет часто использоваться далее по тексту. Многие программы под Windows пишутся программистами, которые в недавнем прошлом писали под DOS. А фундаментальным отличием DOS от Windows является однозадачность. Поскольку пользователям и программистам всегда хотелось выполнять на компьютере более, чем одну задачу, - не просто писать текст, а еще и слушать музыку. Не просто слушать музыку, а еще одновременно с этим пересылать по модему файл и т.д. Вполне разумное желание, которое приводило к тому, что программы слепливались в большие конгломераты, многозадачно работавшие в пределах себя самих, вроде Dos Navigator'а - можно было одновременно искать файлы, чатиться по модему, слушать компакт-диск и играть в тетрис. В DOS это было единственным выходом, чтобы шире использовать компьютер. С приходом многозадачности на платформу Intel ситуация могла кардинально поменяться - можно было бы делать отдельно проигрыватели компакт-дисков, отдельно тетрис, и т.д. Но привычка сделала свое дело - программы делались огромными монолитными комками - как будто редактор надо обязательно намертво склеить с программой проверки орфографии, графическую подсистему с ядром операционной системы, функции обработки изображений с графическим редактором! Получилось, что, если мне надо написать программу распознавания текста, мне надо было с ней поставлять свой словарь (для того, чтобы программа могла "узнавать" не просто буквы, а целые слова). Ведь и проверка орфографии, и система распознавания текстов, и взломщик паролей - все используют один и тот же словарь. Это пример неуниверсальности. В Windows много похожих, неуниверсальных, мест - например, чем отличается реестр от обычной файловой системы? Если подумать, то ничем, идеология та же. И нет бы использовать те же самые инструменты, что уже есть для файлов - поиск, копирование, редактирование и т.д. В Windows сделали еще одну структуру, похожую на файловую, со своими инструментами и абсолютно другими функциями. В Linux все наоборот. Даже частоупотребимые функции вроде strcpy, которые в Windows входят в джентельменский набор любого компилятора, в Linux валяются в разделяемых библиотеках и доступны кому угодно. В Windows есть один большой шаг к универсализации - это механизмы OLE и COM, но, к сожалению, они доступны только программистам, и абсолютно недоступны простым смертным пользователям. Это что касается универсальности и неуниверсальности.

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

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

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

Если выбирать такой подход к работе на компьютере, что пользователь не сам делает что-либо, а объясняет машине, как это сделать, то встает резонный вопрос: любое ли действие можно записать в виде, понятном компьютеру, да так, чтобы это было достаточно просто для пользователя и не требовало богатого опыта программирования? Подобные попытки неоднократно предпринимались в Windows - Macro Recorder в Windows 3.1, средства записи макросов в MS Office и т.д. Их эффективность очень низкая - получаются автономные, замкнутые (читайте: неуниверсальные) программы, в которые даже нельзя передать параметры! Приведу пример, как говорят врачи, из своей практики. Несколько лет назад меня попросили сделать простую вещь - чтобы в Ворде печатать ведомость с оценками учеников. Надо было, чтобы учитель вводил оценки в таблицу, нажимал некоторую комбинацию кнопок, программа автоматически раскрашивала оценки в таблице (2 - красная, 3 - синяя, и т.д.), рассчитывала минимальную, максимальную и среднюю оценки. И было сделано такое невинное пожелание - чтобы учитель мог сам выбирать цветовую схему, например для более простой контрольной работы уже "тройку" отрисовывать красной. И тут всей красой зацвела неуниверсальность MS Office - оказалось, что банальная задача настройки цветов привела к тому, что мне пришлось писать отдельный макрос, который рисовал окошко на экране, в котором пользователь задавал цвета оценок, результат записывался в документ с оценками текстом белого цвета(!), а потом макросом раскрашивания эта запись искалась в документе (что само по себе неудобно без регулярных выражений) и уже использовалась для решения задачи. Насколько бы это было проще, если бы я мог взять электронную таблицу с полями оценок, полями цветов и просто по этой таблице сгенерить текст. Но даже в пределах MS Office это становится проблемой, не говоря уж об интеграции разных продуктов разных производителей. Межпроцессный обмен с помощью DDE, да даже просто буфер обмена, не доступны пользователю без написания своих программ.

Альтернативой макрокомандным языкам служат разнообразные скриптовые языки, которые существуют не внутри программы, которой надо управлять, а вне ее, в виде самостоятельной программы. Отсюда напрямую следует объяснение, чем же так привлекательна командная строка как основной механизм взаимодействия пользователя с программами. Команды пользователя, введенные им с командной строки исключительно просто переделываются в командный файл. Если в этот командный файл добавить возможность просто организовывать управляющие структуры - циклы, подпрограммы, то с помощью такого языка будет исключительно просто делать любые операции в автоматическом режиме, что невозможно эффективно применять в Windows, потому что, например, единственный способ связи c текстовым процессором Word - это DDE, который, как я говорил, неудобен в использовании. Языки с таким богатым набором команд - это очень важное завоевание разработчиков UNIX. Они делают командную строку исключительно полезным инструментом, с помощью которого можно интегрировать всяческие разнородные программы в единую систему. Стоит заметить, что предпринимаются попытки создать средства для такой же интеграции программ с графическим интерфейсом (чтобы пользователь мог соединить программу-качалку с программой-отображалкой и получить браузер), но мне, к сожалению, не довелось увидеть в работе ни одного такого комплекса.

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

Приведенные соображения наталкивают на идею о зависимости сложности решения задачи в операционной системе от сложности самой задачи, как если бы ее решал человек вручную. В Linux эта зависимость линейная, потому что на каждое элементарное действие есть элементарная команда, на каждое обобщение, которое делает человек, есть соответствующая элементарная операция в Linux. В Windows же сложные операции записать в виде скрипта, а следовательно и вообще как-либо упростить, невозможно. Там другой подход - элементарные программы делаются не только для элементарных задач, но и для сложных задач. Например, если вы хотите, чтобы компьютер в 3:00 позвонил в Internet, закачал файл, отсоединился и выключился, вы берете большую программу-качалку, которая умеет звонить, поддерживает работу по расписанию и умеет выключать компьютер. В Linux звонилка, качалка, расписание и выключалка - это четыре разные программы, и вы можете, например, выбрать любую из программ расписания, имеющуюся в интернете, либо написать свою. На других программах это никак не скажется. Что касается зависимости, то, если вам вдруг потребуется функция, которую не поддерживает программа, то усилия на реализацию этой функции будут соизмеримы с написанием новой программы, которая будет ее поддерживать, потому что из-за неуниверсальности внедрить существующую программу или ее части в новую практически нереально. Например, если вы хотите с помощью пишущего CD-ROM записать диск, и уже очень поздно, то хотелось бы, чтобы компьютер произвел запись и по ее окончании выключился. В Windows мне не удалось сделать вообще ничего, поскольку известные мне программы записи на CD не имеют возможности выключения компьютера по окончании записи. В Linux эта задача с удивительной легкостью "раскладывается" на две простые, объединенные операцией следования. Т.е. получилась строка: "cdrecord newcdrom.img ; halt". Решение задачи не требует никаких усилий.

Получается интересная картина: для выполнения простых либо очень распространенных задач в Windows достаточно использовать уже готовое приложение, а в Linux необходимо уметь работать с несколькими десятками простых программок, что дает Windows преимущество - не надо много знать и уметь для выполнения простых действий. Когда же появляется необходимость выполнить нестандартную либо достаточно сложную задачу, в Windows надо брать в руки компилятор, MSDN и писать. В Linux же вместо этого можно просто перекомбинировать встроенные программы либо дописать только сущность новой программы, то есть то, что принципиально отличает новую программу от уже существующих. В Windows этот недостаток является следствием традиции, унаследованной от DOS объединять все нужные и ненужные функции в одну программу и коммерческой природы операционной системы и программного обеспечения под нее.

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

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

РЕЗЮМЕ. Linux предоставляет универсальные программы, которые позволяют связать практические любые программы, чтобы они действовали как единая система. Работа в Linux требует более длительного обучения, чем в Windows, потому что в последней наиболее часто используемые операции делаются с помощью специализированных программ с простым интерфейсом. Более сложные задачи в Linux легко сводятся к более простым с помощью своеобразного клея - маленьких универсальных программ, тогда как в Windows требуется либо писать свои приложения с необходимой функциональностью, либо делать все вручную, что и делает большинство пользователей Windows. GUI - это не главный показатель качества ОС, так как в Linux он может быть с легкостью написан для любой программы самим пользователем.



Вернуться на главную страницу

Комментарии посетителей к этой странице

Дата: 08.08.2006 23:49:42Автор: В тениe-mail: kocou@lawbreakers.ru
Асилил, задумался )



Ваше имя:
Ваш e-mail:
Комментарий:


Вернуться на главную страницу

100% MS Free Rambler's Top100 Мониторинг сервера осуществляется системой UpTime.Ru
Best viewed with Lynx