Вход:  Пароль:  
FreeSource: ИдеологияLinux ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

Идеология GNU/Linux — сложности

(C) Денис Смирнов <mithraen@freesource.info>, 2001


В чем основная сила юниксов? В чем их основная мощь? В модульности.
Конструкции вида: «cat `cat aaa | grep bbb | sort`" ты никаким GUI не 
сделаешь. Есть много-много атомарных частей, которые с помощью скриптов или 
других программ объединяются в единое целое. Собственно технологии COM, DCOM,
SOM, CORBA созданы для той же цели. Но в юникс-системах это было уже давно, и 
любая система, развивающая эту технологию оказалась бы вне конкуренции.


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


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


Данные должны быть организованы так, чтобы упростить использование таких
утилит как sed и awk

Примеры файлов


/etc/passwd, в котором каждая строчка это запись об отдельном пользователе, а записи разделены символом ':'.


/etc/group, /etc/aumix, /etc/inittab – аналогичен /etc/passwd по структуре


/etc/fstab – в качестве разделителей используются пробел и табуляция


/etc/X11/XF86Config


*.pid файлы, в которых в виде числа в десятичном формате хранится pid создавшего процесса

Проявления вреда (Free|Open)Source

А теперь мы посмотрим на «вредное» влияние open-source – программист,
который, как известное, самое ленивое существо во вселенной (за исключением
разве что пользователя) может не заботиться об обмене данными с другими
программами и об удобной интеграции других программ в свою. Если ему нужна
функциональность другой программы внутри своей, то он не станет добавлять в 
свою и чужую программу средства для взаимодействия, он просто берет и делает
сору&paste, делая небольшую «обработку напильником». А если пользователь
захочет состыковать программу не с той, которую запихнул внутрь ленивый
программист, а с другой? Ответ всегда один – не нравится, пиши сам. Только
вот заставляет задуматься один момент – для того, чтобы обеспечить нормально
взаимодействие между программами нужно времени ничуть не больше, чем на то,
чтобы удачно встроить код чужой программы в свой. Может лучше сначала думать,
прежде чем брать в зубы компилятор и бежать что-то писать?

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


Спрашивается — что делать, если я хочу интерфейс от одного, фичи от 
другого, поддержку мейлбоксов третьего, да еще и чтобы весь этот компот
работал, и не падал при каждом изменении погоды на марсе? Прямо так и 
слышатся крики в ответ «тебе нужно, ты и пиши», а мне ли одному это нужно?
Может иметь такую гибкость нужно всем пользователям? Ведь каждый раз,
когда пользователь встречается с подобной проблемой, он либо вынужден
мириться с неудобством, либо пишет свой почтовый редактор. И появляется еще 
одна недоделка, ненужная никому кроме автора.

Сразу же вспоминаются слова о том, что идеальная система это не та, к 
которой нечего добавить, а та, у которой нечего убавить. Зачем в find
добавлен ключ для поиска по маске? Если я не ошибаюсь, то набрать этот ключ
и |grep по количеству символов идентично, так что работу пользователя это не 
упрощает. Однако на какие-то сотни байт это увеличивает код самой find +
нагружает мусором ее документацию. Зачем? Я понимаю, придираться к таким
мелочам не особо правильно, но линукс изначально хэкерская ОС, а если автор
хэкер, то как он может себе позволить подобного типа мелочи? А таких мелочей
можно найти ой как много.

Теперь самый наболевший пример – идем в инет на какой-нибудь freshmeat и 
ищем там браузеры. Находим. И опять повторяется то же самое. Дублирующегося
кода – море. А если разбить на модули, и сделать a-la COM? Как минимум нечто
вроде стандартного интерфейса плагинов? Количество проблем резко снизилось
бы, качество кода, разумеется увеличилось бы, больше шансов на появление и 
рост новых проектов и реализацию отдельных идей. С выходом Gecko стало
несколько лучше, но далеко от идеала.


По поводу Mozilla – это же вообще прямое нарушение всего, что только можно
было придумать! Они бы еше туда свой TCP/IP стек интегрировали. Ну и libc,
так, для проформы, чтобы остальные не думали что жизнь хороша. Монстрятина,
блин. Тормозилла. А ради чего все это? Это уже даже не windows-way, ибо даже
майкрософт учит вести себя несколько лучше. В общем основная проблема –
нескоординированость разработчиков, ибо их стало слишком много чтобы хоть
как-то их координировать. Соответственно нужны workaround'ы. CORBA на эту
роль не годится, ибо тормоз. Ну нефиг файерболами по комарам стрелять. Кроме
плагинов и более проработаного стандарта GNU-кодирования идей я не вижу. Тем 
более что за то, как написан этот стандарт Столлмана убить мало. И эти самые
пресловутые 6 дисков с поставкой ОС это действительно идиотизм. Но не по 
сравнению с виндами – там бы на 6-и компактах столько софта не уместилось
просто, а с точки зрения качества. Объективно можно сделать сильно лучше.

Или вот еще пример – хочу полный аналог fetchmail'а, совместимый по ключам
командной строки, конфигу, поведению и.т.д. Но поддерживающий
только IMAP, и отправляющий только через local MDA. Как? С нуля
писать? Или из fetchmail'а куски вырезать? присматривая за тем, чтобы в 
процессе случайно ничего нужного не испортить? А может было бы правильнее
иметь возможность удалить плагины, через которые поддерживаются ненужные мне 
протоколы? Но ведь нет настолько модульной структуры...

Вот такие вот развелись тараканы...

Комментарии

GUI: Graphics User Interface (графический интерфейс пользователя)
Атомарные: неделимые
IMAP: современный протокол для работы с электронной почтой
fetchmail: с моей точки зрения лучшая программа, предназначеная для 

получения почты с нескольких account'ов.

Отзывы — здесь вы можете высказать своё мнение по поводу содержимого сайта


 
Файлов нет. [Показать файлы/форму]
Много комментариев (7). [Показать комментарии/форму]