Время на прочтение
7 мин
Количество просмотров 106K
Введение
В последнее время наблюдается большой приток пользователей Linux. Как правило это люди уже имеющие вполне приличный опыт в общении с компьютером, но этот опыт в большинстве случаев ограничен одной системой. Естественно, что этой системой является самая распространенная на сегодня на дескотопах операционная система компании Microsoft MS Windows. Большое число пользователей Windows также ставят Linux, или запускают его с «Live CD» «на посмотреть».
И тут возникает сразу несколько проблем, связанных с тем, что новые пользователи Linux ожидают увидеть перед собой «еще один Windows». А Linux — это совсем не клон Windows, это совсем другая система, с другой основой, другими традициями, другими возможностями и другими требованиями к пользователю.
По моему убеждению именно это непонимание и является одним из источником такого количества так называемых «священных войн». Возможно данная статья позволит если не уменьшить количество таких войн, то хотя бы даст большее понимание позиций противников и снизит накал в войнах.
Очень глубоко лезть в устройство этих двух операционных систем нам, я думаю, ни к чему, будем рассматривать их в основном с точки зрения пользователя.
Экскурс в историю (очень краткий)
Для сравнения, думаю невредно освежить в памяти краткую историю сравниваемых операционных систем.
История Unix
Операционная система UNIX была создана еще до эры коммерческого софта. Она писалась инженерами, как система «для себя». Поэтому в нее были заложены передовые на то время концепции. В дальнейшем своем развитии при добавлении новых черт, обычно считалось, что делать нужно «правильно». Т.е. например если нужно было выбирать из двух решений, одно из которых было с инженерной точки зрения «неправильным», например повышало производительность сегодня, но могло принести затруднения в дальнейшем, как правило, такое решение отвергалось и выбиралось «правильное» решение, пусть и с определенной потерей производительности.
Первые версии UNIX были написаны на Ассеблере, затем система была переписана на СИ. Это дало системе уникальную переносимость. На PC UNIX был портирован, а точнее заново написан (Linux) сразу, как только развитие PC, а точнее выпуск PC на процессоре i386, позволило это сделать.
В 1985 году стартовал проект POSIX. Это стандарт на интерфейсы UNIX-подобных ОС. Во многом благодаря наличию такого стандарта, так быстро смог появится на свет и достигнуть зрелости Linux — свободная воплощение UNIX.
Развитие интернета с самого начала и до нашего времени неразрывно связано с серверами под управлением ОС UNIX. Сначала с коммерческими, а теперь все больше и больше со свободными.
С точки зрения коммерциализации развитие UNIX можно разделить на три этапа.
- Некоммерческое распространение в университетах.
- Распространение коммерческих UNIX систем.
- Появление свободных реализаций (Linux, FreeBSD) и вытеснение коммерческих систем (настоящий момент).
До появления системы X Window System UNIX была системой с текстовым интерфейсом, затем добавился графический, но традиционно текстовый интерфейс сохраняет важное значение.
Очень важно то, что UNIX с самого начала был многозадачной и многопользовательской системой. Т.е. на одной машине могут работать сразу несколько пользователей, и выполняться несколько программ одновременно.
Фирменной чертой всех UNIX-подобных ОС была и остается надежность.
Табличка:
Год | Событие | Комментарий | Разр | Многопольз. | Многозадачн. |
1971 | Первая версия UNIX | На ассемблере | 32 | Есть | Есть |
1973 | Третья версия UNIX | На Си | 32 | Есть | Есть |
1983 | TCP/IP | — | 32 | Есть | Есть |
1983 | Проект GNU стартовал | Подготовил свободную обвязку для UNIX- подобных ОС | 32 | Есть | Есть |
1984 | X Window System | Оконная система | 32 | Есть | Есть |
1985 | Стартовал проект POSIX | Стандарты интерфейсов UNIX-подобных систем | 32 | Есть | Есть |
1991 | Появление Linux | Первая свободная реализация ядра UNIX для PC, 32 разрядная, сеть | 32 | Есть | Есть |
1993 | Появление FreeBSD | Еще одна свободная реализация ядра UNIX для PC, 32 разрядная, сеть | 32 | Есть | Есть |
История Windows
Истоки зарождения операционной системы Windows следует искать в предшествующей ей операционной системе той же самой фирмы — DOS. Все операционные системы компании Microsoft, это прежде всего коммерческие проекты. Об этом нужно помнить всегда, особенно, когда стараешься понять истоки тех или других решений, как коммерческого плана, так и технического.
Первой ОС из этого семейства была DOS. Может показаться, что DOS собственно имеет косвенное отношение к обсуждаемому предмету. Но, многие традиции, база пользователей и разработчиков, их привычки, идут именно оттуда.
DOS была однозадачной однопользовательской операционной системой с текстовым интерфейсом. Первая версия Windows представляла собой нечто, негодное для работы и распространения не получила. Работать стало в Windows стало возможно, начиная с версии 3. В версии Windows For Workgroups 3.1 появилась возможность работы с сетью. Winodws серии 3 представляли собой запускаемую поверх DOS систему. Отличались невысокой надежностью.
В 1995 годы вышла новая версия — Windows 95. Код частично был 32 разрядным, частично 16 разрядным, встроенная сеть. По сравнению с Windows серии 3 это был серьезный шаг вперед. Повысилась надежность, но до надежности UNIX-подобных ОС было еще далеко. В качестве рабочей станции с натяжкой конечно, надежности хватало, в качестве сервера, нет. Позже были выпущены еще две ОС этой линии, Windows 98 и Windows Me. После этого линия была закрыта.
В 1993 году вышла новая версия — Windows NT 3.1. Это уже была полностью 32 разрядная система. Разработана она была с нуля, для ее разработки были наняты известные специалисты. Были внедрены новые концепции. Это подняло надежность почти до уровня надежности UNIX-подобных систем. Эта ОС уже могла работать в качестве сервера. Продолжение этой линии, операционные системы Windows 2000, Windows XP и Windows Vista.
ОС линии NT были многозадачными, начиная с Windows XP появилась и возможность работать нескольким пользователям, хотя и более ограниченная и гораздо менее удобная, чем у UNIX-подобных ОС.
Табличка:
Год | Событие | Комментарий | Разр | Многопольз. | Многозадачн. |
1981 | DOS | — | 16 | Нет | Нет |
1985 | Windows 1.0 | Надстройка над DOS | 16 | Нет | Нет |
1990 | Windows 3.0 | Надстройка над DOS | 16 | Нет | Есть |
1992 | Windows For Workgroups 3.1 | Надстройка над DOS, сеть | 16 | Нет | Есть |
1995 | Windows 95 | сеть | 16/32 | Нет | Есть |
1993 | Windows NT | сеть | 32 | с 1998 | Есть |
2000 | Windows 2000 | сеть | 32 | Есть | Есть |
2005 | Windows XP | сеть | 32 | Есть | Есть |
2007 | Windows Vista | сеть | 32 | Есть | Есть |
Техническое устройство с точки зрения пользователя
UNIX
С точки зрения пользователя UNIX устроен примерно так:
- Ядро. Работает с устройствами, управляет памятью и процессами.
- Текстовая подсистема, работа с системой через терминал. Причем для управления всеми возможностями ОС достаточно только текстовой подсистемы. Возможно вход через эту подсистему многих пользователей. Богатый набор как встроенных утилит, так и приложений, работающих в текстовом режиме.
- Графическая подсистема Xwindow. Запускается как процесс в системе.
- Система удаленного доступа в текстовом режиме. Позволяет полноценную работу с ОС в текстовом режиме. Потребляет мало ресурсов. Позволяет работать на сравнительно слабых компьютерах одновременно десяткам и сотням пользователей. Количество сессий ограничено ресурсами компьютеров.
- Система удаленного доступа в графическом режиме. Позволяет одновременно работать нескольким пользователям в графическом режиме. Количество сессий ограничено ресурсами компьютеров.
- Система передачи графического окна приложения на другой компьютер. Позволяет запустив приложение на одном компьютере, управлять им с другого компьютера, через окно приложения, передаваемое на этот другой компьютер. Количество сессий ограничено ресурсами компьютеров.
Windows
- Ядро. Работает с устройствами, управляет памятью и процессами, управляет графической подсистемой.
- Графическая подсистема. Обеспечивает интерфейс с пользователем. Приоритетная система для пользовательского интерфейса.
- Текстовая подсистема. Обеспечивает текстовый интерфейс с пользователем. Текстовый интерфейс весьма урезанный. Набор утилит текстового режима как встроенных, так и других производителей весьма куцый. Синтаксис и состав команд текстового режима меняется от версии к версии. Запускается только поверх графического режима.
- Система удаленного доступа. Появилась впервые, как встроенная в систему, в Windows NT Server 4.0. До этого были только продукты других фирм. В связи с тем, что запускается полноценная графическая сессия, кушает очень много ресурсов. Наличие системы удаленного доступа и количество одновременных сессий может вообще отсутствовать или быть ограничено в разных версиях из коммерческих соображений.
Сравнение концепций
Давайте теперь рассмотрим, чем отличается подход к работе в этих двух системах.
UNIX: Концепция «Toolbox»
Поскольку UNIX разрабатывалась инженерами и для инженеров, в ее основу была положена концепция toolbox (ящик с инструментами). Что это значит? Это значит, что при создании софта и встроенных утилит для UNIX не делали универсальные программы, каждая из которых выполняла бы внутри себя все, необходимые пользователю действия, а для каждой небольшой задачи создавалась своя утилита, которая выполняла свою задачу, только одну, но делала это хорошо. Дело пользователя было при помощи набора этих утилит выполнить операции, которые ему нужно сделать.
При этом из этого набора утилит можно составлять цепочки и последовательности действий, что позволяет легко автоматизировать рутинные, часто повторяющиеся операции.
Для того, чтобы утилиты могли обмениваться между собой результатами своей работы, в качестве носителя информации был выбран текстовый файл. Для обмена информацией между утилитами были изобретены «pipes» (трубы). При помощи «труб» информация с выхода одной команды может быть передана на вход второй, та ее обрабатывает, выдает свою информацию на выход, которая может быть передана на вход третьей и так далее.
В общем, в результате UNIX позволяет пользователю легко создавать простые программные комплексы, выполняющие повторяющиеся действия как по команде пользователя, так и в автономном режиме.
Такой подход имеет как плюсы, так и недостатки. С одной стороны он дает больший контроль над системой, гибкость в настройке, но при этом повышается порог вхождения в систему, или говоря простыми словами, прежде, чем что нибудь сделать, как правило, нужно изучить основы.
Windows: Концепция «Тостер»
В Windows доминирует другая концепция. Эта концепция — максимально облегчить вхождение пользователя в задачу. Программы в Windows как правило большие, на каждое действие есть пункт в меню или иконка. В системы программы связываются как правило с большим трудом.
Ухудшает ситуацию о построением комплексов на базе Windows то, что большинство программ — коммерческие и используют свои, бинарные и как правило закрытые форматы данных и файлов. Такой подход превращает компьютер в устройство, которое может выполнять ограниченный изготовителем ПО набор функций, в пределе в этакий своеобразный «тостер», который выполняет только то, что задумал его изготовитель.
Плюс такого подхода — легкость вхождения неподготовленного пользователя. Минус — то, что обманутый кажущейся легкостью пользователь вообще не хочет ничему учиться и не выполнять необходимых действий. На поводу идут и производители софта. Это одна из причин такого обилия документов отформатированных пробелами, пренебрежения безопасностью и как следствие вирусных эпидемий.
Заключение
Конечно, в обоих системах не доминирует свой подход на 100 процентов. Как в Windows есть возможность пользоваться текстовой консолью и создавать .bat файлы, так и в UNIX есть большой набор программ, со свойствами присущими скорее «тостерному» подходу. И все таки описанная разница в подходах есть и она достаточно ярко выражена.
Литература
1. http://ru.wikipedia.org/wiki/UNIX
2. http://ru.wikipedia.org/wiki/Windows
3. http://ru.wikipedia.org/wiki/ДОС
4. http://posix.ru/
5. http://ru.wikipedia.org/wiki/POSIX
In this article, we will be looking into the major difference between UNIX and Windows Operating System.
UNIX :
UNIX is a powerful, multi-user, and multitasking operating system originally developed at AT & T Bell Laboratories. This operating system is very popular among the scientific, engineering, and academic due to its most appreciated features like flexibility, portability, network capabilities, etc.
Windows :
Microsoft window is a Graphical User Interface (GUI) based operating system that provides graphical user-friendly alternatives for most of the command-line based functions. Microsoft introduced a series of versions with the latest functions.
Difference between UNIX and Windows Operating System :
Here we will discuss the various differences between UNIX and Windows operating systems, based on various parameters.
1. Licensing:
UNIX was developed as an open-source OS using C and Assembly languages. Since being open source UNIX, and its various Linux distributions account for the most used OS in the world. Unix and all its Linux distributions are available under the General Public License.
Windows Operating System is proprietary software owned by Microsoft, meaning its source code is not available to the public.
2. User Interface:
Unix operating systems are relatively harder to grasp and produce significant barriers for newcomers. However, some Linux distributions like Ubuntu are changing such perceptions by bringing in more GUI-based applications.
Windows Operating System on the other hand is designed with the outset of keeping the UI as simple and user-friendly as possible, so that non-IT people can easily use computers for their work.
3. Processing:
UNIX operating system supports Multiprocessing, meaning many processes are executed simultaneously. In Multiprocessing, every process has a separate address space and CPUs can be added for increasing computing power.
Windows Support Multithreading, meaning many threads are created from a single process for increasing computing power. In multithreading, many threads of a process are executed simultaneously where common address space is shared by all the threads.
4. File System:
UNIX operating system uses STD.ERR and STD.IO file systems or the UFS (Unix File System) and treats all physical drives as one logical drive. It has a robust and efficient file system. File system is represented as a hierarchical tree under the same root.
Windows on the other hand, uses File Allocation Table (FAT32) and New Technology File System(NTFS) systems for managing files and requires the owner of the executables before executing, files store in folders on different data drive like, C,D,E.
5. Users Accounts:
In the Linux system, there are three types of user accounts:
- Regular: These accounts have the moderate privilege to intended for routine works, it can perform only the task for access only those files and services for which it is authorized.
- Root: This account is the main user account of a Linux system, it has the highest privilege to work administrative level work to manage all the services. This is also known as superusers.
- Service: This account is generally used by services to run the process.
In Windows, there are three types of user accounts:
- Administrator: This account controls all the services and allows user to make changes and check the activities of other users
- Child: This account comes with Family Safety settings which is assigned by the admin.
- Guest: This account has no standard accounts with no privacy, it allows to other people use your computer without being able to change PC settings and install applications.
6. File Name Convention:
In Linux, we can save two files with the same name.
But in windows, we can not save with the same name. It generates errors:
7. Security:
UNIX is more secure by design. The primary protection on a Unix system is that executing a “.exe” file is much more difficult. Here executables cannot be processed without explicit permission as all processes in Unix are treated equally. But these are slowly changing as Unix distributions are moving more towards GUI and now relying on the application security itself.
Another advantage of Unix systems is that getting rid of viruses is easier, as viruses can only infect user accounts and the root remains intact and pure.
Windows is less secure in the sense that it is simple to execute files with minimal permission. These can further lead to the installation of Malwares unknowingly on the system.
8. Data Backup & Recovery:
In the earlier version of UNIX, salvaging data from a system when the device housing the said data is inaccessible, was not possible. But in some distributions of Linux like Ubuntu, a new feature is introduced called Live distribution can be used to recover data from an inaccessible device.
Recovery and Backup of data in the Windows system are much simpler and can be done using its inbuilt GUI for the same. It has an integration with OneDrive for data backup and recovery too.
9. Case Sensitivity:
Unix is completely case-sensitive, meaning the files with names “GFG.txt” and “gfg.txt” can be considered two different files. Windows, on the other hand, have optional case sensitivity.
10. Hardware:
Hardware support is limited in UNIX systems. Some hardware might not have drivers built for them. Windows has almost all the drivers for all the available hardware.
11. Reliability:
Unix is known for being very stable to run. Although the stability of Windows has significantly improved in recent years, most Unix systems are still far superior in this respect.
S. No. | Parameters | UNIX | Windows |
---|---|---|---|
1. | Basic | It is a command-based operating system. | It is a menu based operating system. |
2. | Licensing | It is an open-source system which can be used to under General Public License. | It is a proprietary software owned by Microsoft. |
3. | User Interface | It has a text base interface, making it harder to grasp for newcomers. | It has a Graphical User Interface, making it simpler to use. |
4. | Processing | It supports Multiprocessing. | It supports Multithreading. |
5. | File System | It uses Unix File System(UFS) that comprises STD.ERR and STD.IO file systems. | It uses File Allocation System (FAT32) and New technology file system(NTFS). |
6. | Security | It is more secure as all changes to the system require explicit user permission. | It is less secure compared to UNIX. |
7. | Data Backup & Recovery | It is tedious to create a backup and recovery system in UNIX, but it is improving with the introduction of new distributions of Unix. | It has an integrated backup and recovery system that make it simpler to use. |
8. | Hardware | Hardware support is limited in UNIX system. Some hardware might not have drivers built for them. | Drivers are available for almost all the hardware. |
9. | Reliability | Unix and its distributions are well known for being very stable to run. | Although Windows has been stable in recent years, it is still to match the stability provided by Unix systems. |
10. | Case Sensitive | It is fully case-sensitive, and files can be considered separate files. | It has case sensitivity as an option. |
Last Updated :
31 May, 2022
Like Article
Save Article
«Чтобы найти истину, каждый должен хоть
раз в жизни освободиться от усвоенных
им представлений и заново построить
систему своих взглядов»
— Рене Декарт.
Статья, которая сейчас открыта в вашем браузере, посвящена детальному рассмотрению архитектуры UNIX и Windows. В ней мы постарались заглянуть внутрь этих двух операционных систем, опустившись на уровень ядра. Без внимания не остались и ошибки (исключения), которые могут возникнуть во время работы ОС. В заключение мы попросили сравнить различия между Windows и UNIX экспертов российской компании ASPLinux (www.asplinux.ru), которым каждый день на практике приходится сталкиваться с операционными системами на низком уровне.
Структуру UNIX проще всего представить в виде двух слоев. Первым является ядро. Оно непосредственно взаимодействует с железом и обеспечивает переносимость всего остального ПО на компьютеры с разным аппаратным обеспечением. Ядро предоставляет программам определенный набор системных API, с помощью которых производятся создание процессов, управление ими, их взаимодействие и синхронизация, а также файловый ввод/вывод. Вторым слоем является программное обеспечение, прикладное или системное: командный интерпретатор, графическая оболочка и т. д.
Структура ОС UNIX
Заглянем глубже в ядро системы. Оно позволяет всем остальным программам общаться с периферийными устройствами, регулирует доступ к файлам, управляет память и процессами. Ядро — это связной, к которому обращаются посредством системных вызовов (запрашивая какую-то услугу). Связь эта — не односторонняя: ядро может и возвращать в случае необходимости какие-то данные. Основным достоинством ядра является строгая стандартизация системных API. За счет этого во многом достигается переносимость кода между разными версиями UNIX и абсолютно различным аппаратным обеспечением.
Структура ядра UNIX
Все обращения к ядру системы можно разделить на две категории: программа вызывает подсистему управления файлами или подсистему управления процессами. Первая отвечает за все, что связано с файлами: управление, размещение, доступ. Процессы же — это, в общем случае, любые запущенные программы. Поэтому подсистема управления процессами служит для их жизнеспособности, синхронизации и управления. Важно так же и то, что файловая подсистема и подсистема управления процессов могут общаться друг с другом: любой процесс может вызывать системные API для работы с файлами. Прелесть UNIX состоит в том, что эти API универсальны (да и в Windows наблюдается та же картина). Вот самые главные из них: open, close, read, write, stat, chown, chmod (суть почти всех вызовов интуитивно понятна из названия, кроме, разве что, последних трех, поэтому поясню — они служат для управления атрибутами файлов, информации о владельце и прав доступа) и др. Каждый из этих системных вызовов в программе на языке С является обычной функцией. Информацию по любому из них можно запросто найти в man.
Подсистема управления файлами — почти единственная из всех работает с драйверами, которые являются модулями ядра. «Почти», потому что есть еще и сетевая подсистема, которая работает, например, с драйвером сетевой карты и с драйверами различных современных сетевых устройств. Ее, однако, мы рассматривать не будем. Обмен данными с драйверами может проходить двумя способами: с помощью буфера или потока. Суть первого метода заключается в том, что для информации выделяется кэш (или сверхоперативная память, как его называли раньше), в который заносится необходимый блок данных. Далее информация из кэша передается к драйверу. Драйвер — единственный элемент ядра, способный управлять периферийными устройствами. Но подсистема управления файлами может взаимодействовать с драйвером и через поток. Поток представляет собой посимвольную передачу данных драйверу. Следует отметить, что способ взаимодействия с драйвером определяется не пользователем и не приложением. Он является характеристикой того устройства, которым управляет драйвер. Очевидно, что потоковое общение позволяет взаимодействовать более оперативно, чем общение через буфер. Ведь на заполнение буфера тратится время и, следовательно, возрастает время отклика.
Теперь более подробно рассмотрим подсистему управления процессами. Она отвечает за синхронизацию и взаимодействие процессов, распределение памяти и планирование выполнения процессов. Для всех этих целей в подсистему управления процессами включены три модуля, которые наглядно продемонстрированы на схеме. Хорошим примером взаимодействия подсистем управления файлами и процессами является загрузка файла на исполнение. В этом случае подсистеме управления процессов требуется обратиться к коллеге, чтобы считать исполняемые файлы.
Чуть выше мы перечисляли системные API для управления файлами. Теперь рассмотрим вызовы, служащие для работы с процессами: fork (создает новый процесса), exec (выполняет процесс), exit (завершает исполнение процесса), wait (один из способов синхронизации), brk (управляет памятью, выделенной процессу), signal (обработчики исключений) и др.
Следующие два модуля являются очень важными в понимании всей подсистемы управления процессами. Первый — модуль распределения памяти, позволяет избежать нехватки оперативной памяти. Хотя механизм свопинга и файлов подкачки (технически правильно это, кстати, называется виртуальной памятью) уже ни для кого не секрет, в тени остается другой факт: операционная система (в лице описываемой подсистемы) может либо скидывать все данные, относящиеся к конкретному процессу, на диск, либо скидывать страницы памяти (страничное замещение). Таким образом, модуль распределения памяти выполняет очень важную функцию — он определяет какому процессу сколько выделить памяти.
Виртуальная память была изобретена в 1962 году, в Англии при создании суперкомпьютера Atlas. В большинстве современных компьютеров оперативная память не так велика, как используемое процессором адресное пространство. Размер ОЗУ типичного персонального компьютера варьируется от десятков до сотен мегабайт. При запуске программа загружается с какого-либо накопителя в оперативную память. Если же программа не помещается в ОЗУ, то те её части, которые в данный момент не выполняются, хранятся во вторичном запоминающем устройстве, чаще всего винчестере, и такая память называется виртуальной. Безусловно, перед выполнением необходимая часть программы должна быть перемещена в оперативную память. Данные функции выполняет ядро операционной системы (диспетчер виртуальной памяти, находящийся в микроядре). И для программы и для пользователя эти действия прозрачны. Естественно, на запросы к виртуальной памяти уходит гораздо большее время, нежели к ОЗУ.
Второй модуль — планировщик. Его задача не менее важна. UNIX — мультизадачная ОС, то есть одновременно может выполняться множество процессов. Мы, однако, знаем, что в фиксированный момент времени на одном процессоре может выполняться только одна команда. Именно поэтому нужен виртуальный рефери, который будет определять, какому процессу исполняться сейчас, а какому — через секунду. На практике же планировщик переключает контекст, то есть перед тем, как остановить исполнение какого-то процесса, он запоминает состояние регистров, памяти и т. д., а уже после этого запускает другой процесс в его собственном адресном пространстве. И еще один тонкий момент: каждый запущенный процесс «думает», что он единственный. Дополнительно существует механизм приоритетов. Очевидно, чем выше приоритет, тем быстрее начнет исполняться процесс. Процессы могут также обмениваться между собой информацией. В случае их синхронного взаимодействия синхронизацию осуществляет модуль взаимодействия (например, функция wait).
Вот мы и подошли к последнему уровню — аппаратному контролю. На данном уровне происходит обработка прерываний и связь ядра с железом. Здесь следует отметить лишь пару моментов, во-первых, прерывания могут «прерывать» работу процессора и требовать внимания к себе (после этого процессор без проблем возвращается к выполнению оставленных процессов), а, во-вторых, обработку прерываний осуществляют специальные функции ядра.
Windows 2000/XP построены на архитектуре микроядра (microkernel architecture). ОС Windows 95/98 используют монолитное (monolithic) ядро. Микроядра являются сравнительно небольшими и модульными. Благодаря последнему новые устройства зачастую добавляются как модули, которые можно загружать/выгружать на этапе исполнения без перекомпиляции ядра. На архитектуре микроядра построены также FreeBSD и Mac OS X. Монолитные же ядра используются еще и в Linux. Они оптимизированы для более высокой производительности с минимальными контекстными переключениями. Такая архитектура упрощает поддержку кода ядра для разработчиков, но требует перекомпиляции ядра при добавлении новых устройств. Следует отметить, что описанные здесь различия являются «классическими», на практике монолитные ядра могут поддерживать модульность (что зачастую и происходит), а микроядра могут требовать перекомпиляции.
Архитектура Windows
Структура Windows 2000/XP не отличается оригинальностью: ядро системы (исполняется на максимально приоритетном уровне процессора) и пользовательские подсистемы (исполняются на минимально приоритетном уровне).
Ядро системы является критичной частью кода, любые ошибки, происходящие в ядре, приводят к фатальному краху системы — «синему экрану». Фактически — это ошибки типа «Нарушение общей защиты». Как только код ядра начинает обращаться в запрещенные для него области памяти (попытка прочитать или записать данные, исполнить неверную инструкцию, переход на запрещенную область), срабатывает система защиты памяти процессора, и управление передается системному обработчику исключений. Обработчик исключений не может восстановить корректное поведение кода. Все, что он делает — это вывод дампа на синий экран с указанием типа ошибки и содержимого памяти в области, где сработала защита.
Пользовательские подсистемы не столь критично влияют на работу системы в целом, так как они изолированы друг от друга и от ядра средствами управления памятью и собственно процессором. Ошибки, возникающие в приложениях, исполняются на уровне пользователя, то есть на менее привилегированном уровне, нежели ядро. Поэтому, система в состоянии контролировать процесс. При возникновении же ошибки или сбоя управление передается обработчику ошибок, который называется «Doctor Watson». Он принудительно завершит приложение. Ядро системы и остальные подсистемы остаются в целости и сохранности.
Ядро UNIX/Linux имеет два вида исключений, которые обычно называют «oops» и «panic». Почти в каждой операционной системе паника происходит в тех случаях, когда ядро обнаруживает серьезную неисправность. Если система каким-либо образом повредила сама себя, ей требуется остановиться немедленно, пока она не произведет необратимых критических изменений (типа уничтожения файловой системы). Везде, где только возможно, UNIX/Linux пытается детектировать проблему и справиться с ней без остановки всей системы. Например, многие ситуации типа «oops» приводят к завершению процесса, который нормально запустился, но потом зациклил систему. Бывают, однако, ситуации, когда все настолько плохо, что полная паника является наилучшим выходом. Считается, что пользователи стабильных версий ядра не должны встречать ни «паник», ни «oops». Но в реальном мире они иногда происходят.
Недавно найденный «TF-баг» (смотрите здесь) является хорошим примером паники. Процессор пытается передать управление процессу, которого не существует. Это приводит к краху всей системы. В данном случае, у системы нет другой альтернативы, чем запаниковать.
Ядро, поставляемое с Red Hat Linux 7.3 (и некоторыми другими дистрибутивами), содержит баг в файловой системе ext3. Эта ошибка приводит к «oops», завершая время от времени некоторые процессы (также этот баг приводит к замедлению всей системы). Хотя данная ошибка уже исправлена (патч есть и в обновлении от Red Hat), этот случай познакомил многих пользователей с ошибками типа «oops».
Ядро Windows 2000/XP состоит из нескольких системных компонентов, каждый из которых отвечает за определенный набор задач. Основные компоненты ядра:
Микроядро (Microkernel) — компактный код, можно сказать, сердце системы. В рамках микроядра работают ключевые службы: диспетчер памяти, диспетчер задач и другие.
Слой абстрагирования (Hardware Abstraction Layer, HAL). Полностью абстрагирует код системы от конкретного аппаратного оборудования. Использование HAL позволяет обеспечить переносимость 99% кода системы между различным оборудованием.
Диспетчер Ввода/Вывода (Input/Output Manager). Полностью контролирует потоки обмена между системой и устройствами. Драйверы устройств работают в контексте I/O Manager. Если драйвер написан с ошибками и может привести к сбою — это вызовет фатальный крах ядра и всей системы. 70% случаев фатальных сбоев («синий экран») — есть результат некорректного поведения драйверов устройств.
Windows XP содержит встроенный механизм контроля драйверов: правильно написанный и тщательно протестированный драйвер поставляется с цифровой подписью (Driver Signing). Правильная настройка системы заключается в запрещении установки драйверов без корректной подписи.
Модуль управления объектами (Object Manager), управления виртуальной памятью (Virtual Memory Manager), управления процессами (Process Manager), управления безопасностью (Security Reference Monitor), управления локальными вызовами (Local Procedure Calls Facilities) — важные компоненты ядра системы подробно рассматриваться не будут.
Наконец, особое по значению и важности место в ядре системы занимает модуль графического интерфейса — Win32k.sys. Фактически — это часть подсистемы Win32, отвечающая за прорисовку и управление графическим интерфейсом. Этот модуль расположен в ядре специально для того, чтобы существенно повысить производительность графических операций ввода/вывода. Однако размещение столь критической части в ядре накладывает чрезвычайно строгие требования к корректности его исполнения. Фактически, ошибка в коде Win32k.sys приведет к краху системы. Разработчики Windows уделяют огромное внимание этому модулю, и именно он наиболее тщательно протестирован. Опыт эксплуатации систем Windows показывает, что код Win32k.sys работает абсолютно корректно и не содержит фатальных ошибок. Однако некорректный драйвер видеосистемы может все испортить.
В Windows также реализованы дополнительные функции для повышения стабильности работы ОС. Система защиты файлов Windows автоматически предотвращает случайные изменения системных файлов операционной системы, вносимые пользователем или приложениями, эффективно защищая всю систему в целом. То есть, когда какая-то программа внесла изменения или просто заменила системные файлы Windows, считая, что у программы более новые, Windows отслеживает изменения и уведомляет об этом пользователя, говоря, что для стабильности системы желательно восстановить исходные файлы. Так же существует поддержка нескольких версий DLL, что повышает совместимость приложений и повышает стабильность.
Итог
Различия между Windows и UNIX для нас прокомментировали разработчики из компании ASPLinux.
«Операционные системы Unix и Windows достаточно сильно отличаются в реализации различных сервисов и служб. В соответствии с темами, затронутыми в этой статье, можно отметить несколько глобальных различий.
В Unix/Linux графическая система существует отдельно от ядра и функционирует как обычное приложение. В операционных системах Windows графическая система интегрирована в ядро. В случае использования операционной системы на рабочей станции, особенно при запуске графикоемких приложений, возможно, лучше, когда графическая система входит в ядро — в этом случае она может быстрее работать. А при работе на сервере предпочтительней отделение графической системы от ядра ОС, так как она загружает память и процессор. В случае Unix/Linux графическую систему можно просто отключить, к тому же, если системный администратор ее все-таки хочет использовать, в Linux есть несколько графических оболочек на выбор, некоторые из них (например, WindowMaker) достаточно слабо загружают машину. Эта же особенность Unix-образных операционных систем позволяет запускать эти ОС на машинах с весьма скромными объемами ОЗУ и т.п. В случае Windows же графическая система слишком тесно интегрирована в ОС, поэтому она должна запускаться даже на тех серверах, на которых она вовсе не нужна.
Отметим также методику разделения прав доступа в Windows 2000 и Unix/Linux. В первом — разделение прав доступа основано на ACL (access control lists), то есть, к примеру, можно настроить систему таким образом, чтобы администратор не имел возможности управлять файлами пользователей. У Unix/Linux же всегда есть суперпользователь — root, который имеет доступ абсолютно ко всему. То есть теоретически модель безопасности в Windows лучше: чтобы полностью завладеть хорошо настроенной системой Windows, хакеру придется ломать больше, в Unix/Linux же достаточно взломать доступ к root. (В Unix/Linux используются более старые технологии, тем не менее, некоторые дистрибутивы Linux сейчас начинают поддерживать ACL, среди них — ASPLinux 7.3 Server Edition). Но теория несколько смазывается практикой с той стороны, что в Windows не так быстро, как в Linux, заделываются «дыры», что уже относится к плюсам открытой модели разработки. В результате оказывается, что в Windows по статистике больше дыр, через которые злоумышленник может пробраться в систему. Но, опять же, точно о количестве дыр в Linux и Windows можно будет сказать только тогда, когда количество пользователей обоих видов ОС будет примерно одинаковым.
В Linux поддерживаются несколько файловых систем, наиболее продвинутые — это Ext2, Ext3, XFS. ОС Windows завязана по большому счету на одну файловую систему — NTFS или FAT 32. Файловые системы Ext2, Ext3, XFS по оценкам работают быстрее. Принципиальное же отличие в том, что в UNIX/Linux вообще нет понятия диска, физического или логического. Вся работа с устройствами хранения данных организуется через специальные файлы устройств, которые отображают физический носитель (диск, лента и т. п ) или его части (разделы) в файловую систему.
Важное отличие — наличие в Windows технологии ActiveX, нечто подобное в Unix/Linux реализуется с помощью CORBA и Bonobo. Эта технология, с одной стороны, предоставляет пользователю множество удобств, с другой стороны — она же допускала в свое время такие вещи, как автоматический запуск Outlook’ом вируса, пришедшего по почте. Одно из важных отличий этих технологий в том, что элементы ActiveX могут внедряться в текст HTML, что имеет как ряд достоинств, так и недостатков.
Можно перечислить еще ряд отличий Unix-подобных операционных систем от Windows, например, встроенную поддержку удаленного доступа в Unix и отсутствие оной в Windows по умолчанию (она реализуется в серверных версиях Windows, а также с помощью дополнительных средств, например, Citrix). В Unix/Linux и Windows сильно различаются сетевые подсистемы (IP-stack), по ряду оценок сетевая подсистема Unix/Linux эффективнее.
Можно было бы упомянуть богатый набор ПО, которое может поставляться вместе с Linux, между тем, Windows также развивается в этом направлении. Дополнительные отличия же в архитектуре в основном сводятся к отличиям работы монолитных и модульных ядер, которые также зачастую не являются преимуществами или недостатками, а просто отличиями. При всем при этом можно с уверенностью сказать, что характеристики работы Windows или Linux гораздо больше зависят от аккуратности и квалификации пользователя, чем от архитектуры той или иной ОС».
Мы искренне надеемся, что нам удалось описать основные различия двух систем. Если вы считаете, что какой-то аспект «анатомии» Windows или UNIX незаслуженно пропущен, милости просим в наш форум. Автор статьи (e-mail в начале) с удовольствием выслушает все ваши мысли.
Наверное, многие сочтут, что попытка эта (как и многие другие, и наверняка и эта — не последняя), была «зряшной». Я скажу: «Ну и пусть». Пытаться все равно нужно :). Ибо вся эта бесконечная возня вокруг элементарных в общем-то вещей, уже начала несколько утомлять. Против своего обыкновения, в этом материале я как раз очень старался ругани не разжигать, более того — по основной задумке, он является попыткой враждующие стороны хотя бы немного примирить. С другой стороны — объективностью жертвовать не в моих правилах, поэтому одинаковая доля внимания будет уделена не только достоинствам, но и недостаткам. Читателям же мне хочется пожелать только одного: помните, что «достоинств вообще», равно как и «недостатков вообще» — практически не существует. По большому счету, за исключением совсем уж «летальных» (и потому довольно очевидных) случаев, их вообще не существует. А существуют особенности функционирования [некоего устройства или программы], которые будучи приложены к не предназначенной для решения данными средствами задаче, дают совершенно закономерный плохой результат.
Специалист подобен флюсу: полнота его одностороння.
(Козьма Прутков)
Во-первых, для начала «восстановим справедливость», и приведем «правильное название» нашей любимой флеймовой темы. Звучит оно (чаще всего) немного не так, как в заголовке материала, а более конкретно: «Linux vs. Windows». Почему же в заголовке материала именно UNIX? Для меня ответ очевиден: потому что если мы сравниваем семейства операционных систем — то сравнивать нужно именно семейства, а не всех представителей одного с одним (да еще и во многих лицах) представителем другого. Поэтому — UNIX. Который не только Linux, но и xBSD (FreeBSD, OpenBSD, NetBSD), и Solaris, и даже экзотические Irix, HP-UX, и AIX. Все эти операционные системы выросли из одной идеологии, и хотя некоторые из них и ушли «в дремучие лесные дебри», но, тем не менее, различия между теми же Solaris и Linux мне не кажутся чем-то особенно выдающимся по сравнению с различиями между, скажем, Windows 3.1 и Windows XP. А стало быть, раз мы на втором месте в нашем любимом «vs.» пишем именно «Windows» (а не «Windows 95 OSR2 + Service Pack […]») — то на первом месте по справедливости нужно писать именно «UNIX», а иначе сравнения просто не получается.
Ну а во-вторых (и это логично следует из «во-первых»), мне бы хотелось сразу же отмежеваться от «основной флеймогонной» темы, связанной с рассмотрением пользовательской части проблемы, и напрямую затрагивающей финансовый вопрос. Именно начисто отмежеваться. Ибо мне, честно говоря, не понятна сама суть проблемы. Да, за Windows на компьютере нужно платить. Да, за некоторые разновидности UNIX (чаще всего имеется в виду различные вариации Linux) платить «не нужно». Рассмотрим подробнее эти «нужно» и «не нужно», чтобы понять, почему же на самом деле этот ракурс является ярковыраженным бестолковым флеймом, и вообще не может быть принят к рассмотрению в качестве основания для конструктивного диалога.
Платная Windows
Каждый, кто обладает хотя бы самыми зачаточными знаниями в области экономики, знает, что цена некоего продукта, взятая в отрыве от всего остального, практически ни о чем не говорит. Представьте себе, к примеру, инопланетянина, который прилетел к нам на своей «тарелочке» из какой-нибудь далекой галактики, и узнал, что топлива, идеально подходящего для его звездолета, на Земле нет, но после небольших переделок двигателя может сойти и керосин, который стоит 45 копеек за литр. Что ему дадут эти сведения? А ничего. Потому что он во-первых не знает, что такое «литр», во-вторых — не знает что такое «копейка», в-третьих, он не знает, сколько этих самых загадочных «литров» керосина будет расходовать его двигатель после переделки, ну и наконец-таки, в-четвертых — он не знает, сколько будут стоить на местном рынке те чудесные марсианские водоросли, которые он планирует продать, для того чтобы заработать на керосин. При всей абсурдности вышеописанной ситуации, рассуждающие о «платности Windows» зачастую очень похожи на этого инопланетянина — они рассуждают о «сорока пяти копейках», практически не имея представления ни о чем вышеописанном.
Что такое «литр» и какой расход топлива
А в нашем случае попросту: «сколько нужно Windows?». Домашний пользователь, покупающий дистрибутив операционной системы для того, чтобы установить его на свой компьютер, покупает его один раз, как минимум на несколько лет (те, кто программное обеспечение покупают — поверьте, апгрейдят его отнюдь не со скоростью выхода новых версий, а исключительно в случае необходимости!), и исходит при этом из сопоставления цены продукта, и количества лично им зарабатываемых денег. При этом, как правило, он имеет достаточно смутное представление о том, какой именно он желает видеть техническую поддержку данного продукта, за исключением «общечеловеческого» требования «чтобы все работало и ничего не глючило» (которое на данный момент, увы, практически невозможно удовлетворить, а раз так — невозможно и всерьез рассматривать как требование). Системный администратор или IT-менеджер крупной компании рассматривает вопрос установки (в частном случае — покупки) операционной системы на сотни или тысячи рабочих мест, при этом достаточно хорошо себе представляя, сколько будет стоить отсутствие нормальной технической поддержки. И оперирует он при этом отнюдь не своим личным кошельком, а частью доходов своей компании (то есть вынужден не только опираться на свои личные предпочтения, но и уметь аргументировано объяснить свой выбор лицам, распоряжающимся этими доходами). Можно ли в тупую приравнивать друг к другу эти подходы, подводя продукт, на который они проецируются, под общий знаменатель «дорого» или «дешево»? По-моему — нет. Следовательно, мы уже уходим от абсолютных «дорого» и «дешево», переходя от утверждения к вопросу: «дорого или дешево — для кого?».
Что такое «керосин»
А в нашем случае: «Какая именно Windows?». Напомню, что в настоящий момент времени все еще можно купить залежавшуюся на складах Windows 98SE, до сих пор официально продаваемую Microsoft Windows Me, а также опять-таки залежалую, но все еще имеющую свою рыночную цену Windows NT 4.0 (Workstation, Server, Terminal Server, etc), плюс Windows 2000 (Professional, Server, etc), Windows XP (Home, Professional), и сегодня — даже Windows Server 2003. Так, простите, о каком же «керосине» мы говорим? Говорим ли мы о покупке «частным» пользователем Windows Server 2003? Да, в этом случае, конечно, «дороговато будет». Говорим ли мы о покупке корпорацией с тысячами рабочих мест Windows 98SE или Windows XP Home? Тогда «дурновато будет», сорри за невольный каламбур. Или все-таки пользователи пусть покупают последнее, а корпорации — первое? «Ограничение свободы», скажете вы? Отнюдь нет. У каждого есть святое право сдать экзамены по вождению «КАМАЗа», и ездить на нем на работу. Однако в этом случае большинство нормальных людей почему-то «ограничивают» себя вполне сознательно…
Сколько стоят водоросли и что такое 45 копеек
А в нашем случае: «Сколько у меня денег?». Разумный вопрос. И разумно будет вспомнить, к примеру, о том, что средний уровень заработной платы в тех странах, где платные операционные системы покупают, а не воруют (даже если считать цифры «от Microsoft» завышенными в несколько раз — они все равно впечатляют) соотносится с ценой данной конкретной операционной системы в довольно забавных пропорциях. И вполне может быть приравнен к одному походу за покупками в супермаркет (семьи из двух человек), или ужину с друзьями в средней руки ресторане. А ориентируется любой коммерческий производитель именно на большинство своих покупателей, и это объективный закон рынка. Более того — хотя точные данные и не лежат в свободном доступе, но по косвенным признакам можно с достаточной уверенностью утверждать, что весьма существенная часть продаж лицензионных копий Microsoft Windows приходится не на розницу, а на готовые системы с предустановленными «на заводе» OEM-версиями данного продукта. Которые стоят как для производителя, так и для покупателя ощутимо дешевле, чем Retail («коробочные») версии.
Бесплатный UNIX
Для начала, констатируем очевидный, но от этого не менее значимый факт: вовсе не любой UNIX бесплатен. Собственно говоря, на этом можно было бы данную часть (учитывая ракурс, который избрал я) считать законченной… Но — нет. По одной простой причине, которую совершенно не имеет смысла умалчивать: бесплатные UNIX есть, а вот бесплатной Windows — нет. Это правда, и глупо закрывать на нее глаза. Поэтому все-таки поговорим о «бесплатности» UNIX немного более подробно.
Начнем с того, что «бесплатность» его формально опровергается чрезвычайно легко: получить абсолютно бесплатную копию любой разновидности UNIX практически нереально. Либо вы заплатите деньги за доступ в Internet и объем скачанного с сервера производителя дистрибутива (либо их заплатит ваш работодатель, которому вы навешаете лапши на уши относительно того, чем был вызван такой объем трафика), либо пойдете на базар и купите CD, сформированный кем-то, скачавшим такой дистрибутив, но так или иначе деньги вы все равно заплатите. Какие-то. В конце концов, даже если вы придете к другу с винчестером и абсолютно бесплатно перепишете себе ISO-образы — все равно вам потом придется заплатить за чистые «болванки», на которые они будут развернуты, и косвенно «заплатить» амортизацией вашего пишущего привода. Хотя, опять-таки, будем справедливы — затраты эти существенно меньше.
Однако вспомним о той самой пресловутой «технической поддержке». Которая предоставляется всем пользователям Windows бесплатно и на неопределенный срок (до момента зачисления данной версии ОС в разряд «unsupported», который, как правило, наступает не раньше чем года через три). И которая, кстати, доступна, не всем пользователям Linux, а в подавляющем большинстве случаев исключительно тем, кто купит платный, «коробочный» дистрибутив. У компании RedHat, к примеру, минимальный вариант такого дистрибутива стоит сейчас $39,95. А «продвинутый» — так и вовсе $149,95. При этом поддержка этих дистрибутивов (если я правильно понял информацию, размещенную на сайте RedHat), ограничивается 30-ю и 60-ю днями, соответственно. Или, к примеру, чтобы не зацикливаться на RedHat, можно посмотреть розничный прайс на различные «бесплатные» UNIX от родной 1C. В котором есть, конечно, и цифры менее $10, но, заметьте, есть и $4199. Хорошая «бесплатность», не правда ли?
Подводя итоги «флейма о бесплатности»
…Я (никому не навязывая) сформулирую свое видение данной проблемы кратко: никто никого не заставляет что-либо покупать. Пользователь, заплативший деньги за дистрибутив Windows, имеет полное моральное право (почему «моральное» — см. прилагаемую к продукту лицензию) возмущаться теми особенностями функционирования данной операционной системы, которые пришлись ему не по душе. Пользователь, заплативший, условно скажем, «некие копейки» за дистрибутив «бесплатного» UNIX, имеет точно такое же право. Хотя бы на том простом основании, что я еще не видел ни одного разработчика дистрибутивов бесплатных UNIX, который бы говорил о непригодности своей ОС для того круга задач, для которых он ее позиционирует. В то время как наличие ошибок и «глюков» делают данную конкретную ОС в данном конкретном частном случае для решения задач пользователя именно непригодной. И поскольку с точки зрения закона ни Microsoft, ни RedHat, ни ALT Linux все равно практически ни за что не отвечают, рассматривать права пользователя нам остается исключительно «в моральном аспекте». В моральном же аспекте любой пользователь имеет право быть недовольным работой продукта, относительно которого производитель обещал, что продукт будет работать, а он — не работает.
Опять-таки — тем, кто заплатил за Windows, совершенно глупо жаловаться на то, что они «зря потратили свои деньги», учитывая существование «почти бесплатного» UNIX. В свою очередь — тем, кто не почти ничего не заплатил за UNIX, совершенно глупо жаловаться на то, что он работает «кривее» Windows — жаловаться нужно скорее на собственную скаредность (или бедность). Надеюсь, что после всего вышеизложенного читателям станет понятно по крайней мере то, почему именно я отказываюсь от рассмотрения основного предмета спора с финансовой точки зрения. Позволю себе заметить, что, учитывая собственный возраст и длительность работы в IT-индустрии, я не назвал бы хорошей мыслью попытку переубедить меня в данном вопросе. Нет, я отнюдь не утверждаю тем самым свою правоту. Я всего лишь скромно намекаю «потенциальным критикам», что в данном случае автор просто-напросто изначально отказывается спорить с ними на вышерассмотренную тему. Со всеми остальными — спорьте, никаких проблем.
Ну и наконец-то — «собственно subj»
Итак, UNIX vs. Windows. Для начала давайте отследим хотя бы по самым верхам историю развития этих операционных систем. На самом деле, даже такое элементарное, казалось бы, действие, продемонстрирует нам (забегая вперед) всю сложность и неоднозначность рассматриваемого вопроса. А попросту (я искренне надеюсь!) — объяснит, что сравнивать теплое с мягким можно исключительно в разрезе «приятно или неприятно», на каковой разрез русский народ уже давно отозвался знаменитым «на вкус и цвет — товарищей нет».
История и развитие UNIX
UNIX — операционная система, зародившаяся на мейнфреймах, что уже говорит специалистам, разбирающимся в вопросе, довольно много. Однако я все же возьму на себя смелость попытаться описать основные принципы работы (как мейнфрейма, так и его операционной системы) «на пальцах» для тех, кому сталкиваться с этой разновидностью компьютеров не приходилось. Разумеется, заранее извиняясь перед истинными ценителями кошек, хорошо умеющими их готовить :), за «популяризаторскую» грубость аналогий, наивность, и примитивность. Итак, мейнфрейм.
Прежде всего, это «компьютер, на котором никто не работает». По крайней мере с обычной пользовательской точки зрения, которая подразумевает под «работой на компьютере» усаживание в кресло рядом с системным блоком, нажатие кнопки «Power», и так далее и тому подобное. За мейнфреймом таким образом работает исключительно системный администратор, причем в случае если последний — настоящий специалист, происходит это пару раз в год, по очень большим праздникам. Остальные пользователи работают на терминалах. Которые, по сути, являются тоже небольшими компьютерами, но не самостоятельными, а предназначенными исключительно для организации интерфейса между пользователем и мейнфреймом. При этом в ОС мейнфрейма изначально пишется в расчете на то, что таких пользователей будет относительно много — в противном случае теряется весь смысл связки «терминал — мейнфрейм», состоящий в том, что один относительно мощный компьютер обслуживает нужды многих людей.
Соответственно, исходя из исходных (обусловленных решаемой задачей) предпосылок, развивались UNIX-подобные операционные системы в основном в направлении обеспечения высокой собственной надежности (когда «умирает» мейнфрейм, на котором посредством терминалов работала сотня-другая человек — это весьма неприятное событие), добавления востребованных пользователями сетевых сервисов (ибо ОС для мейнфрейма опять-таки ввиду своей природы изначально сетевая), а также оптимизации распределения ресурсов между многими пользователями, и повышения общего быстродействия — то есть опять-таки отнюдь не скорости исполнения какой-то одной, конкретной задачи, а уменьшения времени отклика системы применительно к каждому конкретному пользователю (теоретически — независимо от того, какое их количество обслуживается в данный момент). Двумя словами — UNIX развивался как средство для обеспечения активной работы многих пользователей в той или иной разновидности компьютерной сети. Кроме того, из-за изначальной ориентированности на обеспечение одновременной работы многих пользователей, в UNIX довольно быстро появились и развились средства для распределения нагрузки по их обслуживанию между несколькими физическими компьютерами. Ну и в завершение стоит сказать, что в связке «UNIX и Internet» не только Internet оказывал влияние на формирование UNIX, но и UNIX оказал немалое влияние на те подходы, которые использовались при построении Глобальной Сети.
История и развитие Windows
Кратко? Запросто: «исправьте плюсы на минусы, а минусы — на плюсы». Или еще короче, в три слова: «выверните все наизнанку». Windows развилась из классической однопользовательской системы для персонального компьютера — из Microsoft DOS. Разумеется, попытки притянуть за уши «прямое наследование» из разряда «Windows XP по-прежнему всего лишь оболочка» на данный момент никак иначе кроме как несусветной глупостью назвать нельзя, но действительно — именно из «коротких штанишек» DOS (с каждой новой итерацией проходя через все новые ступени отказа от составляющих этих штанишек), и развилась та операционная система Windows, которую мы наблюдаем сейчас.
Не совсем многозадачная. Та же Windows 3.x еще умела запускаться в «нерасширенном» режиме, в котором задача, перемещенная в background просто тихо «замораживалась», пока снова не станет основной. И даже в расширенном режиме многозадачность тогдашней Windows была кооперативной, а не вытесняющей — то есть приложение должно было само отдавать другим часть процессорного времени, и, будучи некорректно написанным, запросто могло «сожрать» все системные ресурсы, ни оставив другим ничего. Однако даже сейчас, когда все эти «нелады» позади, и поддержка не только многозадачности, но даже и многопоточности, является в Windows стандартом де-факто, все равно механизм работы «равные приоритеты для всех» включается в десктопных версиях этой ОС вручную, по умолчанию же большинство ресурсов отдается тому приложению, которое является активным. Недостаток? А это как посмотреть… Я, например (особенно учитывая возможность настроить систему по-другому) назову это скорее «особенностью», чем недостатком. Но, в то же время, особенностью, совершенно однозначно указывающей на корни, и лежат они в «изначальной однопользовательскости» Windows. К слову — даже в не такой уж и старой Windows 9x разделение между пользователями сугубо условно, не говоря уже о том, что одновременная работа нескольких невозможна в принципе.
Более того — не только однопользовательская, но до недавних пор еще и «весьма умеренно сетевая», а говоря попросту — с «прикрученной сбоку» сетевой функциональностью, которая, можно сказать, практически являлась не частью собственно ОС, а скорее неким сторонним, дополнительным сервисом. Собственно говоря, статус «нашлепки» работа в сети имела в Windows довольно долгое время опять-таки исходя из основной задачи, которая стояла именно перед этой операционной системой. А обеспечения возможности работы в сети (и уж тем более высокой функциональности сетевых функций и сервисов) у Windows довольно долгое время даже в списке основных достоинств не было.
Как же развивалось «это чудо»? Что самое забавное — именно «в сторону UNIX»! Добавление сетевых сервисов и возможности подключения терминальных пользователей, появление «истинной» вытесняющей многозадачности, постоянное совершенствование механизма распределения ресурсов, появление «серверных» версий, нормальной поддержки работы в сети… Фактически, внешне — просто-напросто добавлялись и оттачивались именно те функции, которыми UNIX обладал, будем для простоты считать, изначально.
Однако не все так просто, как кажется, ибо «гадким утенком» Windows была очень недолго, и некоторыми изначальными достоинствами которых у UNIX не было или же они были развиты недостаточно хорошо, она также обладала практически изначально. Первым и главнейшим из них (с моей точки зрения) является графический интерфейс. И вот тут-то и сказалась положительно ее «однопользовательская» концепция. UNIX, ориентированный прежде всего на работу с терминалами, свою графическую подсистему строил по тому же принципу — клиент-серверному. Windows это было просто незачем, поэтому вместо громоздкой связки из X-сервера, X-клиента, сервера шрифтов, и тому подобных чисто сетевых решений, был сделан внешне довольно простенький но очень функциональный и самое главное — простой и быстрый механизм GUI/GDI. Да — не очень хорошо пригодный для организации терминального доступа. А зачем?! Система-то — в основном «ПК»-шная, однопользовательская!
Вторым своим дыханием Windows обязана Дэвиду Катлеру (David N. Cutler) — «отцу» Windows NT, которая изначально планировалась как ОС, которая учтет все ошибки более ранних операционных систем и по возможности будет избавлена от «груза прошлого». Что интересно — была у Microsoft и «промежуточная итерация» в виде совместного проекта с IBM — OS/2. Однако закончилась эта попытка, к чести Microsoft, так, как ей и следовало — «преобразованию DOS в полноценную многозадачную систему» (по сути, OS/2 была наиболее близка именно к этой концепции) не суждено было завершиться, и несмотря на выход первых двух версий, Microsoft принято было решение начать все с чистого листа. Были ли данное решение единственно верным — судить уже поздно, но факт состоит в том, что впервые с момента рождения UNIX, была создана серьезная, масштабируемая 32-разрядная ОС, претендующая на «новое слово осестроения». Тогда же в общих чертах зародилась концепция, которую позднее, в Windows 2000, мы увидим под именем Windows Driver Model (WDM). Все аппаратные ресурсы были полностью «виртуализованы» и прямой доступ к ним для пользовательского ПО однозначно запрещен. Также были введены понятия HAL и HEL (Hardware Abstraction/Emulation Layer), которые оказались настолько потрясающе удачными с точки зрения программистов, что за одно только это достоинство новое ядро (NT) получило заслуженный «жирный плюс» в табели о рангах разработчиков прикладного и системного ПО и компьютерного hardware. К слову, насколько мне известно, в UNIX даже подобия HAL/HEL до сих пор нет, и вряд ли появление такого рода абстракций вообще возможно, учитывая идеологию системы.
Производителей ПО Microsoft начала довольно-таки безжалостно «лупить по рукам», принуждая к использованию стандартного Win32 API — и ничего более. К слову, именно последний шаг породил еще одну «волну псевдо-глюков», выразившуюся в неработоспособности многих программ, написанных «в обход ОС», которые под Windows NT4/2000 нормально функционировать уже не могли из-за того что система попросту «не давала им лезть куда не след». Впрочем, эта волна быстро схлынула, оставив после себя лишь некоторое количество трупиков тех, кто так и не смог освоить Win32 API :). Как по мне — и поделом. Конечно, Windows NT 3.5, как и всякий «первый блин» вышла «слегка комом» и была (именно за счет повышенной отказоустойчивости) достаточно прожорливой и неторопливой, но уже Windows NT 4.0 обрела почти все черты нормальной и устойчивой ОС, а Windows 2000 стала для Microsoft своеобразным триумфом. Что же до «прожорливости», то ее удалось «сгладить» за счет элементарного роста производительности компьютерного железа — сейчас средний современный ПК уже вполне успешно «тянет» Windows 2000… правильно — потому что он намного мощнее среднего компьютера тех времен.
Современность
Быть может, многие уже поняли, к чему я веду, но нелишним будет обозначить основную суть выводов явным образом: фактически, сейчас мы наблюдаем, как Windows идет навстречу UNIX, а тот, в свою очередь… да, именно «навстречу Windows»! Появление многочисленных вариантов «десктопных Linux» с всевозможнейшими графическими «мастерами установки», пошаговыми инструкциями по установке (человеческим языком писаными, или, по крайней мере, стремящихся быть таковыми), постоянная и непрекращающаяся работа над совершенствованием графической подсистемы, появление более-менее полноценных офисных пакетов и другого «пользовательского» ПО, попытки (справедливости ради — пока не очень удачные) ввести понятие компонентной модели и поддержку UNICODE — это именно тот путь, по которому пошли многие разработчики ядер и дистрибутивов бесплатных UNIX, и это — очень знаковый симптом. С другой стороны — Windows явно «рвется» на типичный UNIX-рынок — веб-серверов, серверов приложений и баз данных (на забываем, что те же Solaris и AIX — это все равно UNIX). В принципе (хоть автору и не известно ни одного крупного, заслуживающего упоминания примера), сейчас на базе этой ОС теоретически можно строить даже кластеры.
Ну а именно сегодня, мы наблюдаем довольно-таки классическую ситуацию, когда ОС, развивающаяся в «несколько неродном» направлении, уже более-менее сносно может делать то, что хорошо делает конкурент, сохраняя способность по-прежнему отлично справляться с теми задачами, в которых она была сильна изначально. Windows работает на серверах, и даже на веб-серверах (около 50% серверов в домене .com, около 30% в целом). UNIX (большей частью Linux) пытается прорваться на рынок десктопов, и тоже может похвастаться кое-какими (правда, пока весьма малозначительными) успехами. С личной точки зрения автора, Windows прогрессирует все-таки несколько быстрее, что, впрочем, нисколько не мешает общей тенденции «взаимопроникновения» сохраняться в неприкосновенности. Дорастет ли Windows до UNIX в качестве ОС для «больших компьютеров», кластеров и веб-серверов? Дорастет ли UNIX до Windows в качестве удобной, простой и беспроблемной ОС для десктопов? А так ли уж это важно? Дорастут — будут ими пользоваться и «там». Не дорастут — останется каждая «при своих». Дорастет одна, но не дорастет другая — значит, останется только одна. Но это все — в будущем. Сейчас же большинство людей предпочитают использовать эти операционные системы именно там, где они традиционно сильны. Ну а люди умные и незлобливые к тому же искренне аплодируют «безумству храбрых», устанавливающих Windows на веб-сервер, а Linux — на домашнюю персоналку. Их не надо ругать, господа, ей-богу. Поддерживать никто не заставляет (у меня на офисном компьютере нынешнего Linux в жизни не будет!), но и ругать тоже не стоит. Наоборот, если у них что-то получится — мы получим две хорошие универсальные ОС. Ну а если не получится — то они себя поругают сами :).
Глава 13 “Бикультурализм” из книги Д. Спольски “Джоэл о
программировании”
К данному моменту у Windows и UNIX функционально стало больше сходства, чем
различий. Здесь и там поддерживаются одни и те же основные метафоры
программирования, от командной строки до GUI и веб-серверов; они построены
вокруг примерно одной и той же совокупности системных ресурсов, включая почти
идентичные файловые системы, память, сокеты, процессы и потоки. Базовый набор
сервисов каждой из этих операционных систем почти не ограничивает разнообразия
создаваемых приложений.
Остались лишь культурные различия. Да, мы все принимаем пищу, но они там
деревянными палочками едят сырую рыбу с рисом, а мы здесь едим руками куски
молотой коровы на хлебе. Культурные различия не означают, что американские
желудки не могут переваривать суши или что японские желудки не могут переварить
биг-мак, и не означают также, что не может быть множества американцев, которые
едят суши, или множества японцев, которые едят бургеры, но они означают, что у
американца, впервые спустившегося по трапу самолета в Токио, возникает
ошеломляющее чувство, что это место необычно, и никакое философствование о том,
что в глубине мы все одинаковы, мы любим, работаем, поем и умираем, не может
отменить того обстоятельства, что американцы и японцы никогда не смогут
понастоящему привыкнуть к тому, как устроены туалеты в другой стране.
Каковы культурные различия между программистами UNIX и Windows? Есть много
деталей и тонкостей, но по большей части они сводятся к одному: в культуре UNIX
ценится код, который полезен другим программистам, а в культуре Windows ценится
код, который полезен непрограммистам. Конечно, это большое упрощение, но ведь
это действительно большая разница, для кого мы программируем – для программистов
или конечных пользователей! Все остальное – комментарии.
Нередко провоцирующий полемику Эрик С. Рэймонд (Eric Raymond) написал большую
книгу под названием «The Art of UNIX Programming» (Addison-Wesley, 2003),
подробно исследовав в ней эту культуру. Можно купить бумажное издание и прочесть
его либо, если взгляды и принципы Рэймонда слишком «антиидиотарны» для вас и вы
не хотите платить ему денег, почитайте ее в Интернете бесплатно, сохранив
уверенность, что автор не получит от вас ни копейки за свой тяжелый труд.
Рассмотрим простой пример. В культуре программирования под UNIX высоко ценятся
программы, которые могут вызываться из командной строки, принимать аргументы,
контролирующие самые различные аспекты их поведения, и результат работы которых
может быть получен в виде регулярно форматированного обычного текста, доступного
для чтения машиной. Такие программы ценятся, потому что программистам легко
включать их в другие программы или более крупные программные системы. Один
маленький пример: в культуре UNIX есть важная ценность, которую Рэймонд называет
«молчание – золото», означающая, что, если программа успешно выполнила в
точности то, что вы ей сказали, она не должна вообще ничего выводить. Неважно,
что вы сделали – ввели команду из 300 символов для создания файловой системы,
или скомпилировали и установили сложный программный пакет, или отправили
пилотируемый космический корабль на Луну. Если выполнение прошло успешно,
считается, что не надо выводить ничего. Если снова появляется подсказка
командной строки, пользователь заключает из этого, что все OK.
Это важная ценность в культуре UNIX, потому что вы программируете для других
программистов. Как отмечает Рэймонд, «болтливые программы обычно плохо
взаимодействуют с другими программами». Напротив, в культуре Windows вы
программируете для тетушки Мардж, и тетушку Мардж можно оправдать, если она
считает, что программу, которая ничего не вывела, потому что успешно отработала,
нельзя отличить от программы, которая ничего не вывела, потому что произошел
сбой, или программы, которая ничего не вывела, потому что не поняла ваш запрос.
Аналогично в культуре UNIX ценятся программы, не выходящие из текстового режима.
Там недолюбливают GUI, если не считать раскраски, явно нанесенной поверх
текстового режима, и не любят двоичные форматы файлов. Это вызывается тем, что
программировать взаимодействие с текстовым интерфейсом гораздо проще, чем,
скажем, взаимодействие с GUI, что почти невозможно делать в отсутствие некоторых
прочих условий, типа встроенного языка сценариев.
Здесь мы снова сталкиваемся с тем, что культура UNIX ценит код, полезный другим
программистам, что редко бывает целью при программировании в Windows . Это не
значит, что все UNIX-программы разрабатываются исключительно для программистов.
Далеко не так. Но культура ценит то, что полезно программистам, и этим кое-что
объясняется.
Предположим, что у нас есть UNIX-программист и Windows-программист и оба они
получили задание создать одинаковое приложение для конечного пользователя.
UNIX-программист создаст базовое приложение командной строки или с текстовым
интерфейсом и, может быть, с некоторым опозданием и нехотя построит GUI над этим
базовым приложением. В результате основные операции этого приложения станут
доступны другим программистам, которые смогут вызывать программу из командной
строки и получать ее результаты в текстовом виде.
Программист Windows скорее всего начнет с GUI и, может быть, с некоторым
опозданием добавит язык сценариев, автоматизирующий действие GUI. Это
естественно для культуры, в которой 99,999% пользователей никоим образом не
являются программистами и не испытывают желания стать ими.
Есть большая группа Windows-программистов, которые пишут код преимущественно для
других программистов: это собственно команда Windows внутри Microsoft. Они
стремятся к тому, чтобы создать API для вызова из языка C, реализующий
функциональность, а затем создавать GUI приложения, обращающиеся к этому API.
Любое действие, которое можно осуществить из интерфейса пользователя Windows,
можно выполнить также через интерфейс программирования, вызываемый практически
из любого языка программирования.
Например, собственно Microsoft Internet Explorer представляет собой лишь
крошечную программу размером 89 Кбайт, служащую оболочкой для десятков очень
мощных компонентов, свободно доступных квалифицированным Windows-программистам и
в большинстве своем обладающих гибкостью и мощью. К сожалению, поскольку
программистам недоступен исходный код этих компонентов, последние можно
использовать только такими способами, которые были предварительно рассмотрены и
разрешены разработчиками компонент в Microsoft, что не всегда может
удовлетворить другого программиста. Кроме того, иногда обнаруживаются ошибки, в
которых обычно виноват тот, кто обращается к API, и которые трудно или
невозможно отладить в отсутствие исходного кода.
Тенденция UNIX-культуры предоставлять исходный код делает ее средой, для которой
легче разрабатывать приложения. Любой разработчик приложений для Windows может
рассказать вам, как он потратил четыре дня на исправление ошибки, потому что
полагал, что объем памяти, возвращаемый функцией LocalSize, будет таким же, как
размер памяти, которую он изначально запросил в LocalAlloc, или про какую-нибудь
другую ошибку, которую он исправил бы в десять минут, будь ему доступен исходный
код библиотеки. В качестве иллюстрации Рэймонд сочиняет занятную историю, в
которую вполне может поверить всякий, кто имел дело с библиотеками в двоичном
формате.
Теперь вы видите, в чем суть этих религиозных споров. UNIX лучше, потому что при
отладке можно зайти в библиотеки. Windows лучше, потому что тетушка Мардж может
увидеть подтверждение того, что ее почта действительно отправлена. На самом деле
ни та, ни другая системы не лучше. В них просто разные системы ценностей.
В UNIX главная ценность – облегчить жизнь другим программистам, а в Windows
главная ценность – облегчить жизнь тетушке Мардж.
Рассмотрим еще одно культурное различие. Рэймонд пишет: «Классическая
документация UNIX пишется телеграфным стилем, но она полная… Этот стиль
предполагает активного читателя, способного сделать очевидные и неупомянутые
выводы из сказанного и обладающего достаточной уверенностью в себе, чтобы
доверять этим выводам. Внимательно читайте каждое слово, потому что едва ли вам
дважды станут повторять одно и то же». Боже мой, подумал я, ведь фактически он
рекомендует молодым программистам продолжать писать никому не понятные страницы
руководства.
С конечными пользователями такое не проходит. Рэймонд может называть это
«сверхупрощающим высокомерием», но в культуре Windows признано, что конечные
пользователи не любят читать, и если они снизойдут до того, чтобы прочесть вашу
документацию, то прочтут только самое необходимое, и вам придется давать
объяснения еще и еще раз… Отличительной чертой хорошего файла подсказки Windows
является то, что средний читатель может изучать любую тему в отдельности, для
чего ему не требуется знание каких-либо других тем.
Как же получилось, что базовые ценности оказались разными? Это еще одно
достоинство книги Рэймонда: он уходит глубоко в историю и эволюцию UNIX и
вооружает молодых программистов знанием всего исторического опыта культуры,
начиная с 1969 года. Когда создавалась UNIX и формировались ее культурные
ценности, конечного пользователя не существовало. Компьютеры были дороги,
процессорное время было дорого, и знания о компьютерах сводились к тому, как
программировать. Неудивительно, что образовавшаяся культура ценила то, что было
полезно другим программистам.
Напротив, Windows создавалась с единственной целью: с выгодой продать как можно
больше экземпляров. Мириады экземпляров. «Компьютер на каждом рабочем столе и в
каждом доме» – вот что было прямой задачей разработчиков Windows, определяло их
повестку дня и базовые ценности. Легкость использования непрограммистами была
единственным способом получить доступ на каждый рабочий стол и в каждый дом, и
потому «юзабилити Uber alles» стало культурной нормой. Программисты как целевая
группа рассматривались на самом последнем месте.
Культурный раскол настолько глубок, что UNIX, по сути, никогда не претендовала
на настольные системы. Тетушка Мардж фактически не сможет пользоваться UNIX, а
неоднократные попытки создать для UNIX красивый интерфейс, с которым тетушка
Мардж сможет работать, полностью провалились, потому что эти попытки делались
программистами, насквозь пропитанными UNIX-культурой.
Например, UNIX поддерживает принцип разделения политики и механизма, исторически
идущий от разработчиков X. Он прямо привел к расколу в пользовательских
интерфейсах; договориться во всех деталях о том, каким должен быть UI настольной
машины, толком никогда не могли, и считается, что это нормально, потому что в
этой культуре ценится разнообразие. А вот для тетушки Мардж совершенно
неприемлемо использовать в разных программах разные интерфейсы для копирования и
вставки.
Вот таково положение через 20 лет после того, как разработчики UNIX начали
попытки приладить к своим системам приличный интерфейс пользователя, когда глава
крупнейшего поставщика Linux высказывает мнение, что домашним пользователям
следует работать в Windows. Я слышал утверждения экономистов о том, что
Кремниевую долину невозможно было бы воспроизвести, скажем, во Франции, потому
что французская культура так жестоко наказывает неудачников, что предприниматели
стараются не рисковать. Возможно, то же справедливо в отношении Linux: она может
никогда не стать настольной операционной системой, потому что в ее культуре
ценятся вещи, препятствующие этому.
Доказательством служит OS X: компания Apple все-таки создала UNIX для тетушки
Мардж, но только потому, что инженеры и менеджеры Apple были прочно связаны с
культурой конечного пользователя (которой я захватнически присвоил название
«культуры Windows», хотя исторически она возникла в Apple). Они отказались от
фундаментальной нормы культуры UNIX – построения вокруг интересов программиста.
Они даже переименовали главные каталоги – полная ересь! – и стали употреблять
обычные английские слова, например «applications» и «library» вместо «bin» и
«lib».
Рэймонд делает попытку сравнить и противопоставить UNIX и другие операционные
системы, и это самая слабая часть прекрасной в остальных отношениях книги,
потому что он не знает предмета, о котором ведет речь. Как только он
заговаривает о Windows, обнаруживается, что источником его знаний
программирования для Windows оказываются по большей части газеты, а не опыт
программирования в Windows. Ну и пусть, он – не Windows-программист, и простим
ему это. Как это характерно для человека, глубоко знающего одну культуру, он
знает, что ценится в его культуре, но плохо различает те части его культуры,
которые универсальны (убиение старушек, аварийное завершение программ: всегда
плохо), и те, которые относятся только к программированию для программистов
(сырая рыба, аргументы командной строки: смотря для кого).
Есть очень много монокультурных программистов, которые, как типичный
американский парень, никогда не выезжавший за пределы Сент-Пол, штат Миннесота,
не ощущают разницы между ценностями, принадлежащими некой культуре, и базовыми
человеческими ценностями. Я очень часто встречал UNIX-программистов,
издевавшихся над программированием в Windows и считавших Windows варварством и
глупостью. Рэймонд слишком часто попадает в ловушку пренебрежительного отношения
к ценностям других культур без учета их истоков. Такой фанатизм довольно редко
встречается среди программистов Windows, которые в целом ориентированы на
решение задачи и свободны от идеологических предрассудков. Во всяком случае
Windows-программисты признают недостатки своей культуры и прагматически говорят:
«Видите ли, чтобы продать текстовый процессор как можно большему числу людей,
его надо научить выполняться на их компьютерах, а если из-за этого приходится
хранить настройки в Гнусном Реестре, а не в элегантных файлах ~/.rc, то тут уж
ничего не поделаешь».
Мир UNIX пышет самодовольством культурного превосходства, пропаганды и
поклонения карме Slashdot, тогда как мир Windows более практичен («да, что
делать, надо же на жизнь зарабатывать»), и поэтому культура UNIX чувствует себя
осажденной, не способной вырваться из серверной стойки и области хобби на
широкие просторы настольных машин. Это высокомерие слабости – самый большой
недостаток книги «The Art of UNIX Programming», хотя сам по себе он не столь
велик.
В целом в книге настолько много чрезвычайно интересного и глубокого
проникновения во многие аспекты программирования, что можно вытерпеть отдельные
дурно попахивающие идеологические эскапады ради возможности многое почерпнуть из
нее относительно всеобщих идеалов.
Я действительно рекомендую эту книгу разработчикам, к какой бы культуре они ни
принадлежали, на любой платформе, с любыми задачами, потому что очень многие из
провозглашаемых в ней ценностей являются универсальными. Когда Рэймонд
указывает, что формат CSV хуже, чем формат /etc/passwd, он думает тем самым
добавить очков UNIX против Windows, но знаете что? Он прав. /etc/passwd
действительно проще разбирать, чем CSV, и, прочтя его книгу, вы узнаете почему и
станете лучше как программист.