CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
01.10.2016

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Заметки

О бедной системе замолвите слово…

CITKIT.ru
Цикл "Операционные системы:
Ностальгия по будущему
"

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

… после прочтения статей у меня к Вам, Сергей, возникло несколько вопросов по сути. В своих трех статьях Вы критикуете ОС Unix и ее клоны, включая Linux. … мне, как новичку в этой теме, после прочтения статей совершенно непонятно, чем плоха ОС Unix или, по крайней мере, чем она Вам не нравится, как автору, в чем Вы видите ее недостатки.

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

По ходу прочтения статьи я увидел 2 аргумента, выдвинутых Вами против этой системы.

1. Первый заключается в том, что в годы Вашей молодости Вы и Ваши коллеги, молодые перспективные инженеры-специалисты, смотрели на эту систему как на массовую и популистскую. Т. е. как на примитивщину, рассчитанную на массового малограмотного пользователя (вроде современной Windows). Как на шаг назад в области тогдашних информационных технологий. ... Кстати, в качестве альтернативы Вы привели систему Multics, как пример богатой, развитой, полноценной ОС. Но вроде бы многие источники указывают на ее чрезмерную переусложненность, на трудность написания под нее программ, не содержащих тонких системных ошибок. А ведь это сомнительный плюс...

Прошу обратить внимание, что я вспоминал о том времени, когда мне и моим друзьям – бывшим однокурсникам – было по 20 с небольшим лет. Именно тогда мы с ужасным снобизмом отнеслись к появлению ОС UNIX. Вообще, один и тот же человек может относиться к одной и той же операционной системе по-разному в зависимости от своих текущих потребностей. Мне многое нравилось, а кое-что не нравилось в ОС UNIX с позиции разработчика операционных систем. Мне многое нравилось, кое-что очень нравилось, а кое-что очень не нравилось в ОС UNIX с позиции разработчика программного обеспечения в среде UNIX. Наконец, мне всегда ужасно нравилось, что я понимаю поведение ОС UNIX, в котором (по крайней мере, раньше) никогда не возникали шарады, ужасно всех раздражающие при работе с Windows.

И в той же манере я могу сказать про Multics. Мне страшно нравились многие архитектурные идеи Multics. Они были красивы, с ними было приятно разбираться, их было интересно использовать для развития собственных идей. Но когда мы реализовали эти собственные идеи, возникшие под влиянием Multics, оказалось, что программировать в среде ОС ЦП АС-6 интересно и увлекательно, но (а) для этого требуется специальная подготовка, и (б) даже при наличии такой подготовки в программах встречаются трудно находящиеся и редко проявляющиеся ошибки. И в этом смысле ОС Multics была хуже ОС UNIX.

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

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

А давайте разберемся, почему ОС UNIX стала главенствующей. Начнем с того, что отцы-основатели UNIX делали систему под себя. Им нужна была удобная (для их целей) ОС, которую можно было бы легко перенести на другую машину (поскольку машины в AT&T менялись). Потом оказалось, что и другим людям очень приятно, когда при смене аппаратной платформы ты остаешься в привычной тебе среде, а для запуска программ, разработанных на предыдущей машине, достаточно эти программы перекомпилировать. ОС UNIX была первой переносимой системой, и она не была ужасной. Поэтому ее приняли массы. А вслед за принятием де-факто начался процесс стандартизации интерфейсов, сертификации реализаций и т.д. То есть, ОС UNIX не то чтобы затмила остальные операционные системы, благодаря своим исключительным качествам. Она их вытеснила из-за удобства широких масс пользователей, которым проще было понять одну операционную среду.

Кстати, это обстоятельство не следует преуменьшать. Когда мы разрабатывали GNU SQL Server, то начинали работать на старых рабочих станциях Sun Sparc-1 в среде Solaris (тогда основанной еще на BSD UNIX), потом без всяких хлопот переехали на платформу Data General с ОС DG-UX (клон System V 4.0) и завершили проект на VAX 8550 c ОС Ultrix (основанной опять же на BSD UNIX). Но нельзя сказать, чтобы хотя бы в какой-то момент мы были без ума от UNIX.

Взять, к примеру, язык программирования C. Он тоже оставил в тени множество других языков программирования, которыми раньше широко пользовались …

Если говорить про язык C, то, во-первых, я его тоже очень люблю, хотя и кривой он до чрезвычайности. А во-вторых, по мне UNIX, C и Shell – близнецы-братья. Где бы мне не приходилось программировать на языке С (а приходилось это делать даже для MS DOS), я подразумевал UNIX (благодаря обязательности библиотеки stdio и собственных библиотек, требуемых стандартом языка). А Shell без использования средств перенаправления ввода-вывода – это уже и не Shell.

Так что язык C «оставил в тени» другие языки только потому, что только язык C позволял программисту на всю катушку использовать возможности UNIX. Ведь забавно, что в языке C вроде бы и отсутствуют собственные операции ввода-вывода, все делается только через библиотечные функции, а разорвать связь языка и его библиотек невозможно.

А если совсем честно говорить, то и не было до появления языка C других языков, пригодных для системного программирования, в частности, для программирования операционных систем. Был BCPL, из которого C и вырос, но в нем вообще не было типизации, т.е., фактически, все ошибки уходили на время выполнения программы. А больше ничего и не было. Так что и вытеснять-то было особенно нечего, кроме языков ассемблера, а уж ими-то программисты были сыты по горло :-(

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

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

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

...не могу согласиться с Вашим высказыванием, что универсальность современных IT и ОС – это их недостаток. В универсальности, на мой взгляд, как раз сила и огромное преимущество современных информационных технологий.

Конечно, здесь нужно было бы для начала понять, что такое «универсальность». Мне это было понятно 40 лет назад: универсальная операционная система – это ОС, одновременно поддерживающая режимы пакетной обработки заданий, разделения времени и реального времени. А что это сегодня? Нужны ли на персональном компьютере все возможности операционной системы, которая может использоваться на сервере баз данных? И наоборот. Здесь, похоже, речь идет не об универсальности в функциональном смысле, а о наличии универсальной базы кода, на основе которого генерируются фактически специализированные операционные системы.

Универсальна ли, к примеру, СУБД Oracle? Если да, то почему в каждом новом ее выпуске появляются сотни новых функциональных возможностей, которые добавляются к тысячам возможностей, еще не освоенных пользователями после предыдущего выпуска.

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

И я говорю, что в универсальности не только огромное преимущество современных ИТ, но и их огромная слабость, постоянное отставание от текущих потребностей. И я полагаю, что специализация системного программного обеспечения – это вызов будущего.

Вы высказали в одной из своих статей мысль о том, что Unix – система, очень сильно привязанная к архитектуре компьютера PDP-11 и что любой ее перенос на другую аппаратную платформу выглядит несколько искусственно. С другой стороны, разработчики Unix, как и языка C всегда утверждали, что и Unix, и С аппаратно-независимы. В самом деле, ну что такого необычного в компьютере PDP-11 и других машинах от DEC, что бы сделало перенос ОС с них на другой компьютер корявым и неестественным?

Давайте вспомним UNIX на платформе PDP-11. Машина 16-разрядная, так что в виртуальной памяти процесса помещается 2^16 байт, включая код программы, данные и стек. До появления ОС UNIX для работы больших программ на таких машинах использовали оверлеи, т.е. программист заранее решал, какая часть программы и данных в каждый конкретный момент времени должна находиться в памяти процесса. Это очень неудобно, поскольку требует дополнительного и логически избыточного программирования.

Денис Ритчи сказал: негоже программистам писать отдельные программы длиннее 2^16. Если требуемой функциональности за счет кода такой длины достичь не удается, добавим еще одну или несколько отдельных программ, и пусть они будут звеньями конвейера обработки данных. Отсюда в UNIX появились системные вызовы fork(), exe(), pipe() и т.д. Пайпы в действительности удобны только для организации конвейеров. Иерархии тяжелых процессов прекрасно подходят для конвейерной обработки данных. Для обеспечения независимости написания программ-звеньев конвейера обеспечивается перенаправление ввода-вывода. В качестве побочного эффекта оказывается, что любая исполняемая программа автоматически становится командой командного интерпретатора Shell, средствами которого легко организуются конвейеры команд.

Все это исключительно логично, и логично именно в случае 16-разрядной PDP-11. Уже после появления 32-разрядных VAX-11 смысл пайпов при программировании стало трудно понять, и уже для решения совсем других задач появились семафоры, разделяемая память и очереди сообщений. Я уж не говорю про то, что в языке C команды PDP-11 просто высовываются (в частности, адресная арифметика).

… уважаемый автор, Вы действительно считаете Unix плохой операционной системой?

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

Исходная ОС UNIX была идеальна для программистов, поскольку на языке C было комфортно писать, весь код был синхронным, все ошибки легко повторялись и отлавливались. Но это до тех пор, пока не требовалось выжимать скорость за счет совмещения выполнения программы на процессоре с обменами с внешними устройствами. Для этого в исходной ОС UNIX уже требовались трюки, не всегда элегантные и эстетичные.

UNIX среднего возраста (уже c IPC, но еще без threads) мне нравилась. Достаточно дисциплинированное общение процессов (через общие сегменты и семафоры, очереди сообщений или сокеты), по-прежнему хорошая повторяемость ошибок. Несколько путало чрезмерное изобилие средств IPC, трудно было решить, в каких ситуациях одни лучше других. Ну и, конечно, опять-таки очень затруднительно было писать асинхронные программы.

UNIX старшего возраста (с потоками управления) я честно не люблю (хотя, конечно, смотря с чем сравнивать). Да, асинхронные программы стало легко писать, но отлаживать их так же трудно, как и 40 лет назад в Multics. Насколько я знаю, нелюбовь к легковесным процессам свойственна всем программистам, достаточно их распробовавшим.

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

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

Может быть, некоторая гармония присутствовала в ОС UNIX при ее рождении, но впоследствии она была утрачена. UNIX – это старая рабочая лошадь, изрядно потрудившаяся на человечество. Тут уж не до красоты и внутренней гармонии. И, скорее всего, вполне можно и дальше жить с UNIX-подобными системами, только нужно отдавать себе отчет, что румянами надолго возраст не скроешь.




Комментарии

Страницы комментариев: 1 :: 2 :: 3 :: ... :: 5 :: следующая

аноним, Sun Mar 8 11:37:06 2009:
>>- Singularity невозможно попробовать в России и Украине

> http://www.codeplex.com/singularity/Release/ProjectReleases.aspx?ReleaseId=19428#ReleaseFiles

Cookish, как говорят за морем. Цитата:

The server experienced an error.

If you see this page, it is because an error occurred in the system while trying to process your request. We apologize for the inconvenience. This error has been reported to our team for analysis.

Error Log Reference #80ab4584-6e6f-4f00-ac83-89c3876ca36c

If you would like to contact us regarding this error, please click here.
В_Ухо_Ногой, Fri Feb 13 15:45:54 2009:
Спасибо автору за цикл статей. Всегда интересно почитать мнение опытного человека. Я сам в свое время очень много получил от свое отца - инженера-электронщика, много лет посвятившего научно-исследовательской работе в своей области. Конечно, с тех пор электроника ушла далеко вперед, но его опыт в свое время заложил в меня хорошие знания устройства компьютера. И хотя в итоге я выбрал путь программиста, я очень рад тому - первому - заделу. Я считаю очень важным изучать опыт предыдущих поколений разработчиков, учиться на их достижениях и ошибках, чтобы не наступать второй раз на те-же грабли, которые уже кому-то долбанули по лбу. Все, написанное Вами, еще нуждается в детальном анализе, поэтому, если у меня возникнут какие-то несогласия или вопросы, то почту за честь написать Вам об этом.

С уважением!
аноним, Thu Feb 12 17:34:25 2009:
2 sip..., четверг, 12 февраля 2009 г. 03:31:40:
>"аноним, вторник, 3 февраля 2009 г.", и не жалко было вам своего времени. Что побудило вас удостоить развернутого комента статью в которой нет ничего кроме раздувания щёк, перечисления общеизвестных исторических фактов, и грубых концептуальных ошибок.

Предыдущие 3 статьи. Так сказать, поблагодарил аффтара за графоманство^Wтруд.
sip..., Thu Feb 12 03:31:40 2009:
"аноним, вторник, 3 февраля 2009 г.", и не жалко было вам своего времени. Что побудило вас удостоить развернутого комента статью в которой нет ничего кроме раздувания щёк, перечисления общеизвестных исторических фактов, и грубых концептуальных ошибок.
аноним, Wed Feb 4 15:18:44 2009:
>>- Singularity невозможно попробовать в России и Украине

http://www.codeplex.com/singularity/Release/ProjectReleases.aspx?ReleaseId=19428#ReleaseFiles
аноним, Wed Feb 4 09:06:33 2009:
2 аноним, среда, 4 февраля 2009 г. 01:02:16:

http://blogs.gotdotnet.ru/personal/mihailik/PermaLink.aspx?guid=9ae1f790-36c2-4af2-a5e6-a5d22c6211c9

В среде дотнетчиков модно что-то знать про Singularity. Хотя бы краем уха. Но как обычно, вокруг модного вьются дурацкие слухи, домыслы. Итак, что же это такое на самом деле?

Сначала несколько фактов.

- Singularity — это будущее Windows, когда уже не будет самого Windows
- В Singularity нет ни одной строки кода, взятой из Windows
- Весь код в Singularity выполняется в рамках одного "физического" процесса, к тому же в режиме ядра
-Singularity не является микроядерной ОС
- Singularity невозможно попробовать в России и Украине

В отличие от распространённой сказки, на самом деле в Singularity нет никакого CLR. Singularity не может запускать IL-код.

Ещё раз для тех, кто сомневается в правильности букв: НЕ МОЖЕТ ЗАПУСКАТЬ IL-КОД.

Да, всё написано на C#. Но это не значит, что в Singularity есть JIT. Его нет. Код C# компилируется заранее и в момент загрузки системы все приложения уже скомпилированы в машинных кодах.

Весь код ОС и процессов написан на safe-языке C#. Это означает, что полезть "куда не следует" вы просто не можете. У вас нет для этого матюков в языке. Поэтому и делать какие-то дополнительные границы виртуальных адресных пространств между процессами не нужно.
аноним, Wed Feb 4 08:31:17 2009:
Сергей Кузнецов, вторник, 3 февраля 2009 г. 21:13:33:
Наблюдение: анонимы невнятны, неграмотны, злобны и в придачу к этому не читают то, к чему пишут "комментарии". Поэтому никогда не напишу ответ на анонимку.

О-о-о! Мы умрем от горя! Кто тогда будет кормить местных писателей-троллей? Кто еще сможет создать вам иллюзию всемирной известности?

Председатель клуба анонимусов: анонимус.
аноним, Wed Feb 4 01:02:16 2009:
аноним, вторник, 3 февраля 2009 г. 18:38:28:

Помоему, один из самых адекватных комментариев.
Особенно радует, что он не пронизан фанатизмом к модной сейчас singularity.
Сергей Кузнецов, Tue Feb 3 21:13:33 2009:
Наблюдение: анонимы невнятны, неграмотны, злобны и в придачу к этому не читают то, к чему пишут "комментарии". Поэтому никогда не напишу ответ на анонимку. А Паше Пасечнику спасибо. Тоже, вроде бы, ответить нечего, но чувствую родственную душу.
аноним, Tue Feb 3 18:38:28 2009:
Не смог сдержаться.
Во-первых, аффтар (по другому и не назвать) пишет, что UNIX -- система 40-летней давности. Это и правда и неправда. Дело в том, что исторически концепции UNIX действительно 40 лет. Но только исторически и только концепции. Сравните, например, код ядра того же FreeBSD первой и актуальной версии (напомню, что FreeBSD выросло из проекта 386BSD, т.е. порта BSD на архитектуру x86). Хорошо, если хоть несколько строк сохранилось нетронутыми. А главное идёт постоянная доработка! Поэтому, то что ядро UNIX систем давно не обновлялось, чистой воды ложь и провокация.
Во-вторых, хотелось бы напомнить, почему так скоропостижно скончалась ОС Multics: она тупо рухнула под собственным весом. Дело в том, что это ОС имела тенденцию к написанию под неё тяжеловестных монолитов. А такие программы было очень тяжело отлаживать. Поэтому число багов в ней множилось не по дням, а по часам. А кому нужна система состоящая из одних свистелок, перделок и багов? Хотя, не отвечайте. Судя по ОС MacOS (до X версии) всё-таки кому-то была нужна.
В-третьих, напомню, что портирование UNIX на другие архитектуры изначально не предполагалось. Просто это оказалось приятным сюрпризом. Равно как и то, что развитие процессоров пошло в сторону большего соответствия представлению архитектуру компьютера архитектуре заложенной при проектировании языка С (не С++ !).
В-четвёртых, есть в UNIX-концепции программирования принцип, за нарушение которого карают ещё хуже чем за нарушение лицензии: принцип преждевременной оптимизации. Этот принцип гласит, что делать оптимизацию можно только тогда, когда точно уверен, что потери в быстродействии происходят именно в этом участке кода и эти изменения позволят значительно поднять быстродействие системы. Классический пример нарушения этого принципа -- злоупотребление макросами. Когда машины были большими скорость загрузки с программы в ОЗУ примерно соответствовала скорости работы процессора, а теперь она в на порядки меньше. И если тогда программа большего размера за счёт использования макросов работала быстрее, чем такая же программа но с циклами вместо мекросов, то теперь ситуация диаметрально противоположная.
В-пятых, конвееры появились совсем не из-за особенностей архитектуры PDP-11, а из-за нового видения проектирования программ, известного сейчас как UNIX-Way: "Программа должна делать только одну операцию, но хорошо её делать." Именно поэтому ZIP и собирает файлы в кучку и одновременно их архивирует, а UNIX'овый tar только собирает их в кучку, а архивацию поручает другим.
В-шестых, хотелось бы узнать, что же аффтар имеет ввиду под названием "универсальная ОС". Насколько я знаю, ОС -- это базовый комплекс компьютерных программ, абстрагирующий остальное ПО от деталей реализации аппаратного обеспечения. Как Этот комплект может быть не универсальным трудно представимо. В противном случае часть функций ОС будет выполнять ОС, что согласитесь глупо.

Ждём ответа. Аффтар пыши исчо!

Страницы комментариев: 1 :: 2 :: 3 :: ... :: 5 :: следующая

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds