Одна функция — одна програама

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

В Windows изначально не было столь простых и развитых средств IPC как
в Linux. Фактически использовались в основном семафоры и shared
memory.

Самым простым способом создать код, который мог бы использоваться из
разных программ в Windows всегда были dll.

В последующем также были добавлены стандартизированные подходы к
разработке повторно используемых компонентов (COM). Так что если
программисту было нужно встроить какую-то компоненту другого
приложения в свое – он просто использовал готовый компонент.

В Linux же изначально главным средством IPC были pipes, а также unix
sockets. Их использование крайне просто, и если программа написана
так, что с ней удобно взаимодействовать через pipe, то часто даже не
требуется документация – все просто очевидно.

Главная особенность такого подхода – надежность и безопасность. В
случае ошибки в подгружаемой dll, может упасть приложение целиком.

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

Однако такого подхода есть два серьезных плюса:

1. Использовать библиотеки из программ написанных на C/C++ проще, чем
писать код взаимодействия с другой программой через pipe;
2. Использование библиотеки требует меньше накладных расходов на
реализацию протокола обмена данных – следовательно это банально
быстрее.

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

А накладные расходы на реализацию протокола в большинстве приложений
(за исключением тех, где передаются значительные объемы данных – как в
multimedia приложениях, например) незначительны, и уменьшение
производительности на доли процента ради увеличения надежности кода, а
также упрощения его написания и поддержки, по моему мнению вполне
разумно.

Причем упрощение поддержки кода приводит часто к тому, что в целом его
производительность становится лучше.

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

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

 

Рубрика: Новости | Добавить комментарий

Хуже тредов только ASCIIZ-строки

Изобретение тредов стало почти столь же деструктивной технологией, как
и ASCIIZ-строки. Почти – лишь потому, что есть небольшое количество
ситуаций, когда их применение действительно оправдано.

Увы, в реальности они используются гораздо чаще, чем оправдано.

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

 

Рубрика: Новости | Добавить комментарий

ASCIIZ-строки — одна из главных проблем Linux

Linux унаследовал от других UNIX-like ОС одну из самых страшных архитектурных ошибок — ASCIIZ-строки. И хотя все время идут разговоры о новых языках программирования, новых библиотеках, новых идеях, но эта тема как-то остается в тени.

Читать далее

Рубрика: Новости | Добавить комментарий

Использование Dropbox для чтения почты

Я читаю много рассылок (в основном это рассылки altlinux и asterisk). При этом мне хочется иметь возможность читать их, например, в дороге. Для рабочей и личной почты я использую gmail, но рассылки мне гораздо удобнее читать из mutt.

У mutt никаких средств синхронизации почты нет, поэтому почта принимается fetchmail'ом, и с помощью procmail раскладывается по папкам.

На хостинге у меня поднята отдельная VE с Dropbox, fetchmail и procmail. Почта забирается, раскладываетс по папкам, и оказывается уже и на компьютере и на ноутбуке там где надо.

Да, есть одна тонкость — почта при этом хранится в maildir а не mbox, для удобства синхронизации. Это неудобно если каталог с почтой большой, но эту проблему я решаю тем, что после прочтения письма из рассылок немедленно либо удаляются, либо помещаются в архив. Сами каталоги с рассылками содержат только непрочитанные письма, или те, на которые я планирую ответить.

Рубрика: Новости | Добавить комментарий

Мысли о оптимизации

Оптимизация софта штука важная и полезная. При этом для массового софта подход «время на оптимизаию стоит дороже чем новый процессор» неверен — когда пользователей сотни тысяч, стоимость их потраченного впустую на ожидания времени таки дороже. Но иногда оптимизация просто вредна.

Читать далее

Рубрика: Новости | Добавить комментарий

systemd

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

И пока никто из тех, кто в курсе что такое UNIX way, не написал ничего лучше – systemd наше светлое будущее, с чем нас всех и поздравляю.

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

Рубрика: Новости | 1 комментарий

Организация бэкапа: rdiff-backup + encfs + Dropbox

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

Читать далее

Рубрика: Новости | Добавить комментарий

Автоматизация сборки пакетов

В [email protected] часты споры по поводу «роботов», их пользы и вреда.

Читать далее

Рубрика: Новости | Метки: | Комментарии (2)

Облака и безопасность

Флейм про то можно или нет хранить данные в облаках с точки зрения безопасности бессмысленен. Ответ прост и очевиден:

Читать далее

Рубрика: Новости | Добавить комментарий

appliance

В Sisyphus ушла серия пакетов appliance-*.

Читать далее

Рубрика: Новости | Добавить комментарий