У меня есть понимание окон COM и идей позади него. Я пытаюсь понять, отклоняют ли *системы, даже имеют эквивалент или почему они не делают?
Модель Unix построена на идее облегченных процессов, которые взаимодействуют друг с другом через сокеты, каналы, сигналы и командные строки. Исторически в Unix не было потоков (модель потоков POSIX - это всего лишь 10-летняя модель IIRC), но процессы в Unix всегда были намного дешевле, чем в Windows, поэтому было более эффективно разделить функциональные возможности на отдельные исполняемые файлы, чем разрешить единая программа для выращивания больших и монолитных.
В COM вы определяете двоичные интерфейсы, которые разрешают обмен данными с общей памятью. COM привязан к объектно-ориентированной парадигме. В классической модели Unix вы определяете ориентированные на поток интерфейсы, которые позволяют осуществлять обмен данными по каналам без общей памяти. Концептуально это намного ближе к парадигме функционального программирования.
Модель Unix поощряет создание небольших программ, которые можно легко связать вместе с помощью облегченной «оболочки», в то время как модель COM поощряет создание больших программ, которые предоставляют «компоненты», которые могут быть повторно использованы другими большими программами. Это действительно сравнение яблок и апельсинов, поскольку обе модели имеют преимущества и недостатки для разных сценариев.
Конечно, современные системы Unix могут иметь COM-подобные средства. В Mozilla есть XPCOM, кроссплатформенный фреймворк, построенный на тех же принципах, что и COM. GNOME долгое время использовал Bonobo, который концептуально очень похож на Microsoft OLE, который был предшественником COM. Но последние версии GNOME отошли от Bonobo в пользу D-Bus, который больше похож на шаблон событий / сообщений.
Ближе всего, вероятно, будет D-Bus. D-Bus - это легкий протокол IPC и брокер объектных запросов (ORB), очень похожий на COM и сильно вдохновленный как COM, так и предшественниками D-Bus - DCOP (KDE) и CORBA (GNOME), а также Netlink (Linux Kernel).
До появления D-Bus обе основные среды рабочего стола Unix имели свои собственные модели компонентов и шины рабочего стола. GNOME имел Bonobo, который был основан на CORBA, а KDE имел KParts, который был основан на DCOP. А ядро Linux имеет Netlink, который является протоколом связи между ядром и пользовательским пространством, который используется, например, инструментом iproute2
, когда вы настраиваете сетевой интерфейс.
Разработчики ядра постоянно получали просьбы выпустить Netlink как отдельную часть для связи между программами пользовательского пространства, однако они опасались, что это приведет к разрастанию функций и проблемам с обслуживанием. В конце концов, под эгидой организации Free Desktop, целью которой является создание стандартов для кросс-десктопов, разработчики KDE и GNOME объединились для разработки системы обмена сообщениями IPC, основанной на лучших частях DCOP и Netlink, и в результате получилась D-Bus.
В текущих версиях GNOME и KDE D-Bus полностью заменила CORBA и DCOP, что позволило запускать приложения GNOME в KDE и наоборот с гораздо большей точностью. D-Bus также был подхвачен многими другими средами рабочего стола и приложениями, не только в Linux, но и в других Unix-системах, а также в OSX и даже Windows.
Альтернативой, которую следует упомянуть, является XPCOM от Mozilla, которая представляет собой кроссплатформенную объектную модель, сильно вдохновленную CORBA и COM. (На самом деле XPCOM - это аббревиатура от Cross-Platform Component Object Model.) Она использует IDL, очень похожую на CORBA, под названием XPIDL. Однако, насколько я знаю, никто на самом деле не использует XPCOM, он признан как критиками, так и разработчиками Firefox и других приложений Mozilla как один из основных источников раздутости, и разработчики Mozila на самом деле активно работают над сокращением использования XPCOM, особенно внутри компонентов, таких как Gecko.
Однако, как отмечает @Daniel Pryden, в Unix уже есть много вещей, которые следует предпочесть D-Bus в случаях, когда не требуется тесная интеграция с рабочим столом. Я говорю о таких вещах, как трубы, именованные трубы и сокеты.