Есть такая штука — философия Unix. Это свод принципов проектирования систем и программ. Когда вы их придерживаетесь (в т.ч. при разработке под другие системы), то все работает хорошо, а когда отклоняетесь — начинаюстя фейлы.

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

Как следствие из этого — интерфейс программы для связи с внешним миром тоже является отдельной задачей и выносится в дополнительную абстракцию. Так, типичная *nix-программа представляет из себя библиотеку, которая просто делает что-то хорошо. Ее можно подключить в проект и пользоваться зашитыми функциями. Это один из возможных уровней абстракции. Второй — когда пишется команданая утилита. Это просто обертка, которая парсит аргумены командной строки, вызывает функцию библиотеки и выводит результат в stdout. Третий — ГУЙ для конкретной оболочки/среды. Опять обертка, которая пользуется командной утилитой/библиотекой. Четвертый — COM-сервер для Винды. Очередная обертка, сердце программы — библиотека — остается неизменным. Пятый — CGI-скрипт для веб-сервера. Аналогично вышесказанному.

И так далее. Суть этого подхода в том, что любой желающий сможет прикрутить чужой код к своей системе.

Но есть уроды-программисты, которые распространяют код в качестве COM-компонент, крутящихся только под Виндой. И плевать, что основная часть кода кроссплатформенна — нет, покупай Винду, ставь антивирус, потому что программер Вася не выучил Си/Плюсы, а сел быдлокодить в Вижуал Бейсике. И все это — в промышленных масштабах.

Я имею в виду конкретно разработчиков драйверов для торгового оборудования Атол и Штрих-М. Их драйвера — апофеоз идиотизма. Школьнику известно, что устройства, втыкаемые в COM-порт, могут работать в любой операционке, потому что взаимодействие с ними сводится к трем шагам — отправил байты в порт, подождал, прочитал ответ. Все!

Нормальный программист написал бы библиотеку, отдельно — командную утилиту, потом ГУЙ и т.д. Потом бы подтянулись 1С-ники со своими компонентами, COM-объектами и прочей чушью. И все бы это работало в любой системе.

Но нет же — качайте их драйвера с COM-объектом. И операционные системы, которые могли бы сделать процесс торговли надежней и безопасней, в пролете. Но мир не без добрых людей — находятся энтузиасты, которые пишут кроссплатформенные драйвера на том же Питоне, например. И работают они хоть на FreeBSD. Спасибо вам за это, ребята.

Короче, бородатые мужики, заложившие основы IT-систем, знали как надо делать программы. Нужно чаще впоминать их принципы. А если ваша программа работает только в Винде или тупит в ожидании нажатия кнопки — идите в жопу.